質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

解決済

VBA AutoFilterで複数条件でデータを抽出、また別の条件で抽出を繰り返し

marebito777
marebito777

総合スコア6

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

3回答

0リアクション

0クリップ

349閲覧

投稿2022/07/23 13:57

編集2022/07/24 08:14

前提

2つの表がありまして、日付と時間が一致する行のデータをもう一つの表にコピーして、また別の日付時間のデータをコピーしたいです。AutoFilterを使い複数条件の抽出まではできたのですが、繰り返し作業させるところで躓いています。VBAを学び始めて2週間ほどで見当はずれなことかもしれませんがご教授をお願いいたします。

実現したいこと

AutoFilterの抽出条件を変数を使って動的にして
抽出先のシート全部にデータコピーさせたいです。

発生している問題・エラーメッセージ

抽出先のデータ全部がコピーされてしまいます。

該当のソースコード

VBA

Sub 改めて日付時間を表示形式にする繰り返し() Dim ws As Worksheet Set ws = Sheets("抽出先") With ws.UsedRange Dim i For i = 2 To .Rows.Count Worksheets("抽出元").Range("A1").AutoFilter 1, Format(Worksheets("抽出先").Cells(i, 1), "yyyy/m/d") Worksheets("抽出元").Range("A1").AutoFilter 2, Format(Worksheets("抽出先").Cells(i, 2), "hh:mm:ss") With Worksheets("抽出元 ").Range("A1").CurrentRegion .Resize(.Rows.Count - 1).Offset(1, 0).Copy Worksheets("抽出先").Cells(i, 7) End With Worksheets("抽出元").Range("A1").AutoFilter Next End With ws.AutoFilterMode = False End Sub

試したこと

オートフィルターの検索条件をセルの値で検索するようにして
セルを変数で2行目から最終行まで変動するように試してみましたが
でたらめにコピーされてしまいます。

補足情報(FW/ツールのバージョンなど)

日付時間に合うデータを抽出したいです。
抽出先のシート(この表にコピーしたい)
|日付|時間|抽出先シートの項目がF列まで|G列辺りにコピー      
|2015.1.5|22:55:00|・・・|   抽出元の行をコピー
|2015.2.5|21:30:00|・・・|   以下繰り返し

抽出元のシート
|日付|時間|抽出元のシート内容G列まで|
|2015.1.5|22:55:00|・・・|
|2015.1.20|15:30:00|・・・|
|2015.1.29|16:00:00|・・・|
|2015.2.5|21:30:00|・・・|
|2018.3.5|14:25:00|・・・|

以下のような質問にはリアクションをつけましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

marebito777

2022/07/23 14:01

Sub 改めて日付時間を表示形式にする繰り返し() Dim ws As Worksheet Set ws = Sheets("Sheet1") With ws.UsedRange Dim i For i = 2 To .Rows.Count Worksheets("Sheet2").Range("A1").AutoFilter 1, Format(Worksheets("sheet1").Cells(i, 1), "yyyy/m/d") Worksheets("Sheet2").Range("A1").AutoFilter 2, Format(Worksheets("sheet1").Cells(i, 2), "hh:mm:ss") With Worksheets("Sheet2").Range("A1").CurrentRegion .Resize(.Rows.Count - 1).Offset(1, 0).Copy Worksheets("Sheet1").Cells(i, 7) End With Worksheets("Sheet2").Range("A1").AutoFilter Next End With ws.AutoFilterMode = False End Sub
marebito777

2022/07/23 14:05

すいません。コードがちゃんと張り付けられていなかったみたいなので改めて添付いたします。
hatena19

2022/07/23 19:30

質問は編集できますので、質問の方を修正してください。 コードの前後に ``` を挿入してください。 ```vba ここにコードを記述 ``` 現状はコードの途中に ``` が挿入されているのでおかしな表示になってます。 あと、シートはスクリーンキャプチャーで画像にして、挿入すると状況がわかりやすいのて回答も付きやすくなると思います。
hatena19

2022/07/24 00:06

抽出元の 日付|時間 ですが、重複はありますか。 つまり、AutoFilter をかけたとき、抽出されるデータは1件のみですか。
marebito777

2022/07/24 08:16

ありがとうございます。質問の編集できました。 日付、時間の重複はありません。該当データは1件のみです。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。