- ベストアンサー
エクセルで抽出マクロについて
- エクセルで抽出結果を別シートにコピーする方法について初心者が質問しています。抽出条件が2列にわたっている場合、特定の分類を抽出する方法を知りたいとのことです。
- 具体的な例として、分類が「2」のデータを抽出して別シートにコピーする方法を知りたいとしています。
- エクセルのバージョンが2007で、データは増えていく予定であるとしています。今までの試行錯誤でうまくいかなかったため、何かアドバイスがほしいとのことです。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
Excel(エクセル) VBA入門:フィルタオプション(AdvancedFilter)でのデータ抽出 http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/vba_advancedfilter.html が参考になるのでは? (抽出条件を2列:【分類(あ)・分類(い)】で行なえば)
その他の回答 (4)
- netmaster
- ベストアンサー率28% (11/39)
どうしてもマクロで抽出したいというなら別ですが 作業セルE列にとしE2セルに =OR(C2=$E$1,D2=$E$1)*1 以下コピー E1に抽出したいコード入力 2行目以下をE列を基準に降順に並び替えA:B列をシート2にコピーと言う手も有ります
- pkh4989
- ベストアンサー率62% (162/260)
参考にしてください。 EXCEL2003の例です。2007でも問題ないはず Sub 検索_表示() Dim ws1 As Worksheet Dim ws2 As Worksheet Dim ws3 As Worksheet Dim mR As Long Dim wR As Long Dim eR As Long Dim wStr As String ' Set ws1 = Worksheets("Sheet1") 'シート1 Set ws2 = Worksheets("Sheet2") 'シート2 Set ws3 = Worksheets("Sheet3") 'シート3 wStr = ws1.Range("A1") '←シート1のあるセル「A1とします」 eR = ws2.Cells(Rows.Count, "A").End(xlUp).Row 'シート2の現在設定データ行数を求める With ws3 mR = .Cells(Rows.Count, "A").End(xlUp).Row 'シート3の現在入力データ行数を求める For wR = 2 To mR If .Cells(wR, 3) = wStr Or _ .Cells(wR, 4) = wStr Then eR = eR + 1 ws2.Cells(eR, 1) = .Cells(wR, 1) '日付 ws2.Cells(eR, 2) = .Cells(wR, 2) 'タイトル End If Next End With End Sub
お礼
丁寧なご回答をいただき、ありがとうございます。 今回はn-junさんがご紹介してくださったホームページを参考に作ってしまいましたが、まだまだ理解できていない部分も多いので、今度pkh4989さんのもやってみたいと思います。 ありがとうございました。
- hallo-2007
- ベストアンサー率41% (888/2115)
VBAの勉強というのであれば、まずはマクロの記録を実行してみてください。 マクロの実行開始 1、シート3を選択、オートフィルター 2、C列が2を抽出、D列が2を抽出 3、1行目から1000行くらい(データ以上にたっぷりと選択) 4、シート2に選択A1セルに貼り付け マクロの記録の終了 上記で作成されたコードを少し編集すれば便利なものにあると思います。
お礼
ご回答ありがとうございます。 マクロの記録、今後やってみます。自分で一から入力するより、マクロが身近になりそうですよね。 ありがとうございました。
- mt2008
- ベストアンサー率52% (885/1701)
私なら、マクロを使わず、Sheet3に作業列を追加してやります。 こんな感じで Sheet1のA1に検索値が入るとして…… Sheet3の左端に作業列を追加します(A列) A2に =IF(COUNTIF(D2:E2,Sheet1!$A$1)>0,MAX(A$1:A1)+1,0) と入れて下までコピー。 Sheet2のA2に =IF(ROW()<=(MAX(Sheet3!A:A)+1),VLOOKUP(ROW()-1,Sheet3!A:C,2,FALSE),"") B2に =IF(ROW()<=(MAX(Sheet3!A:A)+1),VLOOKUP(ROW()-1,Sheet3!A:C,2,FALSE),"") と、入れてA2:B2を下までコピー マクロがご希望のようですが、ご参考までに
お礼
ご回答ありがとうございます。 関数でもできるのですね。今回はマクロ希望だったのですが、今後の参考にさせていただきます。
お礼
早速のご回答、ありがとうございました。 ご紹介いただいたホームページを参考にやってみたらば、望んでいたような形で出来ました!! 実は、質問前に見ていたのが同じホームページの《Excel(エクセル) 基本講座:フィルタオプションの設定(データ抽出)》という部分だったのですよ。 なのに、VBA入門の方にはまるで気づいていなかったので、本当に助かりました。 どうもありがとうございました。