
VBA初心者です。
色々と検索したのですが、似たような内容が見つけられず教えていただきたいです。
条件を満たす行の一部をとなりのシートにコピーしたいです。
【シート1】※データシート
A B C D E F G
会員番号/会員ランク/会員登録日 / 氏名 /都道府県/住所1/謎の文言列
1 プラチナ 2010/1/10 あ 東京都 東 あい78あいあ
【シート2】※抽出結果の貼付けシート
A B C D
会員番号/会員ランク/会員登録日 /謎の文言列
1 プラチナ 2010/1/10 あい78あいあ
シート1のC列が2020/1/10以降かつ G列に 78 の文言を含む行を抽出し
その結果の会員番号、会員ランク、会員登録日、謎の文言列を隣のシート2に貼り付けたいです。
全くの初心者で申し訳ないのですがどうぞよろしくお願いいたします。

No.5ベストアンサー
- 回答日時:
こんにちは!
横からお邪魔します。
No.2さんが回答されているように関数でも可能だと思いますが、
VBAでの方法をご希望のようなので、一例です。
尚、元データはSheet1にあり、Sheet2に表示するとします。
(コード内のシート名は実際のシート名に変更してください)
そして、「日付」や「検索文字」は決め打ちすると汎用性がないので
インプットボックスにその都度入力するようにしてみました。
標準モジュールにしてください。
Sub Sample1()
Dim i As Long
Dim lastRow As Long
Dim wS As Worksheet
Dim myDate As String, myStr As String
myDate = Application.InputBox("日付を「2020/3/14」のような形式で入力")
myStr = Application.InputBox("検索文字を入力")
Set wS = Worksheets("Sheet1")
With Worksheets("Sheet2")
lastRow = .Cells(Rows.Count, "A").End(xlUp).Row
If lastRow > 1 Then
Range(.Cells(2, "A"), .Cells(lastRow, "D")).ClearContents
End If
For i = 2 To wS.Cells(Rows.Count, "A").End(xlUp).Row
If wS.Cells(i, "C") >= DateValue(myDate) Then
If InStr(wS.Cells(i, "G"), myStr) > 0 Then
With .Cells(Rows.Count, "A").End(xlUp).Offset(1)
.Value = wS.Cells(i, "A")
.Offset(, 1) = wS.Cells(i, "B")
.Offset(, 2) = wS.Cells(i, "C")
.Offset(, 3) = wS.Cells(i, "G")
End With
End If
End If
Next i
.Activate
End With
MsgBox "完了"
End Sub
※ Sheet2の日付列は好みの表示形式にしておいてください。
※ 注意点 ※
仮に検索文字が「78」だとし、G列が「178」とか「75785」のような場合でも表示されてしまいます。m(_ _)m
わーい!!わーい!!すごーい!インプットボックスいいですね!
そうかそうか。こういう方法もあるんですね。
ささっとこんなコードがかけるなんて、もっと勉強したくなってきました。
本当にありがとうございます。
No.4
- 回答日時:
VBAなら、AdvancedFilterメソッドが便利です。
添付画像のような「抽出条件」シートを用意する必要があるのですが、条件(例えば日付)を変える場合など、そのシートの値を変えるだけでOKです。
Sub sample()
Sheets("日本会員").Columns("A:G").AdvancedFilter _
Action:=xlFilterCopy, _
CriteriaRange:=Sheets("抽出条件").Range("A1:B2"), _
CopyToRange:=Sheets("書き出したシート").Range("A1:D1"), _
Unique:=False
End Sub
ちなみに、「抽出条件」シートの値は、次のように設定しています(値をそのまま設定するのではなく、数式として設定します)。
A2セル =">=2020/06/02"
B2セル ="*78*"

No.3
- 回答日時:
No2です
>こちらの部分を日にちに変更するにはどうすればよいのでしょうか。
大変失礼いたしました。当方がご質問文を読み違えてしまったようです。
>YEAR(Sheet1!$C$2:$C$1000)>2019
は、ご指摘の通り「年」だけを条件にしてしまっています。
また、
>シート2の I1 に報告対象月(2020/1/10)を記入しております。
とのことですので、 I1セルの値を用いるようにした方が、汎用性が増しますね。
上記の部分を(YEARから2019まで)
Sheet1!$C$2:$C$1000 >= $I$1
に置き換えれば、I1 以降の日が検索の対象になります。
(I1 を含むか含まないかは「=」の有無で調節願います)
ついでながら、もう一つの条件の "78" の方も可変になさりたい場合は、式中の "78" の部分を値の入っているセルの絶対参照に変えることで可能になります。
No.2
- 回答日時:
こんにちは
VBAのご質問ですが、関数でもできそうなので・・・
VBAでの回答は(多分)No1様がなさってくださると思います。
元シート(=Sheet1)のC列の日付は日付型(=シリアル値)と仮定しています。
シート2のA2セルに以下の式を記入して、右方、下方にフィルコピーします。
=IFERROR(INDEX(OFFSET(Sheet1!$A:$A,,INDEX({0,1,2,6},COLUMN(A1))),AGGREGATE(15,6,ROW(A$2:A$1000)/(YEAR(Sheet1!$C$2:$C$1000)>2019)/(FIND("78",Sheet1!$G$2:$G$1000)>0),ROW(A1))),"")
※ 関数式を利用する利点は、データに変更があった際に自動的に反映されること。
欠点は、式が複雑になりやすいので、関数式のメンテがしにくいことでしょうか。
No.1
- 回答日時:
転記する項目は一定の物であるとしても、
>シート1のC列が2020/1/10以降かつ G列に 78 の文言を含む行を抽出
その条件については固定or変動?
変動であればその条件の書き込むめぼしは立っているの?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) Excelマクロ 差分抽出の方法が知りたいです。 2 2023/03/07 13:25
- Excel(エクセル) Excelで質問です! 現在マクロを勉強中の初心者です。 以下のような表から、会社名が空白のもの以外 2 2022/06/14 12:16
- Visual Basic(VBA) Changeイベントで複数セルへの貼り付けおよび値削除時に1個目のセルのみエラーになる 3 2022/12/21 09:07
- Excel(エクセル) VBA セルの値と同じ名前のシートにデータを貼り付けするやり方を教えてください 2 2022/05/17 16:26
- Excel(エクセル) エクセルのマクロでコピー後の貼り付け先を毎回指定したところにしたい 5 2022/08/12 10:47
- Visual Basic(VBA) 2つのシートの任意のセルの番号が一致したら、一致した行をコピーする VBA 2 2023/06/19 20:48
- Excel(エクセル) エクセルで”入力シート”の文字書式の変更を”出力シート”で同じ文字書式で印刷したいです。VBA希望 4 2023/04/24 11:07
- Excel(エクセル) 【困っています】VBA 追加処理の記述を教えてください。 1 2022/08/25 22:54
- Excel(エクセル) シートが違う2枚のエクセルシートにある数値を別シートにコピーしたい(VBA?) 8 2022/03/31 12:24
- その他(Microsoft Office) エクセルマクロ オートフィルターでで選択コピー 2 2022/04/18 11:05
このQ&Aを見た人はこんなQ&Aも見ています
-
【VBA】特定の値が入った行をコピーして別シートに貼り付ける方法をおしえていただきたいです。
Excel(エクセル)
-
【VBA】特定列に文字が入っていたらそのセル行をコピーしてマスターブックの同じ行に貼り付けたい
その他(Microsoft Office)
-
特定の文字列が含まれている行のみ抜き出して、別シートに書き出す方法(Excel 2007)
Excel(エクセル)
-
-
4
エクセルVBAで、ある指定した文字を含む行だけを選択したいのですが、、 例えば、1〜20行目までに"11670117"
Excel(エクセル)
-
5
エクセルVBAで、ある文字を含んでいたら別シートに抽出したい
Excel(エクセル)
-
6
VBA EXCEL あるセルの中の一部の文字列だけをコピーするには?
Excel(エクセル)
-
7
特定の文字がある行以外を削除するマクロ
その他(Microsoft Office)
-
8
vba 2つの条件が一致したらコピーして別シートに値のみ貼り付け
Visual Basic(VBA)
-
9
excel VBA 2つのシートの特定の列を比較して同じ値のセルがあったらその行を上書きしたい
Excel(エクセル)
-
10
指定した文字があった場合、その行を削除するマクロが欲しいです
Excel(エクセル)
-
11
特定の文字列があったらその行をまるごと別シートに反映させたい
Excel(エクセル)
-
12
VBAで条件が一致する行をコピーしその1つ下へ挿入
Excel(エクセル)
-
13
VBA 空白行に転記する
Visual Basic(VBA)
-
14
別シートの最終行に貼り付けするマクロを教えてください。 シートYのE3からE15までをコピー シート
Excel(エクセル)
-
15
特定の文字を含むシートだけマクロ処理をしたい
Visual Basic(VBA)
-
16
Excel VBA マクロ ある列の最終行迄を参照し、別の列の空白セルに値を入力したいです
Visual Basic(VBA)
-
17
vba 隣のセルに値がある行だけ関数をコピー&ペーストしたい A1 100001 A2 100002
Visual Basic(VBA)
-
18
VBAで特定の文字が入った行をコピーして貼り付けたい
Visual Basic(VBA)
-
19
エクセルVBAで、条件に一致するセルへ移動
Excel(エクセル)
-
20
エクセルVBAで選択状態を解除のしかた
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【マクロ】並び替えの範囲が、...
-
【マクロ】売上一覧YYYYMMDDHHS...
-
エクセルの改行について
-
[VB.net] ボタン(Flat)のEnable...
-
質問58753 このコードでうまく...
-
【ExcelVBA】5万行以上のデー...
-
vbs ブック共有を解除
-
VBAでCOPYを繰り返すと、処理が...
-
vbaにてseleniumを使用したedge...
-
【マクロ】開いているブックの...
-
(EXCEL超初心者)EXCELの関数(ま...
-
算術演算子「¥」の意味について
-
Excel 範囲指定スクショについ...
-
2つのマクロでチェックボックス...
-
vbsでのwebフォームへの入力制限?
-
【マクロ】変数を使った、文字...
-
以下のプログラムの実行結果は...
-
VBA レジストリの値の読み方に...
-
Vba セルの4辺について罫線が有...
-
エクセルのマクロについて教え...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
testファイル内にある複数のpng...
-
改行文字「vbCrLf」とは
-
エクセルVBA 検索結果を隣のシ...
-
vb.net(vs2022)のtextboxのデザ...
-
エクセルのVBAコードと数式につ...
-
【マクロ】切取りの場合、形式...
-
【ExcelVBA】5万行以上のデー...
-
ExcelVBAでパワポを操作したい
-
(EXCEL超初心者)EXCELの関数(ま...
-
エクセルの改行について
-
Excelマクロで使うVBAコードを...
-
ワードの図形にマクロを登録で...
-
【マクロ】変数を使った、文字...
-
VBAでFOR NEXT分を Application...
-
VBAの質問(Msgboxについて)です
-
エクセルのVBAコードについて教...
-
Excelマクロで使うVBAコードを...
-
Excelのマクロについて教えてく...
-
VBAの「To」という語句について
-
【マクロ】値を渡されたプロシ...
おすすめ情報
ご質問ありがとうございます。
>>シート1のC列が2020/1/10以降かつ G列に 78 の文言を含む行を抽出
>その条件については固定or変動?
C列は変動の予定です!
月次の報告書をイメージしておりまして、報告対象月により変動します。
2020年1月の報告書:2020/1/10以降
2020年2月の報告書:2020/2/10以降
シート2の I1 に報告対象月(2020/1/10)を記入しております。
G列は固定です。
わかっていないものが質問しているので分かりにくくて本当に申し訳ないです・・・
先程お礼をさせていただいたばかりなのに申し訳ないです。
YEAR(Sheet1!$C$2:$C$1000)>2019)
こちらの部分を日にちに変更するにはどうすればよいのでしょうか。
2020/1/13などか年だけでなく月日も指定したいです。
よろしくお願いいたします。