• ベストアンサー

マクロ:データの抽出(複数条件)

エクセルで以下のようなマクロを作成しました。 シート1のG列がシート2のF4と合致する時、シート2のC列にシート1のB列を貼り付けるのですが、条件を増やし 「シート1G列がシート2のF4と一致」かつ「シート1H列がシート2のG5と一致」かつ「シート1I列がシート2のH5と一致」かつ・・・としたいのですが、If Thenをどのように記述したらよろしいでしょうか。(AND関数の機能です) 宜しくお願いいたします。 Sub data01() With Sheets("Sheet1") x = .UsedRange.Cells(.UsedRange.Count).Row For i = 5 To x If .Cells(i, "G").Value = Worksheets("Sheet2").Range("F4").Value Then n = n + 1 Sheets("Sheet2").Cells(n + 5, "C").Value = .Cells(i, "B").Value End If Next End With End Sub

質問者が選んだベストアンサー

  • ベストアンサー
  • ham_kamo
  • ベストアンサー率55% (659/1197)
回答No.1

If .Cells(i, "G").Value = Worksheets("Sheet2").Range("F4").Value Then を、 If .Cells(i, "G").Value = Worksheets("Sheet2").Range("F4").Value _ And .Cells(i, "H").Value = Worksheets("Sheet2").Range("G5").Value _ And .Cells(i, "I").Value = Worksheets("Sheet2").Range("H5").Value Then にすればいかがでしょうか。 ちょっと長くなるので、 Set W2 = Sheets("Sheet2") としておいて、 If .Cells(i, "G").Value = WS2.Range("F4").Value _ And .Cells(i, "H").Value = WS2.Range("G5").Value _ And .Cells(i, "I").Value = WS2.Range("H5").Value Then とすればすっきりするかと。

gucchi-you
質問者

お礼

ありがとうございます、できました。ただ2番目の方法で以下のように記述したところ、「オブジェクトが必要です」というエラーメッセージが出てしまいました。マクロは初心者なもので、後学のためにもどのように修正すればよいか教えてください。宜しくお願いいたします。 Sub data01() With Sheets("Sheet1") x = .UsedRange.Cells(.UsedRange.Count).Row For i = 5 To x Set W2 = Sheets("Sheet2") If .Cells(i, "G").Value = WS2.Range("F4").Value _ And .Cells(i, "H").Value = WS2.Range("G4").Value _ And .Cells(i, "J").Value = WS2.Range("H4").Value Then n = n + 1 Sheets("Sheet2").Cells(n + 5, "C").Value = .Cells(i, "B").Value End If Next End With End Sub

その他の回答 (2)

  • ham_kamo
  • ベストアンサー率55% (659/1197)
回答No.3

No.1です。 No.2さん、フォローをありがとうございます。(自分でも気がつかなくて首をひねっていました。コピペのときにちょっと整形したつもりが、ミスってしまったようです) なお、Set文はFor文の前に置く方がいいでしょう。(ループで同じ代入文を何回も実行しても無駄なので) それから、このように一度変数に代入するのは、単に一行を短くするだけでなく、あとからシート名を変更したときに、マクロも一箇所修正するだけで済むというメリットもあります。 以上、補足でした。

gucchi-you
質問者

お礼

重ね重ねありがとうございました。活用させていただきます。

  • fly_moon
  • ベストアンサー率20% (213/1046)
回答No.2

Set W2 = Sheets("Sheet2") ↓ Set WS2 = Sheets("Sheet2") でいいかと…

gucchi-you
質問者

お礼

ありがとうございます、自分で注意してよく見ればわかることでした。 (・_・; ゞ⌒☆ペシッ

関連するQ&A

専門家に質問してみよう