• ベストアンサー

シート見出し名の下2桁を ”必ず ” 連番 かつ 12の倍数にするには?

基本は、シート見出し名の 下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

質問者が選んだベストアンサー

  • ベストアンサー
  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.3

#02です。前提について補足しなければなりませんでした。 このマクロは12枚ずつのシート名のプリフィックス(**の部分)は同じものであるという前提で書きました。 つまり最終的にAAAA01~AAAA12、BBBB01~BBBB12、CCCC01~CCCC12のようなシート構成を想定しています。 もしプリフィックスがバラバラならば補足してください。 なおその場合挿入するシートのプリフィックスはどうすればよいのかも書いてください。(数字2桁だけでは同じ名前になる可能性があるので不適です)

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

  • zap35
  • ベストアンサー率44% (1383/3079)
回答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で整理すると動かなくなるので注意してください

oshietecho-dai
質問者

お礼

誠に有難うございました。 >のようなシート構成を想定しています。 zap35様の想定の通りでございます。 プリフィックスまでは、自身の希望以上でした。

全文を見る
すると、全ての回答が全文表示されます。
  • nicotinism
  • ベストアンサー率70% (1019/1452)
回答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

oshietecho-dai
質問者

お礼

希望以上のご回答でした。 どちら様も、超良回答でした。 TempShName までも誠に有難うございました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • A列の下2桁だけが連番でなかったら1行だけを挿入するマクロは?

    基本は、A列の下2桁 ( 各連番が複数ずつあります ) だけが連番になっているんですが、 "たまに"  抜けている ( ない ) 時がありますので、 マクロ実行後に、連番が抜けている ( ない ) 場合に、そこに 「 1行だけ を挿入 」 して、 かつ その行のFS列 ( 175列目 ) まで  ハイフン 「 - 」  を入力したいんです。 そして、必ずデータエリア数を   12  or  24  or   36   にしたいんです ( マクロ実行前は 36 を超えることはありません )。   連番が抜けている ( ない ) 場合、多くても 4・5つのデータエリア です。 3通り のマクロが必要のように思いますが、下記例の 1通り をどうかご教授下さいませ。 ---------------------------- **01 が 約10~19行 ( 変動します ) まであります ( これを エリア数1 と表現させて頂きます )。 そして、他の 「 **02 ~ **12 」 も同様です。これで 合計エリア数12 となります。 「 **01 ~ **12 」 は、必ず昇順になっています。 下記例は、 エリア数を 実行後 24 にしたい場合の例です ( この場合、実行前は 24 を越えることはありません )。 「 最初の **01 ~ **12 」 のうち 「 **02 」 と 「 **12 」 が抜けている ( ない ) 場合です。  実行前 ( エリア数22 です。「 **02 」 と 「 **12 」 が抜けている ( ない ) ) A列 **01 ・ **01 **03 ・ **03 ・ **11 ・ **11 **01 ・ **01 **02 ・ **12 **12 ↓↓↓ 実行後 ( 挿入した2行を エリア数2 としまして、 合計エリア数24 となります ) A列   B列   ・   ・   FS列  **01 ・ **01 -      -    ・   ・   - **03 ・ **03 ・ **11 ・ **11 -      -    ・   ・   - **01 ・ **01 **02 ・ **12 **12

  • 【Excel VBA】シート見出しの色を変更する

    Excel2003を使用しています。 シート数が10数枚のBookが複数あり、これらのBookで、シートのデータが変更されたら、シート見出しに色を付けるマクロを作りたく、とりあえず、マクロの記録をとってみました。 マクロの記録で、シート見出しの色を変更するコードや複数のシートを選択するコードはわかりましたが、実際にしたいことは、シート名が4桁の数値のシートにだけ、このマクロが実行されるようにしたいのです。このようなことは可能でしょうか?可能であれば、どのようにコードを記述すればいいでしょうか? よろしくお願いします。

  • Excel2003で桁名行名シート見出しが非表示に

    表題のとおりなんですが… 先ほどから急にあるブックだけ桁名、行名、シート見出しの部分が非表示になりました。 オプションの[表示タブ]を確認しても「行列番号(E)」、「シート見出し(B)」のチェックボックスはチェックされています。 チェックをはずしてExcel再起動、チェック入れてみましたが状況が変わりません。 ほかのブックでは桁名、行名、シート見出しともに表示されています。 とても困っています、よろしくお願いします。

  • マクロでのシートの連番について

    WindowsXP EXCELL2003 いつも御世話になります。 「マクロ実行」でシートの追加はすでに下記でご指導いただきました。 http://oshiete1.goo.ne.jp/qa5351508.html ご指導を仰ぎたいのは、 「納請書」が現在 1~3 迄は作成しています。 例えば 下記マクロを実行して このシート(納請書)を順次追加した時に シート名が「納請書4」「納請書5」「納請書6」と表示することは可能でしょうか Sub シートの追加() Sheets("納請書3").Copy Before:=Sheets("月請求書") ActiveSheet.Name = "納請書" & Worksheets.Count End Sub  このマクロで実行すると「納請書10」からはじまります。 現在、シート数は 9シートを使用している結果だと思います。 もし可能ならば、 ご指導よろしく御願いしくます。

  • Excelマクロ:複数シート同座標セルの値を、連番で一覧に参照したい

    マクロは素人なのでご教授お願いします。 Excelブック一つにシートが20あったとします。 ○20シート全ての同座標セルに、ある商品の「合計」と「個数」の値がある ○「集計」シートが別にあり、「sheet1」から「sheet20」までを連番で一覧にしてある 該当のセルに「合計」と「個数」の値を参照させる <「集計」シート 結果例>    A      B       C  1 シート名  合計数   個数(表見出し) 2 sheet1    78      5 3 sheet2    90      17 4 sheet3    112     224 また、以前まったくの逆の条件で質問をしまして、良回答いただきました。 http://oshiete1.goo.ne.jp/kotaeru.php3?q=715150 参考までにご覧になってみて下さい。 よろしくお願い致します。

  • シート名について教えて下さい

    例えば・・・・マクロを実行すれば、 (1)エクセルブックの 沢山あるシートの一番前に、『シート名一覧』のシートを追加 (2)『シート名一覧』シートのA列に、全シート名を表示      A 1  シート名一覧 2   源語 3   文章作り 4   単語帳  5   担当 6   : 7   : (3)『シート名一覧』シートのA1から、シート名と連動(順番に) (4)例えば、A4『単語帳』を『四文字熟語』に変えると、最初から4番目のシート名が連動して変わる そのようなマクロを どうか教えて下さい! 宜しくお願いします。

  • 「ワークシート見出しの順番」 を希望順に並び替えるマクロは ?

    エクセル 2002 です。 シートの数は、必ず 36 以下です。 下記例は、 1、「 頭の AK 」 は 必ず、全部同じです。 2、「 数字部分の2桁 」 は、必ず、 1 ~ 10 です。 3、「 * 」 は、必ず、6 桁 です。 4、たとえば下記例の 「 AK01****** 」 は、 「 AK01******  だけの見出し全部 ( 01 だけが全く同じのデータが必ず続いてます) 」 を 「 01 の エリア  」 と 表現させて頂ます。    5、この エリア は 必ず、2つ か 3つ です。( 下記例では、エリア は 3つ です) この エリア順 を 「 InputBox を使い 」 希望順に並び替えたいのです。 何卒、ご教授くださいませ。 ----------------- Sub 見出し並び替え() Dim sort_key As String Dim sDataArray As Variant Dim i As Long Dim j As Long sort_key = InputBox("ソートキーを入力してください" & vbCrLf & "10,04,01 のような感じで入力してください") ・ ・ End Sub ---例---------------------------------------------- ブック1( エリア順が 01、04、10 です ) シート見出し AK01****** AK01****** ・・ AK01****** AK04****** ・・ AK04****** AK10****** ・・ AK10****** ブック1( エリア順を 10、04、01 にしたいです ) シート見出し AK10****** AK10****** ・・ AK10****** AK04****** ・・ AK04****** AK01****** ・・ AK01******

  • Excel 2010 シート名が表示されません。

    オプションから詳細設定と進み、 次のbookで作業するときの表示 シート見出しを表示するにレ点が入っているが 表示されません。  なお、本bookにはマクロを組み込んでいます。 マクロが邪魔しているのでしょうか? 他のbook は表示されます。   よろしくお願いします。 ※OKWaveより補足:「富士通FMV」についての質問です。

  • 【VBA】シート名をセルに入力すると、そのシートのコピーを実行させるには?

    【条件】 1.仮に「合計」というシートに、追加されるシートのあるデータをコピーしたい。 2.別シートに一定のフォームの集計データが入っているので、このシート名を変更して「A」という名前に変更する。そして、「合計」の入っているブックに移動する。 3.「合計」のA1のセルに「A」という入力をしマクロを実行すれば、「A」のシートの一定のRangeから、合計の任意の場所にコピーをするマクロをつくりたい。 4.このフォームは年間同じフォームで20回発生するがそのたびに、同じような作業が必要となります。 (シートにコピーする作業は、やめて、ブックの別ファイルのあるシートから、ある一定のRangeをコピー元として、「合計」にコピーするでも問題ないです)。 If ~ Elseif ~、myRange = A1で作っても、そのmyRange = A, Elseif = B、と延々につくらなければならない(=たぶんこれは原始的なのだと自認しています)のがはがゆく、 シート名が”文字列(または数字)”の場合、その”文字列(または数字)”をもつ、ブックまたはシートから、コピーを実行というコードをつくりたいのです。 よろしくお願いいたします。

  • 同ブック内でシートを追加したときにシート名と連番が

    WindowsXP EXCELL2003 いつも御世話になります。 何とか自分で作りたく色々調べてトライしましたが分からなくなりご教授を願う事になりよろしく御願いします。 仰ぎたいのは 納品書と請求書が一緒になった ・シート名「納請書1」、 がA4で1枚になったシートがあります。 とりあえずこの納請書なるものは3シート用意しています。 受注が追加されるごとに「納請書3」のシートコピーをして「納請書4」その都度追加します。 これをマクロの実行とか何かの方法で追加することは可能でしょうか。 もし可能ならばいい方法をご指導いただけませんでしょうか。 取り合えず1例で下記のマクロを Sub シートの追加とプロパティ操作() Dim NewWS As Worksheet Set NewWS = Worksheets.Add(After:=Worksheets("納請書3")) With NewWS .Name = "納請書4" .Columns.ColumnWidth = 20 End With End Sub このやり方は私か調べた物でトンチンカンかも知りません。 「マクロの実行」 Sheet3シートの追加とプロパティ操作 で「実行」すると次のように出ます。 「インデックスが有効範囲にありません」

専門家に質問してみよう