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

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

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

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

Q&A

1回答

3118閲覧

VBAにおいて、検索条件のデータを別ブックに張り付ける方法

soft.soft

総合スコア7

VBA

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

0グッド

0クリップ

投稿2018/04/07 15:44

編集2022/01/12 10:55
コード ```初めまして。 現在VBAを勉強し始めましたが、できない操作があります。 お力を貸していただけたら助かります。 現在試行錯誤している動作は、 日付・名前・メモ のデータをまとめたBOOK1のシートで、検索セル(例えばA1に)に入力した条件に合致するデータだけを、BOOK2のシートに転記する ということです。 何日かかけ、何時間と試行錯誤しましたが進みません。 この場合はどうしたら良いのでしょうか。 どうぞ、よろしくお願いします

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

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

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

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

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

guest

回答1

0

VBAを始めたばかりなのであれば、マクロの記録を使って手順を記録し、それを直すことから始めるのがオススメです。

もし今回の内容を手作業でやる場合、おそらくフィルターを使われるのではないかと思います。そこで、試しにその手順を記録させてみました。

記録させた手順

  1. BOOK1で表全体を選択します。
  2. 「データ」タブの「フィルター」でフィルターを適用します。
  3. 検索したい列の「▼」を選んで、「テキスト フィルター」の「指定の値を含む...」などを選んで、条件を入力します。
  4. 条件に該当したものだけが選ばれた状態になるのでコピーします。
  5. BOOK2のコピー先を選んで貼り付けます。
  6. BOOK1に戻ってフィルターを解除します。

出来上がったVBAのコードの例

※わかりやすいように、出来上がったコードにコメントと空行を加えています。

VBA

1Sub Macro1() 2' 3' Macro1 Macro 4' 5 ' 1.表の選択 6 Range("A1:C4").Select 7 8 ' 2.フィルタ―の設定 9 Selection.AutoFilter 10 11 ' 3.検索条件を指定 12 ActiveSheet.Range("$A$1:$C$4").AutoFilter Field:=3, Criteria1:="=ほげほげ", _ 13 Operator:=xlAnd 14 15 ' 4.コピー 16 Selection.Copy 17 18 ' 5.Book2のセルA1を選択して貼り付け 19 Windows("Book2").Activate 20 Range("A1").Select 21 ActiveSheet.Paste 22 23 ' 6.Book1のフィルターを解除 24 Windows("Book1").Activate 25 Application.CutCopyMode = False 26 Selection.AutoFilter 27 28End Sub

このコードをベースにして、合わないところを直していけば良いかと思います。
例えば、条件としてセルE1の内容を使いたいのであれば、
「Criteria1:="=ほげほげ"」
の部分を
「Criteria1:="=" & Range("E1").Value」
に変えればOKです。

投稿2018/04/07 18:32

segavvy

総合スコア958

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

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

soft.soft

2018/04/08 03:00

segavvyさん、コメントありがとうございます! フィルターという機能を使うと検索できるということから知らなかったため、とても助かりました。 説明がわかりやすかったため、アドバイスをいただいたとおりにまくろをくんでから、それをヒントに組み立てました。 その結果、Criteria1:="=" & Range("E1").Valueの部分がうまくいかなかったため、どこがおかしいか指摘いただけますとうれしいです。 (book2の上にbook1を開いた状態から) Range("A4").Select Range(Selection, Selection.End(xlToRight)).Select Range(Selection, Selection.End(xlDown)).Select Application.CutCopyMode = False Selection.Copy Windows("book2").Activate Range("A4").Select ActiveSheet.Paste ActiveSheet.Range("C4:C28").Select Application.CutCopyMode = False Selection.AutoFilter ActiveSheet.Range("$C$4:$C$28").AutoFilter Field:=1, Criteria1:="ぼげぼげ" ←限定すればうまくいく 'ActiveSheet.Range("$C$4:$C$28").AutoFilter Field:=1, Criteria1:=Range"E1" ←セルと同条件にするとうまくいかず
segavvy

2018/04/08 03:16

セルの中身を取り出すには、「.Value」を付ける必要があります。 これでどうでしょうか。 ActiveSheet.Range("$C$4:$C$28").AutoFilter Field:=1, Criteria1:=Range("E1").Value
soft.soft

2018/04/08 06:35

素早い反応、本当にありがとうございます!助かります。 ご指摘いただいた個所を直したところ、正しく動作しました! book1の一番上のデータのみに対応したので、データすべてにフィルターをかけるためifを使ってうまくいくか試してみたいと思います。本当にありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問