• ベストアンサー

VBAついて

 A B C   DE 1W○100   2X ○20 3Y 4Z ○20  ○300 分かりにくいですが、Wさん、Xさん、Yさん、Zさんについての表と考えてください。 この表を条件をつけて、フィルタリングで別のシートに抽出できないでしょうか? BとDに○が入っている人だけを別シートに抽出したいんです。BとD両方ではなく、どちらか一方にでも○が入っていれば抽出します。上の表では、Wさん、Xさん、Zさんは該当します。 フィルタリング以外でも大丈夫です。

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

  • ベストアンサー
  • maia55jp
  • ベストアンサー率61% (327/535)
回答No.3

VBAを使う必要があるのか疑問ですが、エクセルにはフィルタ機能があります これを用いれば、抽出データの一覧を作ることが出来来ます。範囲指定して コピーし別のシートへペーストすれば思っている事が出来ると思います。 エクセル2010基本講座:フィルター(オートフィルター)の使い方 http://www4.synapse.ne.jp/yone/excel2010/excel2010_filter1.html で、上記の機能を利用して、VBA化すると下記になります。 Sub Macro1() Range("A1").Select Selection.AutoFilter ActiveSheet.Range("$A$1:$E$5").AutoFilter Field:=2, Criteria1:="<>" ActiveSheet.Range("$A$1:$E$5").AutoFilter Field:=4, Criteria1:="<>" Range("A1:E15").Select ' この範囲を想定される抽出件数(例200件)まで広げる("A1:E200")な感じ Selection.Copy Sheets("Sheet2").Select Range("A1").Select ActiveSheet.Paste Sheets("Sheet1").Select Range("A1").Select Application.CutCopyMode = False Selection.AutoFilter End Sub 抽出件数自体もVBAでカウントし範囲設定も出来ますが説明が複雑になるので省略します。 上記のソースは単にマクロ記録のみで作成しています。

kouwaka
質問者

お礼

参考になりました。 ありがとうございます。

その他の回答 (3)

  • maia55jp
  • ベストアンサー率61% (327/535)
回答No.4

>BとDに○が入っている人だけを別シートに抽出したいんです。 すいません。どちらからに○が入っているって事ですね。 Fにセルに=IF(EXACT(B1,"○"),"○",IF(EXACT(D1,"○"),"○",""))を付けることで BとDのどちらかに○が入っている場合には、Fが○になるようになります。 で最初に書いたフィルター機能を使えばよいかと思います。 Sub Macro1() Range("A1").Select Selection.AutoFilter ActiveSheet.Range("$A$1:$F$5").AutoFilter Field:=6, Criteria1:="<>" Range("A1:E15").Select ' この範囲を抽出される件数まで広げる("A1:Exx")な感じ Selection.Copy Sheets("Sheet2").Select Range("A1").Select ActiveSheet.Paste Sheets("Sheet1").Select Range("A1").Select Application.CutCopyMode = False Selection.AutoFilter End Sub

kouwaka
質問者

お礼

大変参考になりました。 ありがとうございます。

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.2

こんばんは! 関数でも対応できそうな感じですが、VBAでの方法をご希望のようなので・・・ Sheet1の1行目からデータがありSheet2のA1セル以降に表示させるとします。 画面左下のSheet1のSheet見出し上で右クリック → コードの表示 → VBE画面に ↓のコードをコピー&ペーストしてマクロを実行してみてください。 (Alt+F8キー → マクロ → マクロ実行です) Sub test() 'この行から Dim i, k As Long Dim ws As Worksheet Set ws = Worksheets("Sheet2") '←「Sheet2」は実際のSheet名に! k = 0 For i = 1 To Cells(Rows.Count, 1).End(xlUp).Row If WorksheetFunction.CountIf(Rows(i), "○") Then k = k + 1 ws.Cells(k, 1) = Cells(i, 1) End If Next i End Sub 'この行まで ※ 外していたらごめんなさいね。m(_ _)m

kouwaka
質問者

お礼

参考になりました。 ありがとうございます。

  • codotjtp
  • ベストアンサー率26% (40/149)
回答No.1

OR条件の相対参照のマクロに関する質問なのでしょうか?