

こんにちは。vba初心者です。
セルのA1を参照してシート名を変更するとき
名前が重複したら、A1に入力されている文字列の後に(2)とつけたいのですが、
その重複したときの処理ができません。
シート名を変更するところまではできました。
以下のvbaです。
Sub test()
Dim aSheet As Worksheet
For Each aSheet In Worksheets
aSheet.Select
aSheet.Name = Range("A1")
On Error Resume Next
Next aSheet
End Sub
これに付け加えるか全然違ってもかまいません。
何かよい方法を教えてください。
説明が不十分かもしれませんが、よろしくお願いします。
No.3ベストアンサー
- 回答日時:
capybaruさん
シート名が重複したら、(2),(3)…と番号を増やすようにしました。
また、capybaruさんのプログラムをベースにしています。
Sub test()
Dim aSheet As Worksheet
Dim NO As Integer
For Each aSheet In Worksheets
aSheet.Select
NO = 1
On Error Resume Next
Do
Err.Clear
aSheet.Name = Range("A1") & IIf(NO = 1, "", Format(NO, "(#)"))
If Err.Number = 0 Then Exit Do
NO = NO + 1
Loop
On Error GoTo 0
Next aSheet
End Sub
No.4
- 回答日時:
作って見ました。
ブックに含まれているシートが全部Worksheetである事が前提(グラフシート等は無い事)です。
全部のシート名を一時的に適当な名前に変えた上で目的の名前に変更しています。
コレにより、変更前のブックに付けたい名前のシートが存在している場合の問題を回避しています。
Sub sample()
Dim sName() As String
Dim aSheet As Worksheet
Dim i, j, k, nCount As Long
ReDim sName(ThisWorkbook.Sheets.Count)
For Each aSheet In Worksheets
i = i + 1
sName(i) = aSheet.Range("A1") '各シートのA1を配列に
aSheet.Name = Format(Now(), "hhmmss") & CStr(i) 'シート名を一時的に適当な名前に変更
Next aSheet
'**本当ならここでA1の値がシート名として適切かのチェックを入れる
For j = 1 To ThisWorkbook.Sheets.Count
nCount = 0
For k = 1 To j
If sName(j) = sName(k) Then
nCount = nCount + 1
End If
Next k
'同じシート名が複数出来る時は(n)を後ろに付ける
If nCount > 1 Then
sName(j) = sName(j) & "(" & CStr(nCount) & ")"
End If
Sheets(j).Name = sName(j)
Next j
End Sub
No.1
- 回答日時:
> セルのA1を参照してシート名を変更するとき
> 名前が重複したら、A1に入力されている文字列の後に(2)とつけたいのですが、
説明がよく分からないんだけど、A1しか参照しないなら必ず重複するのでは?
「重複したら」ってするかしないかの判断なんて要らないんじゃないの?
無条件に、数字の変数でカウントした連番つければいいだけでは?
まぁ、すでにA1に入っている文字列を使ったシートが存在したら
そういうチェックも必要だけど、シートに使われていない文字列で1回
書き換えてからA1を書き換えて、本来変えたかったシート名に変える
とか運用で逃げればいいと思っちゃう。
でないと色々と考慮しないといけないパターンが増えるからね。
変更したいシート名
Test1, Test1(2), Test1(3), Test1(4)
変更前のシート名
Sheet1, Sheet2, Test1, Test1(4)
だった場合、
Sheet1 → Test1
Test1 → Test1(3)
Test1(4) → Test1(4)
とかなったりしてね。どうするつもりなのです?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 複数シートの複数列に入力されているデータを重複なしで抽出するVBAを作りたいです。 9 2022/06/17 10:33
- Visual Basic(VBA) 【VBAエラー】Nextに対するForがありません 対策について 5 2022/11/21 21:26
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Excel(エクセル) エクセルシート中の全角英数字を半角に変換したい 4 2022/07/07 13:14
- Excel(エクセル) vbaで列幅について 1 2022/11/15 08:31
- Excel(エクセル) vba アクティブシートのA1セルの値を基準に複数のシートコピー&シート名を 6 2023/04/12 18:36
- Excel(エクセル) vba シート名の一覧を2列に分けるには 5 2023/04/24 08:56
- Visual Basic(VBA) まとめシートから集計シートへA列のコードが一致したら1行コピーするマクロをネット上で見つけました。こ 1 2022/08/30 14:11
- Visual Basic(VBA) excel vbaでvlooupの変数がわかりません。 7 2022/05/30 09:35
- Visual Basic(VBA) エクセルのマクロで対象ごとにシート分けしてその内容をセルに書き込みたい 9 2022/08/24 13:23
このQ&Aを見た人はこんなQ&Aも見ています
-
VBAでシートコピー後、シート名が重複している時の処理
Access(アクセス)
-
Excel VBA シート名変更時、重複していたら連番を付けたい
その他(Microsoft Office)
-
VBAで同じシート名のコピー時は処理中止したいのですが・・・
Visual Basic(VBA)
-
-
4
VBAでシートコピー後、シート名が重複している時の処理
Excel(エクセル)
-
5
VBAでセルに入っている日付をシート名にする
Excel(エクセル)
-
6
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
7
エクセルのラベルの値(文字列)を垂直方向で中央揃えにするには?
Excel(エクセル)
-
8
Excelシート名が重複してらシート名に連番を付加させる方法
Excel(エクセル)
-
9
エクセルVBAでセルに入力したパスでブックを開く
Excel(エクセル)
-
10
VBA シート名重複した場合削除する
Access(アクセス)
-
11
別ブックをダイアログボックスで指定してそこにあるシートをコピーしたい
Excel(エクセル)
-
12
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
13
EXCEL VBAで全選択範囲の解除
Excel(エクセル)
-
14
InputBoxに入力した言葉をシート名にしたい!
Excel(エクセル)
-
15
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
16
数式による空白を無視して最終行を取得するマクロ
Excel(エクセル)
-
17
マクロ 新しいシートにデータをコピペしてシートの名前を変更したい
Excel(エクセル)
-
18
エクセルの複数のセルを一括で絶対参照にする方法
Excel(エクセル)
-
19
Excelの入力規則で2列表示したい
Excel(エクセル)
-
20
エクセルのエラーメッセージ「400」って?
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ユーザーフォームに入力したデ...
-
excelのマクロで該当処理できな...
-
VBA 存在しないシートを選...
-
実行時エラー1004「Select メソ...
-
特定の文字を含むシートだけマ...
-
Excelマクロのエラーを解決した...
-
XL:BeforeDoubleClickが動かない
-
【ExcelVBA】全シートのセルの...
-
エクセルVBA Ifでシート名が合...
-
実行時エラー'1004': WorkSheet...
-
エクセルのシート名変更で重複...
-
Excel チェックボックスにチェ...
-
ExcelのVBAのマクロで他のシー...
-
エクセルVBA 別シートからのコ...
-
複数シートに色付きセル(条件つ...
-
EXCEL VBAで複数シートから該当...
-
VB.net(2005)でエクセルの特定...
-
Worksheet_Changeの内容を標準...
-
Excel VBA で自然対数の関数Ln...
-
userFormに貼り付けたLabelを変...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelマクロのエラーを解決した...
-
特定の文字を含むシートだけマ...
-
【ExcelVBA】全シートのセルの...
-
ユーザーフォームに入力したデ...
-
excelのマクロで該当処理できな...
-
実行時エラー'1004': WorkSheet...
-
ブック名、シート名を他のモジ...
-
実行時エラー1004「Select メソ...
-
VBA 存在しないシートを選...
-
ExcelVBA:複数の特定のグラフ...
-
エクセルのシート名変更で重複...
-
IFステートの中にWithステート...
-
VBA 検索して一致したセル...
-
ExcelのVBAのマクロで他のシー...
-
XL:BeforeDoubleClickが動かない
-
別のシートから値を取得するとき
-
エクセルVBA Ifでシート名が合...
-
エクセル・マクロ シートの非...
-
シートが保護されている状態で...
-
シート削除のマクロで「delete...
おすすめ情報