質問: i + 1 book.Close Else book.Close End If Loop End Sub ### 試したこと 上記のコードをベースにしております。 いじる箇所は大体見当がつくのですがどうすればよいのか分からず...... ### 補足情報(FW/ツールのバージョンなど) ここにより詳細な情報を記載してください。
回答: とりあえず明らかな間違いは、 ``` For Each ws In Worksheets If ws.Name = Format(Now, "yyyymm") Then flag = True Next ws ``` で一回 flag = True にしたらずっとTrueのままであるので、 これ以降のループで該当するシートがなくても転記処理が実行されてしまい、エラーになります。 flag = False で戻してからループに入りましょう。 ステップ実行すればすぐ見つかる間違いでしょう。 Excel VBA:ステップ実行でプログラムの動きをチェックする|Plus 1 Excel また、該当シートが見つかったら最後までループする必要はないので、 Exit For でループを抜けましょう。 ``` flag = False For Each ws In book.Worksheets If ws.Name = Format(Now, "yyyymm") Then flag = True Exit For End If Next ws ``` 他にもコードに冗長な部分が見られますが、~~とりあえず上記の修正でたぶん動くでしょう(?)~~ `Range("A").Value` でエラーになりますね。`Range("A" & CStr(i)).Value` の間違いかな? ただ、これだと1行だけしか転記されないが、それでいいのかな? kiro_1002 さんのコメント > > 各ファイルによって入力されている量が異なるため、行範囲がバラバラなのでそれに適応できるととても助かります。 > > > 下記の方法で最終行が取得できるので、それをもとに範囲指定すればいいでしょう。 最終行の取得(End,Rows.Count)|VBA入門