- ベストアンサー
マクロでのシートの連番について
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シートを使用している結果だと思います。 もし可能ならば、 ご指導よろしく御願いしくます。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
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
その他の回答 (4)
- imogasi
- ベストアンサー率27% (4737/17069)
再度同じような質問を繰り返しているようだが、また質問が長いが、 シート名に、決った名前のあとにサブ番号があり、現存する最大番号の次の番号を付けたシート名を作りたい、でよいと思う。 下記で納請書&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
お礼
ご指導有難うございました。 今後ともよろしく御願いします。
- xls88
- ベストアンサー率56% (669/1189)
下記で、納請書関連シートの、通し番号最大値、が得られます。 プラス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
補足
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)
納請書1が、添付図どおり1番左端のシートだとした場合 (納請書1の左にはシートがないということです) '---------------------------------------- Sub シートの追加() Dim NewNo As Integer NewNo = Sheets("月請求書").Index Sheets("納請書3").Copy Before:=Sheets("月請求書") ActiveSheet.Name = "納請書" & NewNo End Sub '--------------------------------------- ●Sheets("月請求書").Index でこのシートが左から何番目かというのが取得できます。 この取得した番号を追加したシートのシート名の番号にすればいいわけです。 以上です。
お礼
うまくできました。 誠に有難うございました。 今後ともご指導よろしく御願いします。
- KURUMITO
- ベストアンサー率42% (1835/4283)
次のようにすればよいでしょう。 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
補足
KURUMITOさんにはいつも御世話になります。 テストした結果下記のようになりました。 ご報告させていただきます。 コンバイルエラー 変数が定義されていません。 For bangou = 1 To Worksheets.Count + 1 Bangou が反転しています。
お礼
うまくできました。 誠に有難うございました。 今後ともご指導よろしく御願いします。