基本は、シート見出し名の 下2桁だけが、 連番 かつ 12の倍数で、 昇順になっていますが、 ”たまに” 一部シートが抜けている ( ない ) 時がありますので、
マクロ実行後に、
きちんと 合計 12枚 or 24枚 or 36枚 にしたいのです。
抜けている ( ない ) 場合、 抜けているシート数は、多くても 4・5枚 です ( 抜けているシートの場所は変動します )。
3通り のマクロが必要のように思いますが、下記例の 1通り をどうかご教授下さいませ。
-----------------------------
'下記例は、
抜けているシート 4番目 と 最終の36番目 を挿入し、シート数を 合計36 にしたい場合の例です。
'この場合、マクロ実行前は シート数36 を超えることはありません。
'「 **01 ~ **12 」 は、必ず昇順になっています。
ブック1( 実行前シート数 合計34 )
シート見出し
**01 **02 **03 **05 **06 ・・ **12 **01 ・・ **12 **01 ・・ **11
↓↓↓↓
ブック1( 実行後シート数 合計36 )
シート見出し
**01 **02 **03 挿入したシート1 **05 **06 ・・ **12 **01 ・・ **12 **01 ・・ **11 挿入したシート2
No.3ベストアンサー
- 回答日時:
#02です。
前提について補足しなければなりませんでした。このマクロは12枚ずつのシート名のプリフィックス(**の部分)は同じものであるという前提で書きました。
つまり最終的にAAAA01~AAAA12、BBBB01~BBBB12、CCCC01~CCCC12のようなシート構成を想定しています。
もしプリフィックスがバラバラならば補足してください。
なおその場合挿入するシートのプリフィックスはどうすればよいのかも書いてください。(数字2桁だけでは同じ名前になる可能性があるので不適です)
No.2
- 回答日時:
並び順でシートの抜けを見つけなければならないので無駄な処理もありますがこんなマクロでできると思います。
一応のテストはしました。マクロはALT+F11でVBE画面を開き、「VBAProjectエクスプローラのシート名右クリック」→「挿入」→「標準モジュール」で表示される画面にペーストして下さい。実行はシート画面に戻って、ALT+F8を押してマクロ一覧からマクロ名を選択します。
Sub ShtInsert()
Dim shIdx, idx As Integer
Dim Prefix, svPrefix As String
On Error Resume Next
For shIdx = 1 To Worksheets.Count
ActiveSheet.Previous.Select
Next shIdx
For idx = 1 To 3
Prefix = Left(ActiveSheet.Name, Len(ActiveSheet.Name) - 2)
If Prefix <> svPrefix Then
svPrefix = Prefix
shIdx = 1
Do While shIdx < 13
If Not IsNumeric(Right(ActiveSheet.Name, 2)) Then
MsgBox ("シート名下二桁が数字でないため中止しました")
Exit Sub
End If
If Val(Right(ActiveSheet.Name, 2)) = shIdx _
And Left(ActiveSheet.Name, Len(ActiveSheet.Name) - 2) = Prefix Then
Else
If Left(ActiveSheet.Name, Len(ActiveSheet.Name) - 2) = Prefix Then
If shIdx > Val(Right(ActiveSheet.Name, 2)) Then
Worksheets.Add after:=ActiveSheet
ActiveSheet.Name = Prefix & Application.Text(shIdx, "00")
Else
Worksheets.Add.Name = Prefix & Application.Text(shIdx, "00")
End If
Else
Worksheets.Add.Name = Prefix & Application.Text(shIdx, "00")
End If
End If
ActiveSheet.Next.Select
shIdx = shIdx + 1
Loop
End If
Next
End Sub
プログラムはコード整理していないので見にくくてすみません。でも下手にWithで整理すると動かなくなるので注意してください
誠に有難うございました。
>のようなシート構成を想定しています。
zap35様の想定の通りでございます。
プリフィックスまでは、自身の希望以上でした。
No.1
- 回答日時:
標準モジュールでこんな風かな?エレガントじゃないけど
12・24・36全てに有効です。詳しいテストはしてません (^_^)v
Sub test()
Dim shCount As Integer
Dim TempShName As String
Dim i As Integer
shCount = Worksheets.Count
'12で割って余りが 0 なら何もしない。Mod 演算子は余りを、\ 演算子は商を求めます
If shCount Mod 12 = 0 Then
Exit Sub
End If
For i = 1 To ((shCount \ 12) + 1) * 12
TempShName = _
CStr(i \ 12 - (i Mod 12 <> 0)) & "-" & _
Format(IIf(i Mod 12 = 0, 12, i Mod 12), "00")
'(1)シート数がカウンタ(i) より少ない
If Worksheets.Count < i Then
Worksheets.Add after:=Worksheets(Worksheets.Count)
ActiveSheet.Name = TempShName
'(2)シートの添え字がカウンタから得られた添え字より大きい
ElseIf Val(Right(Sheets(i).Name, 2)) > IIf(i Mod 12 = 0, 12, i Mod 12) Then
Worksheets.Add before:=Worksheets(i)
ActiveSheet.Name = TempShName
'(3)
ElseIf Val(Right(Sheets(i).Name, 2)) < IIf(i Mod 12 = 0, 12, i Mod 12) Then
Worksheets.Add after:=Worksheets(i - 1)
ActiveSheet.Name = TempShName
End If
Next
End Sub
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・「I love you」 をかっこよく翻訳してみてください
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・昔のあなたへのアドバイス
- ・かっこよく答えてください!!
- ・あなたが好きな本屋さんを教えてください
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルの複数シートの保護を...
-
Excelで金銭出納帳。繰越残高を...
-
別シート参照のセルをシート毎...
-
エクセルVBAでパスの¥マークに...
-
シートの保護のあとセルの列、...
-
複数のシートの同じセルに入力...
-
エクセルで複数設定したハイパーリンク先...
-
前の(左隣の)シートを連続参...
-
エクセルでファイルを開いたと...
-
エクセルのシート名をリスト化...
-
エクセルで毎回1枚目のシートを...
-
エクセルでファイル保存時に複...
-
Excel、同じフォルダ内のExcel...
-
Excelのシートを、まとめて表示...
-
EXCELで1ヶ月分の連続した日付...
-
VBAでシートコピー後、シート名...
-
複数シートの特定の位置に連番...
-
Excelが開かない!印刷プレビュ...
-
エクセルで前のシートを連続参...
-
EXCELで同一フォーマットのシー...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルの複数シートの保護を...
-
別シート参照のセルをシート毎...
-
エクセルVBAでパスの¥マークに...
-
Excelで金銭出納帳。繰越残高を...
-
Excelで同じシートのコピーを一...
-
Excelのシートを、まとめて表示...
-
エクセルでファイルを開いたと...
-
Accessのスプレッドシートエク...
-
前の(左隣の)シートを連続参...
-
VBAでシートコピー後、シート名...
-
EXCEL:同じセルへどんどん足し...
-
EXCELで同一フォーマットのシー...
-
シートの保護のあとセルの列、...
-
EXCELで1ヶ月分の連続した日付...
-
エクセルで複数設定したハイパーリンク先...
-
複数シートの特定の位置に連番...
-
エクセルでファイル保存時に複...
-
特定のシートの削除を禁止した...
-
エクセルで前シートを参照して...
-
Excel、同じフォルダ内のExcel...
おすすめ情報