|
▼VBA初心者 さん:
こんばんは。
>初歩的な質問かもしれませんが
>
> A B C D
>3月1日 なす リンゴ みかん
>3月2日 バナナ メロン イチゴ
>3月3日 なし きゅうり ごぼう
>3月1日 いも パイン もも
>
>A列を条件判断に使い、条件に一致した場合
>B列からD列をコピーして別のシートに貼り付けたい
>のですが、offset,range等色々組み合わせてみたのですが
>うまくいきません。
次回からは、実際にどのようなコードを作られたのかを記述してくださいね!!
動かなかったコードでもいいんですよ。そのコードを掲載する事によって、
この投稿を見ている方にとってそれぞれの価値観で参考になりますから・・・。
勿論、私にとっても・・・。
で、上記のサンプルデータですが、1行目に項目名(見出し)を入れるようにしませんか?
例えば、
日付 項目1 項目2 項目3
3月1日 なす リンゴ みかん
3月2日 バナナ メロン イチゴ
3月3日 なし きゅうり ごぼう
3月1日 いも パイン もも
このようにしておくと、フィルタが使えます。
1行目に項目名がなくても解決する方法はありますが、
入れといた方がExcelを使用する上では便利ですから・・。
まっ、実際には入っているのかもしれませんが。
上のサンプルデータから見ると、セルA2からA3、A4、・・とひとつひとつ
見ていっても良いのですが、フィルタを使いました。
新規ブックの標準モジュールに以下のコードをコピーして実行してみて下さい。
'=================================================================
Sub Macro1()
Worksheets(1).Activate
Call sample_sheet
Range("i2").Value = "3月1日"
MsgBox "表示されているデータから抽出します OK?"
Range("A1:D5").AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Worksheets(2).Range("a1"), CriteriaRange:=Range _
("I1:I2"), Unique:=False
End Sub
'=========================================================================
Sub sample_sheet()
With Range("a1:a5")
.Cells(1).Resize(, 4).Value = Array("日付", "項目1", "項目2", "項目3")
.Cells(2).Resize(, 4).Value = Array("3月1日", "なす", "りんご", "みかん")
.Cells(3).Resize(, 4).Value = Array("3月2日", "バナナ", "メロン", "イチゴ")
.Cells(4).Resize(, 4).Value = Array("3月3日", "なし", "きゅうり", "ごぼう")
.Cells(5).Resize(, 4).Value = Array("3月1日", "いも", "パイン", "もも")
End With
Range("i1").Value = "日付"
End Sub
サンプルデータもコードで作成するようにしてあります。
上記のコードは、
最左端シートにサンプルデータ(A1〜D5)
抽出条件を同シートの(I1〜I2)
抽出したデータのコピー先として左から2番目のワークシートのセルA1
という仕様で抽出しています。
手動操作のフィルタオプションの応用です。
確認してみて下さい。
|
|