• ベストアンサー

オートフィルターから抽出、貼り付けを自動化したい

マクロに対して十分な知識を持っておりません。 画像のような表を使い、その曜日に出席できる者(○のついたもの(出席者))を 集めて違うシートにそのメンバーを貼り付けたいのですが上手くいきません。 試した方法は、自動マクロ記録でオートフィルターを使い該当者を選び、ctrl+cでコピー ctrl+vで貼り付けマクロの記録を終了しましたが、エラーがでて作動しませんでした。 どなたか詳しい方お知恵を貸してください。 ※名前に対してはこの表では3名ですが増える可能性が有ります。

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

  • ベストアンサー
回答No.2

画像のようにSheet2を作成しておき Sheet2でフィルタオプションの設定で記録すると Sub Macro1() Sheets("Sheet1").Columns("A:H").AdvancedFilter Action:=xlFilterCopy, _ CriteriaRange:=Range("A1:A2"), CopyToRange:=Range("C1"), Unique:=False End Sub 上記の指定範囲の説明 リスト範囲 Sheets("Sheet1").Columns("A:H") 検索条件範囲 =Range("A1:A2") 抽出条件範囲 =Range("C1") 繰り返す場合もう一工夫必要な気がしますが、 最終的にどのように抽出したいかわかりませんので ここまでとしています。

syou_yuu20
質問者

お礼

早速チャレンジします。 年末のお忙しい中ありがとうございます。

その他の回答 (3)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.4

例データ A2::G9 氏名 月 火 水 木 金 土 a ○ ○ b ○ ○ ○ ○ c ○ ○ d ○ ○ ○ ○ e ○ f ○ ○ g ○ ○ ーー I3に○ I2:I3が条件セルです ーー コード 「フィルタオプションの設定」のマクロの記録を骨子にして、修正しています。 Sub Macro1() For i = 2 To 7 Cells(21, i) = "氏名" Range(Cells(22, i), Cells(30, i)).Clear Range("i2") = Cells(2, i) Range("A2:G10").Select Range("a2:G10").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Range( _ "I2:I3"), CopyToRange:=Range(Cells(21, i), Cells(30, i)), Unique:=False Next i End Sub ーーー 結果 B21:G26に 氏名 氏名 氏名 氏名 氏名 氏名 a b a b c b c d b d f d g d g f e ーーー 抽出するセル範囲を指定しているので、上記ではコピー貼り付けは必要ない。 ーー ご質問者の要求に合うように変える力がなければ、上記回答は無視してください。

syou_yuu20
質問者

お礼

お礼のご連絡が遅れて申し訳ありません。 チャレンジしてみます。 大変ありがとうございました

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.3

merlionXXです。 > どこにどのように活用すればよいのですか 手順 1.エクセルの画面で、AltキーとF11キー同時に押し(以下Alt+F11キーと記述)て Visual Basic Editor を呼び出します。 2.Visual Basic Editor のメニューから「挿入」、「標準モジュール」で出てきたコードウィンド(右側の白い広い部分)に以下のコード(Sub~End Sub)をコピペします。 '********これより下********** Sub test()   Sheets("Sheet1").Columns("A:A").Copy Sheets("Sheet2").Columns("A:A") End Sub '********これより上********** 3.Alt+F11キーでワークシートへもどります。 4.オートフィルターで選択します。 5.Alt+F8キーで出てきたマクロ名(test)を選択して実行します。

syou_yuu20
質問者

お礼

手間をとらせまして申し訳ありません。 早速やってみます。 年末のお忙しい中有難うございました。

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.1

対象となる方々の名前(A列)を転記するのですか? ならば、表があるのがSheet1で転記先がSheet2だとしたら Sheets("Sheet1").Columns("A:A").Copy Sheets("Sheet2").Columns("A:A") ではないでしょうか?

syou_yuu20
質問者

補足

はい、その通りです。 たとえば月曜日に出席する者だけ集めてSheet2に転記(貼り付け)をしたいのです。 他の曜日もそうです。 すいません。教えてもらった数式。 どこにどのように活用すればよいのですか、何分マクロは素人なのでもし宜しければ、詳しく教えていただければ、助かります。

関連するQ&A