• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ExcelvbaのFindNext複数項目繰り返し)

ExcelvbaのFindNext複数項目繰り返し

このQ&Aのポイント
  • Excelvba2013で、同じ検索条件で続けて検索取得していく方法を教えてください。
  • "テーブル"シートのA列に検索したい分類項目があり、その隣のB列にデータがあります。データは"データ"シートのC3,D3,E3・・・と分類項目の下に続いています。
  • 現在は"データ"シートのC3の項目に対するデータは取得できていますが、次の分類項目に進めずにいます。どのようにコードを変えればよいでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • watabe007
  • ベストアンサー率62% (476/760)
回答No.1

参考に Sub 同じ条件でデータ検索繰り返し3()   Dim myRange As Range, srcRange As Range, myAddress As String, i As Long   Dim c As Range   Application.ScreenUpdating = False   Set srcRange = Worksheets("テーブル").Range("A:A") 'テーブルのA列を格納   For Each c In Worksheets("データ").Range("C3:E3") '"データ"シートのC3,D3,E3・     Set myRange = srcRange.Find(What:=c.Value, LookIn:=xlValues, LookAt:=xlWhole)     If Not myRange Is Nothing Then       myAddress = myRange.Address       i = 1       Do         c.Offset(i).Value = myRange.Offset(, 1).Value         Set myRange = srcRange.FindNext(After:=myRange)         i = i + 1       Loop Until myRange.Address = myAddress     End If   Next   Application.ScreenUpdating = True End Sub

hinoki24
質問者

お礼

早速ありがとうございます。 動作は問題ありませんでした。 ただRange("C3:E3") と直接指定しているのでデータの分類項目が増えたとき変更が必要になるので他の人が使う時に反映されないよ、ということが起こりそうです。最初に余裕をみとくと、処理に無駄に時間がかかりました。 そこでデータの分類項目を数えて、それを変数でいれてやると、かなりよくなりました。それでも1分くらいかかりますが・・・。 どうもありがとうございました。 Sub 同じ条件でデータ検索繰り返し4() Dim myRange As Range, srcRange As Range, myAddress As String, i As Long, p As Long Dim c As Range Application.ScreenUpdating = False 'フィルター解除 If Worksheets("テーブル").FilterMode Then Worksheets("テーブル").ShowAllData End If Set srcRange = Worksheets("テーブル").Range("A:A") 'テーブルのA列を格納 p = Range("B4:B" & Cells(Rows.Count, "B").End(xlUp).Row).Count For p = 3 To p For Each c In Worksheets("データ").Cells(3, p) '"データ"シートのB列の数 Set myRange = srcRange.Find(What:=c.Value, LookIn:=xlValues, LookAt:=xlWhole) If Not myRange Is Nothing Then myAddress = myRange.Address i = 1 Do c.Offset(i).Value = myRange.Offset(, 1).Value Set myRange = srcRange.FindNext(After:=myRange) i = i + 1 Loop Until myRange.Address = myAddress End If Next Next p Application.ScreenUpdating = True End Sub

その他の回答 (1)

  • watabe007
  • ベストアンサー率62% (476/760)
回答No.2

>ただRange("C3:E3") と直接指定しているのでデータの分類項目が増えたとき変更が・・ >For Each c In Worksheets("データ").Range("C3:E3")   ↓   ↓   ↓  With Worksheets("データ")    Set bunRange = .Range("C3", .Cells(3, Columns.Count).End(xlToLeft))  End With  For Each c In bunRange

hinoki24
質問者

お礼

どうもありがとうございます。 助かります。

関連するQ&A

専門家に質問してみよう