
Excelvba2013で、同じ検索条件で続けて検索取得していくのに、ネットで調べながらFindNextを使ってやっています。
"テーブル"シートのA列に検索したい分類項目が記載されていて、その隣のB列にデータがあります。分類項目は変動するため数は不明です。
そして、"データ"シートのC3,D3,E3・・・と分類項目が載っています。
C3の下のC4,C5,C6・・・に分類項目のC3のデータを入れていき、D3の下のD4,D5,D6・・・にD4のデータ、以降E列、F列と続いていきます。
とりあえず、現在、"データ"シートのC3の項目に対するデータは取得できています。以降、C3の項目のデータが満たされたらD3、E3・・・と"テーブル"シートのA列の分類項目をすべて満たすまで繰り返したいのですが、繰り返し処理のやり方がうまくできず、次の分類項目に進めずにいます。
以下のコードをどのように変えたらよいでしょうか?
すいません、いつもお手数をおかけしています。
Sub 同じ条件でデータ検索繰り返し2()
Dim myRange As Range, srcRange As Range, myAddress As String, i As Integer, p As Integer
Application.ScreenUpdating = False
p = 3
Set srcRange = Worksheets("テーブル").Range("A:A") 'テーブルのA列を格納
Set myRange = srcRange.Find(What:=Worksheets("データ").Cells(3, p).Value, LookIn:=xlValues, _
LookAt:=xlWhole) If Not myRange Is Nothing Then
myAddress = myRange.Address
i = 4
Do
Cells(i, p).Value = myRange.Offset(, 1).Value
Set myRange = srcRange.FindNext(After:=myRange)
i = i + 1
Loop Until myRange.Address = myAddress
End If
If myRange.Address = myAddress Then
Do
p = p + 1
Cells(i, p).Value = myRange.Offset(, 1).Value
Set myRange = srcRange.FindNext(After:=myRange)
i = i + 1
Loop Until myRange.Address = myAddress
Else
End If
End Sub
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
早速ありがとうございます。
動作は問題ありませんでした。
ただ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
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
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) エクセルVBAのコードで質問です。 下のコードはJ16の文字列をB3を起点とする範囲から探して、見つ 5 2023/04/07 11:07
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
- Visual Basic(VBA) Excelで下記のようにマクロを作ったところ、一回目は実行できたのですが、二回目以降「実行時エラー1 1 2022/03/25 08:08
- Visual Basic(VBA) 【ご教示ください】VBAの記述方法がわかりません。 2 2022/08/12 21:28
- Visual Basic(VBA) vbaを早くしたい 5 2022/09/09 10:58
- Visual Basic(VBA) 2つのシートの任意のセルの番号が一致したら、一致した行をコピーする VBA 2 2023/06/19 20:48
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Visual Basic(VBA) VBAが止まります。 3 2022/08/31 14:09
- Visual Basic(VBA) 【前回の続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/16 16:44
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたい 6 2023/01/23 12:00
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【マクロ】エラー【#DIV/0!】が...
-
セルにぴったし写真を挿入
-
エクセル画像(写真)挿入
-
オートフィルターの絞込みをし...
-
EXCELのVBAで複数のシートを追...
-
【マクロ】【画像あり】関数が...
-
勤怠表について ABS、TEXT関数...
-
エクセルのリストについて
-
Excelで4択問題を作成したい
-
【Officer360?Officer365?の...
-
グループごとの人数のカウント
-
エクセル GROUPBY関数について...
-
エクセルシートの見出しの文字...
-
エクセル ドロップダウンリスト...
-
エクセル
-
グループごとの個数をカウント...
-
【マクロ】元データと同じお客...
-
グループごとの人数のカウント
-
エクセルの複雑なシフト表から...
-
エクセルの関数について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Access インポート上限について
-
ExcelをAccessにペーストエラー
-
DICの何番に相当するでしょうか?
-
イラストのデータ入稿について...
-
弥生会計のインポート機能について
-
SQL*Loader 最終行が数値の場合
-
ピポットテーブルの項目並び替...
-
ExcelvbaのFindNext複数項目繰...
-
データを削除しても表領域の使...
-
Viewにインデックスは張れ...
-
ORA-00959: 表領域'****'は...
-
CLOB型へのINSERT
-
datapumpの実行方法について
-
異なるスキーマからデータを抽...
-
Data Pump で大量データインポ...
-
INDEXの無効化
-
ACCESS 複数テーブル・複数フィ...
-
DELETE文でFROM句を省略した場合
-
テーブルからのselectにおいて...
-
viewのバックアップ
おすすめ情報