質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

Q&A

解決済

1回答

2365閲覧

【VBA】 別シートのデータを複数回抽出

koko2

総合スコア21

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

0グッド

0クリップ

投稿2020/04/02 06:22

編集2020/04/04 15:11

[前提]
VBAにて集計表を作成しております。
集計元は今のところ[data]1つのシートにまとまっています。
[data]シートと同じエクセルファイルに「集計」シートがあります。
[data]シートはA列からAB列まであります。A列はCからH列を”&”で結合したものをB列にいったん貼りつけ、さらにコピーして、値としてA列に貼り付けました。
イメージ説明

集計シート
イメージ説明

[やりたいこと]
①集計元のシート([data]が記載されている) → 必要なデータを抽出 → 集計先のセルA2に貼り付け
②集計元のシート([data]が記載されている) → さらに必要なデータを抽出 → 集計先の①の下に貼り付け
③ ②を繰り返す

キーワードを「集計」シートに作成したH1の検索欄に入れる。キーワードにマッチする行を見つけ[data]から選択し「集計」シートに転記
さらに次に欲しいデータを順番に検索し、結果を最初に検索し転記したセルの末尾に貼り付けし、一覧表を作る。
H1でヒットするものは、1行の時もありますが、3行のときもあります。
シートからA列、I列、J列のみコピーしたいと思っています。
下記のコードで1回の検索はできますが、複数回検索し、貼り付けの繰り返し検索したいときの集計のマクロ記載がどう作成すればいいのか分かりません。

Sub

1 2i = Sheets("集計").Range("H2") 3 4Sheets("Data").Select 5Range("A1:AB1048576").AutoFilter field:=1, Criteria1:=i 6 7Range("A2:A1048576,I2:I1048576,J2:J1048576").Copy 8Sheets("集計").Range("A2:C1048576").PasteSpecial 9 10End Sub 11 12コード

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

ExcelVBA

1Sub test2() 2 Dim sKey As String 3 4 '抽出キーワードの取得 5 sKey = Sheets("集計").Range("H2").Text 6 'オートフィルターでキーワードを含むデータを抽出し、I:J列をコピー 7 With Sheets("Data").AutoFilter.Range 8 .AutoFilter field:=1, Criteria1:=sKey 9 .Offset(1).Columns("I:J").Copy 10 End With 11 '集計シートの2列目の最後の行の下に貼付 12 With Sheets("集計").Range("A1").CurrentRegion 13 .Cells(.Rows.Count + 1, 2).PasteSpecial 14 End With 15 '1列目の空欄を検索したキーワードで埋める 16 Sheets("集計").Range("A1").CurrentRegion _ 17 .Columns(1).SpecialCells(xlCellTypeBlanks).Value = sKey 18End Sub

とりあえず、とっ散らかっているこーどを纏めるとこんな感じですかね。

1回の中でオートフィルターを設定して解除するようにしました。

ExcelVBA

1Option Explicit 2 3Sub test2() 4 Dim sKey As String 5 6 '抽出キーワードの取得 7 sKey = Sheets("集計").Range("H2").Text 8 'オートフィルターでキーワードを含むデータを抽出し、I:J列をコピー 9 With Sheets("Data").Range("A1").CurrentRegion 10 .AutoFilter field:=1, Criteria1:=sKey 11 .Offset(1).Columns("I:J").Copy 12 End With 13 '集計シートの2列目の最後の行の下に貼付 14 With Sheets("集計").Range("A1").CurrentRegion 15 .Cells(.Rows.Count + 1, 2).PasteSpecial 16 End With 17 '1列目の空欄を検索したキーワードで埋める 18 Sheets("集計").Range("A1").CurrentRegion _ 19 .Columns(1).SpecialCells(xlCellTypeBlanks).Value = sKey 20 21 'オートフィルター解除 22 Sheets("Data").AutoFilter.Range.AutoFilter 23End Sub

2回目ってH2セルを書き換えるんじゃないんですか?
何回も実行したら、その都度どんどん結果が追記されると思いますが、
H2セルじゃなければどこなんでしょう?

投稿2020/04/04 23:50

編集2020/04/05 05:14
mattuwan

総合スコア2136

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

koko2

2020/04/05 03:51

回答ありがとうございました。検索することができました。すばらしいです。 すみませんが、もう少し教えてください。1回目に検索したものを残しつつ、2回目に検索したものをその下のA列に貼り付けることはできますでしようか?また、オートフィルターはどのタイミングで解除を記載するのが問題なく動きますでしょうか?
koko2

2020/04/05 06:32

ありがとうございました。オートフィルター解除を追記してもらいましたらできました。本当に助かります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問