
前提
ワークブック1:オートフィルタでの作業用と抽出結果のまとめ用シートがある
ワークブック2:A列に顧客名(数十人)、B列以降に顧客情報(数十列)
ワークブック3:A列に顧客名(数十人)、B列以降に顧客情報(数十列)
※ワークブック2と3には共通する顧客名が含まれるが、顧客情報の種類がそれぞれ異なる。
やりたいこと
①ワークブック2、ワークブック3にそれぞれ異なる条件(顧客情報の)でオートフィルタをかける。②ワークブック2で抽出された顧客名でワークブック3にフィルタをかけワークブック2と3の両方に存在する顧客情報を抽出。
③ワークブック3の抽出された顧客情報をワークブック1の指定したシートにコピペする。
問題点
オートフィルタで複数条件で抽出を行う際、下記のようにfilter(0),filter(1)と数十人分コードを書いておけばマクロは動くのですが、コードを書くこと自体大変ですし、顧客数が数百ともなると不可能です。
Dim filter(2) As String
filter(0) = XXX '共通する顧客名1を取得
filter(1) = XXX '共通する顧客名2を取得
filter(2) = XXX '共通する顧客名3を取得
.
.
.
Range("A1").AutoFilter Field:=1, Criteria1:=filter(), Operator:=xlFilterValues
Q1:そこでワークブックにオートフィルタをかけて抽出された顧客名でCollectionを作り下記のようなコードを書いたのですが因数は省略できませんとのエラーが出てうまくいきませんでした。そもそもCollectionを使ってこのようなことはできないのでしょうか?
Dim 顧客名 As New Collection
〜Collectionの作成など、中略〜
Range("A1").AutoFilter Field:=1, Criteria1:=顧客名(), Operator:=xlFilterValues
次に下記のようなコードを書き、顧客名を一人ずつ抽出し、顧客情報を一人分ずつワークブック1へコピペすれば泥臭いですがやりたいことはできました。
Dim 顧客名 As New Collection
〜Collectionの作成など、中略〜
For i = 1 To 顧客数
With Workbooks(3).Worksheets(1)
.Range("A1").AutoFilter Field:=1, Criteria1:=顧客名(), Operator:=xlFilterValues
.Range("A1").CurrentRegion.Offset(1, 0).Copy Destination:=Workbooks(1).Worksheets(i * 顧客情報数 + 1).Cells(Rows.Count, 1).End(xlUp).Offset(1, 0)
End With
Next i
Q2:しかし処理時間がかなりかかり、もう少し短時間で処理する方法はないでしょうか?
Collectionを使う以外でも何か良い方法があればご教授頂けないでしょうか?
No.1ベストアンサー
- 回答日時:
フィルタをかけるところだけ、作ってみました。
こんな感じです。
Sub sample()
Dim r As Range
Dim filter As Variant
For Each r In Workbooks(2).Worksheets(1).UsedRange.Columns("A").SpecialCells(xlCellTypeVisible)
If filter <> "" Then filter = filter & ","
filter = filter & r.Value
Next r
filter = Split(filter, ",")
Range("A1").AutoFilter Field:=1, Criteria1:=filter, Operator:=xlFilterValues
End Sub
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Access(アクセス) Access IF文でテーブルに存在しない場合の処理について 2 2022/10/10 18:09
- Visual Basic(VBA) 複数ページあるPDFファイル内の文字列等の情報をキーにPDFをグループ分け分割したい。 2 2022/06/25 09:51
- PDF PDFファイルを分割するマクロの作り方を教えてください。 2 2022/06/24 11:09
- Visual Basic(VBA) 指定月分の顧客データファイルを統合して並べ替え、所定の場所に貼り付ける 3 2022/09/10 07:55
- Access(アクセス) 対象月の2桁表示について 1 2023/01/07 05:08
- Visual Basic(VBA) 前回ご教授いただいたコードに覚えたてのループ処理で品名りんごAから順に20回for nextでループ 7 2023/01/13 22:01
- Visual Basic(VBA) Sheet3から2つの条件でオートフィルターで抽出した個数をSheet2へ入力するマクロで、一つ目の 4 2023/01/12 23:40
- その他(法律) この場合、不正ログインになりますか? 1 2022/04/16 22:28
- Excel(エクセル) Excel 指定した固有番号で、複数の行を削除する方法は? 2 2022/03/30 15:18
- その他(データベース) accessについて 2 2022/05/31 16:58
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【VBA】条件に一致しない行を削...
-
列から特定の文字列検索→該当以...
-
Excel マクロ 検索結果を別シ...
-
VB.net
-
数値に見えるものはすべて数値...
-
エクセルのVBAで指定した行数の...
-
エクセルで空白行を削除する ...
-
excel2021で実行できないマクロ...
-
エクセルマクロでの行削除の方...
-
【EXCEL VBA】行の表示・非表示...
-
【VBA】条件に一致しない行を削...
-
マクロで最終行を取得してコピ...
-
【マクロ】A列最終行までを、カ...
-
Excel VBA オートフィルタの結...
-
エクセル住所録でフラッグの個...
-
Excel VBAでオートフィルタで抽...
-
各個体に対する平均値の自動計...
-
Excel マクロの編集がグレーに...
-
VBAで保存しないで閉じると空の...
-
WPSOffice_マクロの有効化について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
マクロで最終行を取得してコピ...
-
【VBA】条件に一致しない行を削...
-
Excel VBAでオートフィルタで抽...
-
数値に見えるものはすべて数値...
-
VB.net
-
列から特定の文字列検索→該当以...
-
エクセルで空白行を削除する ...
-
Excel マクロ 検索結果を別シ...
-
エクセルのデータがない行には...
-
【マクロ】A列最終行までを、カ...
-
【VBA】条件に一致しない行を削...
-
各個体に対する平均値の自動計...
-
エクセルのVBAで指定した行数の...
-
EXCEL VBAでA列にある空白行よ...
-
VBAでの重複データに色付け
-
空白を複数行一気に挿入するには?
-
エクセルで階層図を作る方法
-
vbaエクセルマクロについて she...
-
【至急】Excel 同一人物の情報...
-
Excel97 指定した行だけマク...
おすすめ情報
コードに誤りがありましたので修正します。
誤:顧客名()
正:顧客名(i)
Dim 顧客名 As New Collection
〜Collectionの作成など、中略〜
For i = 1 To 顧客数
With Workbooks(3).Worksheets(1)
.Range("A1").AutoFilter Field:=1, Criteria1:=顧客名(i), Operator:=xlFilterValues
.Range("A1").CurrentRegion.Offset(1, 0).Copy Destination:=Workbooks(1).Worksheets(i * 顧客情報数 + 1).Cells(Rows.Count, 1).End(xlUp).Offset(1, 0)
End With
Next i