
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で質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
プロが教えるわが家の防犯対策術!
ホームセキュリティのプロが、家庭の防犯対策を真剣に考える 2組のご夫婦へ実際の防犯対策術をご紹介!どうすれば家と家族を守れるのかを教えます!
-
【VBA】特定の値が入った行をコピーして別シートに貼り付ける方法をおしえていただきたいです。
Excel(エクセル)
-
エクセルVBAで、ある文字を含んでいたら別シートに抽出したい
Excel(エクセル)
-
条件にマッチする行を抽出するVBAを教えてください
経営情報システム
-
-
4
vba 2つの条件が一致したらコピーして別シートに値のみ貼り付け
Visual Basic(VBA)
-
5
【VBA】指定した検索条件に一致したら別シートに転記したい
Visual Basic(VBA)
-
6
エクセル VBA 特定文字がある行を別シートに移動
Visual Basic(VBA)
-
7
VBAで条件が一致する行のデータを別シートに抽出
Excel(エクセル)
-
8
特定の文字列が含まれている行のみ抜き出して、別シートに書き出す方法(Excel 2007)
Excel(エクセル)
-
9
【Excel VBA】複数ある特定の文字列を含む行を削除
Excel(エクセル)
-
10
特定の文字がある行以外を削除するマクロ
その他(Microsoft Office)
-
11
特定の文字列があったらその行をまるごと別シートに反映させたい
Excel(エクセル)
-
12
ExcelVBAを使って、値がある場合は作業を繰り返し実行するプログラムを作成したい。
Visual Basic(VBA)
-
13
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
14
エクセル マクロ オートフィルの終点の指定について
Excel(エクセル)
-
15
エクセルVBAで、ある指定した文字を含む行だけを選択したいのですが、、 例えば、1〜20行目までに"11670117"
Excel(エクセル)
-
16
Excel VBA A列が特定の値以外の場合、その行を削除
Excel(エクセル)
-
17
同じ作業を複数のシートに実行させるにはどうしたらいいのでしょうか
Visual Basic(VBA)
-
18
特定の行を選択して別のシートにコピーするマクロ
Excel(エクセル)
-
19
【Excel】複数の列を参照して、特定の文字列を含む行全体を別シートに抽出する関数
Excel(エクセル)
-
20
【VBA】特定列に文字が入っていたらそのセル行をコピーしてマスターブックの同じ行に貼り付けたい
その他(Microsoft Office)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
人気Q&Aランキング
-
4
ユーザーフォームに入力したデ...
-
5
【ExcelVBA】300万件越えCSVか...
-
6
【VBA】特定の文字が入っている...
-
7
ブック名、シート名を他のモジ...
-
8
【VBA】シート名に特定文字が入...
-
9
VBA 最終行まで数式をコピーする
-
10
【ExcelVBA】全シートのセルの...
-
11
XL:BeforeDoubleClickが動かない
-
12
excelのマクロで該当処理できな...
-
13
VBA 検索して一致したセル...
-
14
VBAでシート名を選んで転記する...
-
15
【Excel】指定したセルの名前で...
-
16
実行時エラー'1004': WorkSheet...
-
17
コマンドボタンをクリックでシ...
-
18
別のシートを参照して計算する方法
-
19
Access エクセルシート名変更
-
20
エクセルVBA Ifでシート名が合...
おすすめ情報
公式facebook
公式twitter
ご質問ありがとうございます。
>>シート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などか年だけでなく月日も指定したいです。
よろしくお願いいたします。