[[20040903163556]] 『シートをふやすごとに連番をつけたい』(さと) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『シートをふやすごとに連番をつけたい』(さと)

シートを増やすごとに自動的に番号をつけたい。
例えば、

シート1  001番

シート2  002番

シート3を増やした時自動的に003番が表示される
ようにしたい。

Excel2000
Windows2000


 Sub 新規シート()
   ActiveWorkbook.Sheets.Add.Name = Right("000" & ActiveWorkbook.Sheets.Count + 1, 3)
 End Sub

 こんな感じのものはどうでしょうか?

新規で作成された場合というイベントをどうやって取得していいかわからなかったので
新規作成自体をマクロにしたんですが・・・

よかったですかねぇぇ
 (Null)

"新規作成自体をマクロ"とはシート1を作成する前を言うのですか、それともシート3を作成
する前を言うのですか。


 なんか意味が食い違ってますね。
 シートの追加に、
 「シート1を作成する前を言うのですか、それともシート3を作成する前」
 って、何の関係があるのでしょうか?

 >新規で作成された場合というイベント
 thisworkbookモジュールの Workbook_NewSheet です。

  (INA)


 Private Sub Workbook_NewSheet(ByVal Sh As Object)
    Sh.Name = Right("000" & ActiveWorkbook.Sheets.Count, 3) & "番"
 End Sub

 (INA)さん からの 助言を元に・・・
 こんな感じにしてみたのですがどうでしょうか?
 (Null)


 もし、「シート1  001番」のようなシート名ではないシートが存在するときは、
 ループでカウントすることになります。

 先日、同じような質問があったような・・・

  (INA)

 (INA)さん シート名ではないシートが存在するときはなぜ ループでカウント
 する必要があるんですか?
 おしえてくださぁいm(_ _)m
 (Null)

 さとさんの説明が少ないので、仕様自体が明確ではないので
 どこまで考慮する必要があるのか分かりませんが、

  ActiveWorkbook.Sheets.Count ですと、現在のシート数を取得できますが、

 Sheet1,001番,002番, のような番号以外のシート名が存在しているとすると、
 番号のシート名だけカウントする必要があるように思えます。

  (INA)

 ではそのへんを考慮下上で・・・

 Private Sub Workbook_NewSheet(ByVal Sh As Object)
    Dim n As Long
    Dim sheetscount As Long
    Dim xlbook As Excel.Workbook

    Set xlbook = ActiveWorkbook
    sheetscount = 0
    For n = 1 To xlbook.Sheets.Count Step 1
        If xlbook.Sheets(n).Name Like "[0-9][0-9][0-9]番" Then
            sheetscount = sheetscount + 1
        End If
    Next n

    Sh.Name = Right("000" & sheetscount, 3) & "番"
 End Sub

 シートが連番になっていない場合はエラーになってしまいますが、その辺も考慮したほうがよいのでしょうか?
 こまかい仕様は(さと)さんお願いします。

 PS 条件 シート名は連番でとびはないものとします
           シート名は000番から始まるものとします

 (Null)

 こまかいことを理解していないと書けない要素が含まれた
 なかなか深いコードですね。(゜o ゜;)

  (INA)

 なかなか簡潔にまとめられたとおもったのに_| ̄|○
 まだまだ 精進がたりんですねぇ
 (INA)さん 具体的にアドバイスくださいm(_ _)m

 (Null)

 アドバイスを差し上げるほど、問題はないと思います。(^_^;)

 しいて挙げるなら、thisworkbookモジュールに記載するコードなので、 
 >Set xlbook = ActiveWorkbook 
 は必要ないかと思います。

 Private Sub Workbook_NewSheet(ByVal sh As Object)
 Dim i As Long, cnt As Long

    For i = 1 To Worksheets.Count
        If Worksheets(i).Name Like "[0-9][0-9][0-9]番" Then cnt = cnt + 1
    Next i

    sh.Name = "00" & cnt + 1 & "番"
 End Sub

 *シート名は001番から始まるものとします。

  (INA)


 おぉぉぉ
 かなり簡単になっちゃいましたねぇv
 みやすいし_| ̄|○
 めげずに 精進精進 
 (INA)さん ありがとうございました。
 ってΣ ここ 俺の立てたとこじゃなかあったぁ
 (さと)さん どうですかねぇ?
 (Null)

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.