プロが教えるわが家の防犯対策術!

お世話になっております。

マクロのコードについての相談です。

シート名を「リスト」シートから取得して同じシートを複数作成するマクロを作成していますが、
上手く動作しなかったため、ご教授頂きたく質問いたしました。

「1」シートを複製し、「リスト」シートから取得した値をシート名にするマクロを組んでいました。
「リスト」シートの最終行を取得させて繰返し処理をさせると、実行エラー「1004」アプリケーション定義またはオブジェクト定義のエラーが発生し、「1(2)」シートが作成されてしまいます。

この2つの問題を発生させないように改善したいため、お力添えいただいだけると幸いです。
よろしくお願いいたします。


下記現状のコードとなります。

Sub シート複製()

Worksheets("リスト").Activate

For i = 2 To Cells(Rows.Count, "B").End(xlUp).Row
Sheets("1 ").Copy after:=Sheets(Sheets.Count)
Range("O5") = Sheets("リスト").Cells(i, "B")
ActiveSheet.Name = Sheets("リスト").Cells(i, "C")

Next i

End Sub

A 回答 (5件)

No.1さんのご回答にあるとおり、C列にシート名に使用できない文字を含む名称が入っていませんか?


たとえば、[shName1] とか、3\四半期とか。

https://qiita.com/RelaxTools/items/d173d0f944243 …
    • good
    • 0

No.3です。


訂正

リスト シートの C2セルには何が入っていますか?
    • good
    • 0
この回答へのお礼

お世話になっております。
C2セルには文字列が入っています。

お礼日時:2024/03/21 23:26

リスト シートの B2セルには何が入っていますか?

    • good
    • 0

Range("O5") = Sheets("リスト").Cells(i, "B")


ActiveSheet.Name = Sheets("リスト").Cells(i, "C")
をやめて
ActiveSheet.Name = Sheets("リスト").Cells(i, "B").Value
でいいのでは?
Range("O5")とかC列とか、なんで登場するのか謎です。
    • good
    • 0
この回答へのお礼

早々のご回答ありがとうございます。

>Range("O5")とかC列とか、なんで登場するのか謎です。
これらが登場するには理由がありまして、Range("O5")については
”1”のシートのRange("O5")に値が入力されると関数が動作するようになっていることとC列に関してはC列の値を使ってシート名を変更しようと考えていました。こちらに関してはいんちょ様の仰る通り初めからどちらかに統一するべきだと思いますので、変更しようと思います。

お礼日時:2024/03/20 19:20

こんにちは



>この2つの問題を発生させないように改善したいため
問題は一つではないのでしょうか?
>「1(2)」シートが作成されてしまいます。
ご提示のコードを実行しているのでしょうから、問題とは思えませんが?

どこでエラーになっているのか不明ですけれど、想像するところ
>ActiveSheet.Name = Sheets("リスト").Cells(i, "C")
で発生しているのではないかと、勝手に想像しました。

もしそうであるなら、以下あたりが怪しそうに思います。
 ・重複するシート名(=既に存在する)にしようとしている
 ・シート名に使用できない文字を含む名称にしようとしている
エラー発生時に確認してみてください。
違う所でのエラーの場合は、この回答は誤答なので、無視してください。

原因がわかれば、それを回避するようなコードを追加すれば宜しいと思います。
    • good
    • 0
この回答へのお礼

早々のご回答ありがとうございます。
多くのアドバイスを頂きありがとうございます。
実際に動作させて確認するとfujillin様の仰っている部分で
エラーが発生しています。

もう少し試行錯誤して回避できるようなコードを考えてみます。

お礼日時:2024/03/20 19:22

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

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


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