
VBAで下記のように変数を使用しシート名の変更をしたいと考えています。
ActiveSheet.Name = nen & "." & getsu
nenには年が、getsuには月が入っていて、2009.12のような名前にするつもりです。
ただ、既に同じブック内に同じ名前のシートが存在する場合、
2009.12(2)のように、普通にシートをコピーしたときにつく連番と同じように、
自動的に連番をつけたいと考えているのですが、よい方法が分かりません。
なお、2009.12と2009.12(2)があれば、2009.12(3)となるように、
イメージとしては()の数字が同名のシートの数分増えるようにしたいと思っています。
なにとぞご教授いただけますでしょうか?
A 回答 (5件)
- 最新から表示
- 回答順に表示
No.5
- 回答日時:
エラーなしでシンプルな方法です。
Sub macro()
Dim nen As Integer
Dim getsu As Integer
Dim W As Workbook
nen = 2009
getsu = 12
Set W = ActiveWorkbook
ActiveSheet.Move
ActiveSheet.Name = nen & "." & getsu
ActiveSheet.Move after:=W.Worksheets(W.Worksheets.Count)
End Sub
No.4
- 回答日時:
こんにちは。
>Excel VBA シート名変更時、重複していたら連番を付けたい
こうすればよいのでは?
>2009.12と2009.12(2)があれば、2009.12(3)となるように、
ということですから、 i = 2 '枝番初期値 というように、2にしてあります。
'-------------------------------------------
Sub SheetChangeName()
Const nen As String = 2009
Const getsu As String = 12
Dim i As Long
i = 2 '枝番初期値
On Error Resume Next
Do
Err.Clear
ActiveSheet.Name = nen & "." & getsu & "(" & CStr(i) & ")"
i = i + 1
Loop Until Err.Number = 0
On Error GoTo 0
End Sub
No.3
- 回答日時:
こんな感じで
Sub test()
Dim nen, getsu
Dim eda As String
Dim i As Integer, j As Integer
nen = 2009
getsu = 12
eda = ""
j = 0
Do
eda = IIf(j = 0, "", "(" & j & ")")
For i = 1 To Worksheets.Count
If Worksheets(i).Name = nen & "." & getsu & eda And ActiveSheet.Index <> i Then Exit For
Next i
j = j + 1
Loop Until i > Worksheets.Count
ActiveSheet.Name = nen & "." & getsu & eda
End Sub
No.2
- 回答日時:
nen、getsu、は定義済みかつ値が入っているものとしています。
Sub mmmm()
Dim s As String
Dim q As Long
Dim MaxNO As Long
Dim ws As Worksheet
Dim umu As Boolean
s = nen & "." & Right("00" & getsu, 2) '名前を作る
For Each ws In Worksheets 'すべてのWorksheetをひとつづつ処理
If Left(ws.Name, Len(s)) = s Then '名前が一致(年月のみ一致も含む
umu = True1 '一致したよ!
If ws.Name = s Then
q = 0 '完全一致のときqは0
Else
'そうじゃないとき括弧内の数字を取り出してqにいれる
q = Val(Replace(Left(ws.Name, Len(ws.Name) - 1), s & "(", ""))
End If
'以下3行でqの最大値をMaxNOに入れる
If q > MaxNO Then
MaxNO = q
End If
End If
Next
If umu = False Then
ActiveSheet.Name = s '年月も一致しないとき
Else
ActiveSheet.Name = s & "(" & MaxNO + 1 & ")" '一致したものがあるときMaxno+1を()付きで付加
End If
End Sub
2009年1月は2009.1ではなく2009.01になるようにしています。
テストはしていませんので不具合があったら補足してください。今酔ってます(^^;)
No.1
- 回答日時:
A.「2009.12」というシートが存在するか?
No→そのままシート名を変更
B.i=2
C.「2009.12(i)」というシートが存在するか?(iは変数)
No→シート名を変更。ループを抜ける
D.i=i+1 Cに戻る
E.おめでとう。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
確定申告しなかった・無申告の人をどうやって見つけるのか元国税調査官に聞いてみた
無申告の方などを対象に税務調査を行う国税局の元税務調査官さんに、どう無申告を探すのか聞いてきました。
-
エクセルのシート名変更で重複した時のvbaの処理
Visual Basic(VBA)
-
VBAでシートコピー後、シート名が重複している時の処理
Access(アクセス)
-
シートをコピーして シートに1から連番をふる
Word(ワード)
-
4
VBAで同じシート名のコピー時は処理中止したいのですが・・・
Visual Basic(VBA)
-
5
マクロ VBA ファイル名を連番でつけたいのですが
Access(アクセス)
-
6
EXCEL VBAで全選択範囲の解除
Excel(エクセル)
-
7
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
8
エクセル:シート名を手入力でなく、セル「A1」の文字を出したい。
Excel(エクセル)
-
9
Excelシート名が重複してらシート名に連番を付加させる方法
Excel(エクセル)
-
10
Excel VBAで同じフォルダ内のファイルを開くには?
Excel(エクセル)
-
11
エクセルマクロでシート名を条件にする方法
Excel(エクセル)
-
12
シート名を変更してもVBAでエラーにならないように
Excel(エクセル)
-
13
エクセルVBA シート名を枝番付連番に変更する方法を教えて
Excel(エクセル)
-
14
EXCEL VBA で指定した範囲に入力があるかどうか?
Visual Basic(VBA)
-
15
ユーザーフォームを表示中にシートの操作をさせるには
Excel(エクセル)
-
16
EXCEL あるセルに数字が入力されれば既存マクロ実行させたい
Excel(エクセル)
-
17
メッセージボックスに表示する文字を大きくしたい
Excel(エクセル)
-
18
VBAで空白セルにのみ数値を代入する方法
Excel(エクセル)
-
19
VBAでシート名をセルから取得したいのですが
Access(アクセス)
-
20
セルの値と同じ名前のシートをアクティブにするには?
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
人気Q&Aランキング
-
4
マジェスティ(4HC)のシート下...
-
5
癒着してしまったテレビの液晶...
-
6
BRIDEのシート張り替えってでき...
-
7
車のシートがへたってきました...
-
8
マグネットシートって・・・
-
9
背が低くて運転しにくいんです。
-
10
知人の車の皮シートを汚してし...
-
11
XR250BAJAのシートのはずし方を...
-
12
エクセルで複数のシートをフォ...
-
13
ZZ-R400に乗っているのですが・...
-
14
建築模型、カーブの作り方
-
15
●ロケット花火●のゴミ回収方法
-
16
ホワイトボードの復活
-
17
XJR400R 1995年式なのですがシ...
-
18
フェルト(濃紺)に図案を写す方法
-
19
テントのグラウンドシートの自作
-
20
ハイエースの2ndシート交換を...
おすすめ情報
公式facebook
公式twitter