• ベストアンサー

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

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シートを使用している結果だと思います。 もし可能ならば、 ご指導よろしく御願いしくます。

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

  • ベストアンサー
  • nag0720
  • ベストアンサー率58% (1093/1860)
回答No.1

Sub シートの追加() Dim n As Integer Dim s As Worksheet n = 0 For Each s In Worksheets If Left(s.Name, 3) = "納請書" Then If Mid(s.Name, 4) > n Then n = Mid(s.Name, 4) End If End If Next If n > 0 Then Sheets("納請書" & n).Copy After:=Sheets("納請書" & n) ActiveSheet.Name = "納請書" & n + 1 End If End Sub

dorasuke
質問者

お礼

うまくできました。 誠に有難うございました。 今後ともご指導よろしく御願いします。

その他の回答 (4)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.5

再度同じような質問を繰り返しているようだが、また質問が長いが、 シート名に、決った名前のあとにサブ番号があり、現存する最大番号の次の番号を付けたシート名を作りたい、でよいと思う。 下記で納請書&nmでよいと思う。 nmを全角にするなら http://www.accessclub.jp/supbeg/083.html のStrConvのvbWideを使う。 Sub test01() nm = 1 For Each sh In Worksheets 'MsgBox sh.Name If Left(sh.Name, 3) = "納請書" Then 'MsgBox sh.Name n = Right(sh.Name, Len(sh.Name) - 3) 'MsgBox n If n > nm Then nm = n End If Next sh MsgBox nm End Sub

dorasuke
質問者

お礼

ご指導有難うございました。 今後ともよろしく御願いします。

  • xls88
  • ベストアンサー率56% (669/1189)
回答No.4

下記で、納請書関連シートの、通し番号最大値、が得られます。 プラス1した数値を、"納請書"に付け加えればよいと思います。 Dim ws As Worksheet Dim idx As Integer Dim maxidx As Integer For Each ws In ActiveWorkbook.Worksheets If ws.Name Like "納請書*" Then idx = Replace(ws.Name, "納請書", "") If maxidx < idx Then maxidx = idx End If End If Next MsgBox maxidx

dorasuke
質問者

補足

Dim ws As Worksheet Dim idx As Integer Dim maxidx As Integer For Each ws In ActiveWorkbook.Worksheets If ws.Name Like "納請書*" Then idx = Replace(ws.Name, "納請書", "") If maxidx < idx Then maxidx = idx End If End If Next MsgBox maxidx に対し 「End sub が足りません」と出ましたので End Sub を追加したら、 「3がでます」 が出ました。

  • myRange
  • ベストアンサー率71% (339/472)
回答No.3

納請書1が、添付図どおり1番左端のシートだとした場合 (納請書1の左にはシートがないということです) '---------------------------------------- Sub シートの追加()  Dim NewNo As Integer  NewNo = Sheets("月請求書").Index  Sheets("納請書3").Copy Before:=Sheets("月請求書")  ActiveSheet.Name = "納請書" & NewNo End Sub '--------------------------------------- ●Sheets("月請求書").Index でこのシートが左から何番目かというのが取得できます。 この取得した番号を追加したシートのシート名の番号にすればいいわけです。 以上です。    

dorasuke
質問者

お礼

うまくできました。 誠に有難うございました。 今後ともご指導よろしく御願いします。

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.2

次のようにすればよいでしょう。 Sub シートの追加() For bangou = 1 To Worksheets.Count+1 On Error GoTo Step1 Sheets("納請書" & bangou).Select Next Step1: Sheets("納請書" & bangou - 1).Copy Before:=Sheets("月請求書") ActiveSheet.Name = "納請書" & bangou End Sub

dorasuke
質問者

補足

KURUMITOさんにはいつも御世話になります。 テストした結果下記のようになりました。 ご報告させていただきます。 コンバイルエラー 変数が定義されていません。 For bangou = 1 To Worksheets.Count + 1 Bangou が反転しています。

関連するQ&A