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

いつもお世話になります。

OSはwin11、エクセルはoffice365です。

アクティブシートより複数のシートのコピー & シート名をつけたい。

条件
 1 アクティブシート(シート名は、1)は左端に限らない
    左端 左から2番目 4番目と変わる
 2 アクティブシートを基準に12シート(1~12シート)
   11シートのコピー&シート名を

ご指導お願いします。

下記は各シート毎に手動によるコードです

Sub セルをシート名にする()
Dim sheetobj As Worksheet
For Each sheetobj In Worksheets
sheetobj.Name = sheetobj.Range("A1").Value
Next
End Sub

質問者からの補足コメント

  • つらい・・・

    ご指導をありがとうございます。
    恐れ入りますが具体的にご教授頂けないでしょうか。

    小生の未熟をご勘弁ください。

    1 シートのコピー
      それに伴い
    2 A1セルの値をシート名

    No.1の回答に寄せられた補足コメントです。 補足日時:2023/04/13 06:09
  • うれしい

    ありがとう

    シートの順番は左端から、

    A xyd 1 2 3・・・11 12

    となるよう希望します。


    お手数ですがよろしくお願いいたします。

    No.2の回答に寄せられた補足コメントです。 補足日時:2023/04/13 09:23
  • どう思う?

    1.コピー元のシートは、"1"ですか。

    2.シートが左から以下のように並んでいた時、
    シート名:A
    シート名:1  ・・・左から2番目
    シート名:B
    シート名:C
    と示していただいていますが

    私の希望は
    マクロの新しいプックを考えていました。
    シートは下記のように一つしかありません。

    Sheet1

    例えば左端から
      ※Sheet1 を名前変更後 1DB
      ※Sheet2 追加し名前を 2売上

    マクロ実行後に
      1DB 2売上 1 2 3・・・10 11 12

    と考えています。
    但し上の※印の数は 2シートですが
    1~6位のシート数の範囲で数は変動します。
    それ故シート名の前にNoを付けています。

    ご苦労かけますがよろしくお願いいたします。

    No.3の回答に寄せられた補足コメントです。 補足日時:2023/04/13 10:44
  • どう思う?

    条件
     1 アクティブシート(シート名は、1)は左端に限らない
        左端 左から2番目 4番目と変わる

    例えば左端から
       ※Sheet1 を名前変更後 1DB
       ※Sheet2 追加し名前を 2売上
    このシートは手動でコピー 名前は行います。

     2 アクティブシート(1DB)を
        基準(この場合は左端から3番目から)
    に、12シート(1~12シート)
        12シート のコピー & シート名を

    マクロ実行後に
       1DB 2売上 1 2 3・・・10 11 12

    条件 1 2と それぞれの内容は変えていませんが

    No.4の回答に寄せられた補足コメントです。 補足日時:2023/04/13 12:18
  • どう思う?

    マクロ実行前のシート状態は、
    シート名:1DB  すでに手動で作成
        私が言うアクティブシートです

    シート名:1DB  すでに手動で作成
    シート名:2売上  すでに手動で作成
      ※このシートがあるケースは考慮しないで良いです。

    シート名:1     このシートはマクロ実行後に作成
      ※この場合は2つのシートですが変動します

    なっていて、
    実行後、

    シート名:1DB   実行でない(手動作成)
    シート名:2売上  実行でない(手動作成
    シート名:1     実行後作成
    シート名:2     実行後作成
    ・・省略・・
    シート名:12   実行後作成

    マクロによる作成は

      シート名:1 ~ シート名:12 で
      シートのコピーとシート名です

    No.5の回答に寄せられた補足コメントです。 補足日時:2023/04/13 14:48

A 回答 (6件)

アクティブシートは"1DB"です。

(シート:1DBがないとエラーになります)(シート名は半角です)
シートの終端へ1~12のシートを作成します。
(既にシート1~12の何れかが存在するとエラーになります)

以下のマクロを標準モジュールに登録してください。

Option Explicit
Sub シートコピー()
Dim ws As Worksheet
Dim i As Long
Dim istr As String
Set ws = Worksheets("1DB")
For i = 1 To 12
istr = CStr(i)
ws.Copy After:=Worksheets(Worksheets.count)
Worksheets(Worksheets.count).Name = istr
Next
MsgBox ("完了")
End Sub
    • good
    • 0
この回答へのお礼

ありがとうございます。
大変な思いをさせて誠に申し訳ございません。

おかげ様で上手くできました。

お礼日時:2023/04/13 17:54

すみません。

アクティブシートとは、「マクロが実行された時に、今まさに、画面上に表示されているシート(アクティブになっているシート)」と理解していますが、この理解はあってますか。
以下、その前提で、

No4の回答の補足では、
条件1では、アクティブシートはシート名:1ですが、
条件2では、アクティブシート(1DB)となっています。(シート名:1DB)
どちらが正しいのでしょうか?
それとも、条件2のアクティブシート(1DB)は、アクティブシート(1)の誤りでしょうか。
誤りだとすると、
マクロ実行前のシート状態は、
シート名:1DB
シート名:2売上
シート名:1
となっていて、
実行後、
シート名:1DB
シート名:2売上
シート名:1
シート名:2
・・省略・・
シート名:12
となるということでしょうか。
そうであれば、シート1のA1の値をマクロは使用しないということでしょうか。

又、
シート名:1DB
シート名:1
シート名:2売上
のように、シート:1の右側にシートがあるケースは考慮しないで良いのでしょうか。
この回答への補足あり
    • good
    • 0

すみません。

No3の補足を見たのですが、最初の提示された内容と話が違ってきて、よくわからなくなってきました。

1.存在するシートは、左から順にSheet1,Sheet2,Sheet3,Sheet4,Sheet5,Sheet6とする。(Sheet2~Sheet6は存在しない場合もある)
上記以外のシートが存在することは、考えなくて良い。

2.シート名を以下のように変更する。
Sheet1は、当該シートA1の値をシート名にする。(A1="1DB")
Sheet2は、当該シートA1の値をシート名にする。(A1="2売上")
・・・
Sheet6は、当該シートA1の値をシート名にする。(A1="6○○")

3.シート:1DBをコピーして、シート:1~シート:12を作成する。
(コピー元は全てシート:1DB)

上記の処理であってますか?
この回答への補足あり
    • good
    • 0

>A xyd 1 2 3・・・11 12


>となるよう希望します。

xydはxyzの誤りと解釈します。
1.シート:B、シート:Cは削除するということでしょうか?
もし、そうであれば、残すシートと削除するシートの規則を提示していただけませんでしょうか。

2.まず、シート1:の名前をXYZに変えて、
そのあとで、シート:XYZの右側にシート:1~シート:12を作ればよいですか。(シート:1~シート:12は、シート:XYZをコピーして作る)
この回答への補足あり
    • good
    • 0

補足要求です。


1.コピー元のシートは、"1"ですか。

2.シートが左から以下のように並んでいた時、
シート名:A
シート名:1  ・・・左から2番目
シート名:B
シート名:C

マクロを実行した結果は、どのようなシートができれば良いのでしょうか。
シート名:1のA1セルの内容は、"XYZ"とします。
この回答への補足あり
    • good
    • 0

For ~ Next で繰り返し処理を行ってみましょう。



Dim i As Integer

For i = 1 To 12
 【処理したいコマンド】
Next

こんなんでOK。
上の例なら12回繰り返します。
そして、変数の i を使ってシート名に関する情報を指定してやればいい。

難しくはないだろ。
もうちょっといろいろ試行錯誤してみよう。
この回答への補足あり
    • good
    • 0

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