
前提
ワークブック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で質問しましょう!
関連するカテゴリからQ&Aを探す
今、見られている記事はコレ!
-
弁護士が解説!あなたの声を行政に届ける「パブリックコメント」制度のすべて
社会に対する意見や不満、疑問。それを発信する場所は、SNSやブログ、そしてニュースサイトのコメント欄など多岐にわたる。教えて!gooでも「ヤフコメ民について」というタイトルのトピックがあり、この投稿の通り、...
-
弁護士が語る「合法と違法を分けるオンラインカジノのシンプルな線引き」
「お金を賭けたら違法です」ーーこう答えたのは富士見坂法律事務所の井上義之弁護士。オンラインカジノが違法となるかどうかの基準は、このように非常にシンプルである。しかし2025年にはいって、違法賭博事件が相次...
-
釣りと密漁の違いは?知らなかったでは済まされない?事前にできることは?
知らなかったでは済まされないのが法律の世界であるが、全てを知ってから何かをするには少々手間がかかるし、最悪始めることすらできずに終わってしまうこともあり得る。教えてgooでも「釣りと密漁の境目はどこです...
-
カスハラとクレームの違いは?カスハラの法的責任は?企業がとるべき対応は?
東京都が、客からの迷惑行為などを称した「カスタマーハラスメント」、いわゆる「カスハラ」の防止を目的とした条例を、全国で初めて成立させた。条例に罰則はなく、2025年4月1日から施行される。 この動きは自治体...
-
なぜ批判コメントをするの?その心理と向き合い方をカウンセラーにきいた!
今や生活に必要不可欠となったインターネット。手軽に情報を得られるだけでなく、ネットを介したコミュニケーションも一般的となった。それと同時に顕在化しているのが、他者に対する辛らつな意見だ。ネットニュース...
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAについて困っています
-
VBAでの重複データに色付け
-
EXCEL VBAでA列にある空白行よ...
-
エクセルのVBAで指定した行数の...
-
【VBA】条件に一致しない行を削...
-
数値に見えるものはすべて数値...
-
【マクロ】A列最終行までを、カ...
-
VBAで入力の結果を他のセルに反...
-
VB.net
-
マクロで最終行を取得してコピ...
-
コマンドボタンでの自動計算マ...
-
【マクロ】元データと同じお客...
-
VBAで保存しないで閉じると空の...
-
エクセル関数>参照ファイル名...
-
WPSOffice_マクロの有効化について
-
Excel マクロの編集がグレーに...
-
【Excel VBA】マクロでExcel自...
-
エクセルのvbaにて thisworkboo...
-
エクセルで、「いいね」のよう...
-
エクセル ボタンに設定したマク...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
数値に見えるものはすべて数値...
-
マクロで最終行を取得してコピ...
-
VB.net
-
列から特定の文字列検索→該当以...
-
Excel VBAでオートフィルタで抽...
-
【VBA】条件に一致しない行を削...
-
エクセルのデータがない行には...
-
【マクロ】A列最終行までを、カ...
-
Excel97 指定した行だけマク...
-
エクセルのVBAで指定した行数の...
-
各個体に対する平均値の自動計...
-
Excel マクロ 検索結果を別シ...
-
EXCEL VBAでA列にある空白行よ...
-
オートフィルターの複数条件検...
-
エクセルで階層図を作る方法
-
エクセルで空白行を削除する ...
-
【VBA】条件に一致しない行を削...
-
VBAで入力の結果を他のセルに反...
-
マクロで教えてください。
-
Access2003レポート:最終ペー...
おすすめ情報
コードに誤りがありましたので修正します。
誤:顧客名()
正:顧客名(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