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

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

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

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

Q&A

解決済

1回答

2335閲覧

「オブジェクト変数またはwithブロック変数が設定されていません」の対処

hakuran_

総合スコア2

VBA

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

0グッド

0クリップ

投稿2021/06/09 06:53

前提・実現したいこと

VBA初心者です。
複数のシートをループして指定の日付を2種類指定するVBAを作りたいです。
調べて色々組み合わせて作ってみましたが、うまく動きません。
本来であれば、データ抽出後、別シートに転記する予定ですが、
抽出する所で躓いてしまったため、お力お貸し頂ければ幸いです。

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

「オブジェクト変数またはwithブロック変数が設定されていません」と出てしまいます。

該当のソースコード

Sub

1 2 Dim i As Integer 3 Dim ws As Worksheet 4 Dim filterArray() 5 6 Dim 期間1 As String 7 Dim 期間2 As String 8 9 期間1 = Worksheets("シート名").Range("指定の日付が出てくるセル").value 10 期間2 = Worksheets("シート名").Range("指定の日付が出てくるセル").value 11 12' シートの指定 13 With AutoFilter 14 15 For i = 4 To Sheets.count 16 Worksheets(i).Activate 17 Debug.Print i & "枚目のシートの処理を開始" 18 19 20' フィルタを設定 21 Worksheets(i).Range("A5:AJ5").Select 22 Selection.AutoFilter 23 24'  データの抽出’ 25 ws(i).Range("$A$5:$AJ$237").AutoFilter Field:=2, _ 26 Criteria1:=">=" & 期間1, _ 27 Operator:=xlOr, _ 28 Criteria2:="<=" & 期間2 29 30 Next i '次のシートに移る 31 32'  フィルターの解除’ 33 Worksheets(i).ActiveSheet.ShowAllData 34 35 End With 36 37End Sub 38 39

試したこと

Setなどを付けてみましたが、コンパイルエラーがでてしまいました。

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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

まずWithの使い方が間違っていますね。以下のURLが参考になると思います。
http://officetanaka.net/excel/vba/beginner/16.htm

また、途中に出てくるws(i)も、wsという変数を宣言していないので、このままだとエラーになります。現状わざわざwsという宣言をする理由は無さそうなので、Withとwsの部分を直すと以下のようになります。

思った通りの挙動をするかはともかく、動きはすると思います。

VBA

1 2前略 3 4For i = 4 To Sheets.count 5 With Worksheets(i) 6 7 .Activate 8 Debug.Print i & "枚目のシートの処理を開始" 9 10' フィルタを設定 11 .Range("A5:AJ5").AutoFilter 12 13'  データの抽出’ 14 .Range("$A$5:$AJ$237").AutoFilter Field:=2, _ 15 Criteria1:=">=" & 期間1, _ 16 Operator:=xlOr, _ 17 Criteria2:="<=" & 期間2 18 19'  フィルターの解除’ 20 .ActiveSheet.ShowAllData 21 End With 22Next i '次のシートに移る

投稿2021/06/09 09:14

Usirow

総合スコア364

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jinoji

2021/06/09 09:40

For i = 4 To Sheets.Count Set ws = Worksheets(i) With ws Debug.Print i & "枚目のシートの処理を開始" '  データの抽出’ .Range("$A$5:$AJ$237").AutoFilter Field:=2, Criteria1:=">=" & 期間1, Operator:=xlOr, Criteria2:="<=" & 期間2 '(転記処理)’ '.AutoFilter.Range.Copy tenkisaki.Range("A1") '  フィルターの解除’ .ShowAllData End With Next i '次のシートに移る
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問