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

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

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

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

解決済

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

marebito777
marebito777

総合スコア6

VBA

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

1回答

0リアクション

0クリップ

318閲覧

投稿2022/07/27 09:16

編集2022/07/28 09:57

前提

VBAでオートフィルターを使い別ブックから日付と時間に合うデータをコピーしようとしているのですが繰り返しがうまくいきません。
該当データは1つのみで、複数のデータがあるわけではありません。
何卒、改善点をご教授ください。

実現したいこと

オートフィルターでセルの値を検索条件に別ブックからのデータを抜き出そうとしているのですが、変数を使って検索条件を動的にして繰り返し(コピー先の表全部を)
データを抜き出せるようにしたいです。
これを別のブックから行います。

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

画像を添付しますが、時間の部分で
4:00:00や0:05:00がコピーされません。
20:00:00や12:15:00はされるので○○時〇〇分の時間が2桁以上は反応してくれるようです。
また、秒数は00秒固定です。時間と分のみが変動します。
また
別ブックからコピーさせるようにしてみると
「オブジェクトは、このプロパティまたはメソッドをサポートしていません。」と
エラー表示が起きます。
wb2.Range("A1").AutoFilter 1, Format(wb1.Worksheets("コピー先").Cells(i, 1), "yyyy/m/d")
この部分で止まっているようです。

イメージ説明
イメージ説明
コピー先とコピー元は最終的には別ブックにしたいです。
別ブックからの分を試そうとしたら動きすらしなかったので
画像の分は同じブック内の動きの分のスクショを貼り付けました。

該当のソースコード

VBA

Sub 改めて日付時間を表示形式にする繰り返し10() Workbooks.Open Filename:=ThisWorkbook.Path & "\実験用コピー元.xlsx" Dim wb1 As Workbook Dim wb2 As Workbook Set wb1 = ThisWorkbook Set wb2 = Workbooks("実験用コピー元.xlsx") With wb1.Worksheets("コピー先").UsedRange Dim i For i = 2 To .Rows.Count wb2.Range("A1").AutoFilter 1, Format(wb1.Worksheets("コピー先").Cells(i, 1), "yyyy/m/d") wb2.Range("A1").AutoFilter 2, Format(wb1.Worksheets("コピー先").Cells(i, 2), "hh:mm:ss") With wb2.Worksheets("コピー元").Range("A1").CurrentRegion Dim rng As Range Set rng = Intersect(.Cells, .Offset(1)) If IsVisible(rng) Then rng.Copy wb1.Cells(i, 7) End With wb2.Worksheets("コピー元").Range("A1").AutoFilter Next End With wb1.AutoFilterMode = False wb2.Close False End Sub Function IsVisible(r As Range) As Boolean On Error Resume Next IsVisible = r.SpecialCells(xlCellTypeVisible).Count > 0 End Function

試したこと

時間の問題については
おそらくは下の部分のcount>0の部分の表記を変えれば10:00:00台だけでなく5:00:00台や8:00:00台にも対応できるのではとは思うのですが(0を"00:00:00"にしてみるなど)うまくいきません。
VBAはまだまだ勉強したてで考え方が間違っているのでしょうか。

Function IsVisible(r As Range) As Boolean
On Error Resume Next
IsVisible = r.SpecialCells(xlCellTypeVisible).Count > 0
End Function

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

追記、現状です。
イメージ説明

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

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

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

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

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

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

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

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

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

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

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

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

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

VBA

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