Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


9109 / 13644 ツリー ←次へ | 前へ→

【29259】同じデータが続いている最後のセルを見つける kono 05/9/29(木) 11:22 質問[未読]
【29264】Re:同じデータが続いている最後のセルを見... とまと 05/9/29(木) 11:55 回答[未読]
【29289】Re:同じデータが続いている最後のセルを見... kono 05/9/29(木) 19:36 発言[未読]
【29296】Re:同じデータが続いている最後のセルを見... とまと 05/9/29(木) 23:24 回答[未読]
【29305】Re:同じデータが続いている最後のセルを見... kono 05/9/30(金) 11:04 お礼[未読]
【29269】Re:同じデータが続いている最後のセルを見... ちくたく 05/9/29(木) 12:04 回答[未読]
【29274】本筋とは関係ありませんが、Withブロックの... ちくたく 05/9/29(木) 13:11 発言[未読]
【29273】Re:同じデータが続いている最後のセルを見... Kein 05/9/29(木) 12:42 回答[未読]
【29281】Re:同じデータが続いている最後のセルを見... kono 05/9/29(木) 15:34 お礼[未読]

【29259】同じデータが続いている最後のセルを見つ...
質問  kono  - 05/9/29(木) 11:22 -

引用なし
パスワード
   いつもお世話になっています。

  A
1 135
2 135
3 135
4 142
5 142
6 142
7 142
8 142
9 156
10 156
.
.
このように行方向に同じデータが複数ずつ入力されているシートです。
1行だけのものもあれば、80行のものもあります。
同データの最後のセルの下に行を挿入してデータを入力するuserformを作ります。
ex.textboxに「135」と入力しcommandbuttonを押すと
A3とA4の間に行挿入し、新しく出来たA4にA3データをコピーする。
A列のデータは昇順に並んでいます。同データの最後のセルを見つける、
という方法がわかりませんでした。
アドバイスをよろしくお願い致します。

【29264】Re:同じデータが続いている最後のセルを...
回答  とまと  - 05/9/29(木) 11:55 -

引用なし
パスワード
   findで下から検索すればよいとおもいます。


Private Sub CommandButton1_Click()

Dim c

Set c = Columns("A").Find(TextBox1.Value, , xlValues, xlWhole, , xlPrevious)

If Not c Is Nothing Then
 c.Offset(1).EntireRow.Insert shift:=xlShiftDown
 c.Offset(1).Value = c.Value
 Me.Hide
Else
 MsgBox "ないよ!"
End If


End Sub

【29269】Re:同じデータが続いている最後のセルを...
回答  ちくたく  - 05/9/29(木) 12:04 -

引用なし
パスワード
   こんにちは。

Findを使わないなら。

Private Sub CommandButton1_Click()
  Dim myVal As Integer
  Dim i As Integer
  
  myVal = TextBox1.Text
  For i = 1 To ActiveSheet.Range("A65536").End(xlUp).Row
  If Range("A" & i).Value <> myVal Then
    Range("A" & i).Insert Shift:=xlDown
    Range("A" & i).Value = myVal
    Exit For
  End If
  Next i
End Sub

【29273】Re:同じデータが続いている最後のセルを...
回答  Kein  - 05/9/29(木) 12:42 -

引用なし
パスワード
   その数値データが Sheet1 にあり、A列に昇順で入力されているとして・・

Private Sub CommandButton1_Click()
  Dim Num As Long
 
  With TextBox1
    If .Value = "" Then Exit Sub
    If Not IsNumeric(.Value) Then Exit Sub
    Num = CLng(.Value)
  End With
  With Worksheets("Sheet1")
   If IsError(Application.Match(Num, .Range("A:A"), 0)) Then
     MsgBox "TextBox1 の値は見つかりません", 48: Exit Sub
   End If
   .Range("A65536").End(xlUp).Offset(1).Value = Num
   .Range("A1", .Range("A65536").End(xlUp)) _
   .Sort Key1:=.Columns(1), Order1:=xlAscending, _
   Header:=xlNo, Orientation:=xlSortColumns
  End With
End Sub
   
というようなコードで出来ると思います。
行の挿入や削除は処理が遅いので、なるべく使わない方法を考えた方が良いと思います。

【29274】本筋とは関係ありませんが、Withブロック...
発言  ちくたく  - 05/9/29(木) 13:11 -

引用なし
パスワード
   本筋とは関係ありませんが、
因みに、ちょっと不思議だなぁ、と思ったんですが。、

>>Range("A" & i).Insert Shift:=xlDown
>>Range("A" & i).Value = myVal

の部分を、

With Range("A" & i)
   .Insert Shift:=xlDown
   .Value=myVal
End With

にすると、うまく動作しません
(というか、シフトダウンしたもうひとつ下のセルに値が入力されます)
不思議です。Withブロックをやった時点で、
レンジオブジェクトのアドレスが固定されるとかなんだろうか。。。

【29281】Re:同じデータが続いている最後のセルを...
お礼  kono  - 05/9/29(木) 15:34 -

引用なし
パスワード
   とまとさま
ちくたくさま
keinさま

さっそく使わせて頂きました。
色々な方法があるのですね。
非常に勉強になりました。

本当にどうもありがとうございました!

【29289】Re:同じデータが続いている最後のセルを...
発言  kono  - 05/9/29(木) 19:36 -

引用なし
パスワード
   とまとさま
実際にデータを検索するのはC列だったので、
Private Sub CommandButton1_Click()
Dim c '←これって何も宣言しなくてもいいんですか?

Set c = Columns("C").Find(TextBox1.Value, , xlValues, xlWhole, , xlPrevious)

If Not c Is Nothing Then
 c.Offset(1).EntireRow.Insert shift:=xlShiftDown
 c.Offset(1).Value = c.Value 'この後にセルA,Bへの代入のコードが欲しいのです。
 Me.Hide
 Else
 MsgBox "ないよ!"
End If

 End Sub
このように使わせて頂きました。同データの次の行に無事挿入されました。
挿入された行のセルCにはデータがコピーされましたが、セルAとセルB
niha,
textbox2、textbox3のデータを入れたい時、セルA、Bを指定できません。
セルCを基準にして指定するのでしょうか。
すみません、見習の身分で色々試してみましたが、だめでした。
よろしくお願い致します。

【29296】Re:同じデータが続いている最後のセルを...
回答  とまと  - 05/9/29(木) 23:24 -

引用なし
パスワード
   こんばんは。
>Dim c '←これって何も宣言しなくてもいいんですか?
宣言を省略した場合はvariant型になると思います。
findで検索するとエラーになる場合があるので,
variantで受けます。

>c.Offset(1).Value = c.Value 'この後にセルA,Bへの代入のコードが欲しいのです。

 c.offset(1,-2).value = c.offset(,-2).value 'A列
 c.offset(1,-1).value = c.offset(,-1).value 'B列 

になるとおもいます。

【29305】Re:同じデータが続いている最後のセルを...
お礼  kono  - 05/9/30(金) 11:04 -

引用なし
パスワード
   とまとさま。

できました!!
本当にありがとうございました。

9109 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free