- ベストアンサー
VBAで条件一致抽出ループ
- VBAを使用して、条件に一致するデータを抽出しループ処理する方法について説明します。
- 具体的には、《シート1》と《シート2》という2つのシートがあり、《シート1》の一部のデータを《シート2》に抽出する方法について解説します。
- 条件によって、抽出するデータの配置やループ処理の方法が異なる場合もあります。具体的な処理の流れや注意点を詳しく説明しています。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
ご相談で書かれている通りに、1行目にタイトル行など用意してない、1行目からいきなり生データが記入してあるとします 1行ずつループしてひとつずつ調べてくみたいな遅い事はしないでみます。 sub macro1() ’整形 worksheets("Sheet1").select worksheets("Sheet2").cells.clearcontents range("1:1").insert shift:=xlshiftdown range("A1:C1") = array("F1","F2","F3") range("C:C").insert range("C2:C" & range("D65536").end(xlup).row).formula = "=A2&""_""&B2" ’項目の抽出 range("B1:B" & range("B65536").end(xlup).row).advancedfilter _ action:=xlfiltercopy, _ copytorange:=worksheets("Sheet2").range("A1"), _ unique:=true ’横向け worksheets("Sheet2").range("A2:A" & range("A1").end(xldown).row).copy worksheets("Sheet2").range("B1").pastespecial transpose:=true worksheets("Sheet2").range("A:A").clearcontents ’項目の抽出 range("A1:A" & range("A65536").end(xlup).row).advancedfilter _ action:=xlfiltercopy, _ copytorange:=worksheets("Sheet2").range("A1"), _ unique:=true ’データの抽出 with worksheets("Sheet2").range("A1").currentregion.offset(1,1) .formula = "=VLOOKUP($A2&""_""&B$1,Sheet1!$C:$D,2,FALSE) .value = .value .specialcells(xlcelltypeconstants, xlerrors).clearcontents end with ’後片付け worksheets("Sheet2").range("A1").clearcontents range("C:C").delete shift:=xlshifttoleft range("1:1").delete shift:=xlshiftup worksheets("Sheet2").select end sub
お礼
お早い回答有り難うございます。 なんだか、ボケている質問だったらすみません。 データ抽出のところで、withを使用していますが、そちらう後ろには何を記載したら良いでしょうか。 また、こちらを実行すると同じところ(データ抽出)のworksheetsの部分でオブジェクトは、このプロパティまたはメソッドをサポートしていません。と出てしまいます。 もし私のモジュールへの書き方がおかしかったらすみませんが、 ご指示いただけないでしょうか。
補足
補足より失礼致します。 私の書き方がおかしかったようです。 またこちらの使い方も慣れていなく、 お礼を書き直したり等できなそうなので、 こちらに書かせて頂きます。 お早い回答有り難うございました。