プロが教える店舗&オフィスのセキュリティ対策術

VBAについて質問です。
定期的にBook1からBook2へコピペする作業があるのですがBook1のシート名(日付)が都度変更されます。
現在以下のようになっています。
Sub 助()
' 助 Macro
Dim FilePath As String
FilePath = ThisWorkbook.Path
Workbooks.Open FilePath & "Book1.xlsx"
Workbooks("Book1.xlsx").Worksheets("2023_10_18").Range("A1:J13").Copy _
Workbooks("Book2.xlsm").Worksheets("sheet1").Range("A1")
Workbooks("Book1.xlsx").Close savechanges:=False
End Sub

上記ですと2023_10_20のシートであれば問題なく動作するのですが当然たの日付だとエラーになります。
ネットで調べたところSheets(1).Selectとすれば良いとの事で上記のWorksheets("2023_10_18")部分をSheets(1).Selectに変更してみたのですがエラーとなってしまいます。

どのように変更すれば良いのでしょうか。

宜しくお願いします。

A 回答 (3件)

こんにちは



>Sheets(1).Selectとすれば良いとの事で~~
それって、「ブックのシートタブの一番左側を選択する」ってことですけれど、ご質問の処理のブックでも「一番左側のシート」で良いのでしょうか?

もしそうであるならば、
>Workbooks("Book1.xlsx").Worksheets("2023_10_18").Range("A1:J13").Copy _
の部分を
 Workbooks("Book1.xlsx").Worksheets(1).Range("A1:J13").Copy _
とすればそのようになります。
この場合は、ブック名が日付であろうとなかろうと、一番最初のシートを対象とします。
(ブック内に一つしかシートが存在しないのであれば、これで十分でしょう)


きちんと日付で判断するのならば・・
>Book1のシート名(日付)が都度変更されます。
コピーしたいシートの日付には何らかの特徴があると思いますので、それに基づいて検索すれば良いでしょう。
例えば、
 ・実行時の日付と一致するシート
 ・ブック内の一番最新の日付のシート
などなど。
    • good
    • 1
この回答へのお礼

ありがとうございました。解決しました。

お礼日時:2023/11/28 22:08

Book1 の日付のシート("2023_10_18")が1つで他にない場合や常にコピーする日付のシートがアクティブになっている場合はシート名を取得すればいいと思います。


 Dim N As String
 Workbooks.Open FilePath & "Book1.xlsx"
 N = ActiveSheet.Name
 Workbooks("Book1.xlsx").Worksheets(N).Range("A1:J13").Copy _
・・・
またコピーする日付シートが書き足されていくなどして最終位置にあるならBookのシート数がその数が最終シート番号だから
 Dim C As Integer
 C = Workbooks("Book1.xlsx").Sheets.Count
 Workbooks("Book1.xlsx").Worksheets(N).Range("A1:J13").Copy _
・・・
とすればいいと思います。
    • good
    • 0
この回答へのお礼

ありがとうございました。

お礼日時:2023/11/28 22:06

Sheets(1)


で、1番左のシート。

Sheets(1).Select
では1番左のシートを選択する、ってとこまで含んじゃう。
    • good
    • 2
この回答へのお礼

ありがとうございました。

お礼日時:2023/11/27 16:35

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A