こんにちは。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
Excelシート名が重複してらシート名に連番を付加させる方法
Excel(エクセル)
-
6
VBA シート名重複した場合削除する
Access(アクセス)
-
7
エクセルVBA 同じ名前のシートがすでにあるとエラートラップに飛ばしたいのですがうまくいきません こ
Visual Basic(VBA)
-
8
VBA セルの値と同じ名前のシートにデータを補填するやり方を教えてください エクセルのブックがありま
Excel(エクセル)
-
9
VBAでセルに入っている日付をシート名にする
Excel(エクセル)
-
10
特定の文字を含むシートだけマクロ処理をしたい
Visual Basic(VBA)
-
11
エクセル:シート名を手入力でなく、セル「A1」の文字を出したい。
Excel(エクセル)
-
12
エクセルVBAでセルに入力したパスでブックを開く
Excel(エクセル)
-
13
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
14
Excel2000/VBA:値と書式のみ貼り付けたい。
Excel(エクセル)
-
15
UserForm1.Showでエラーになります。
工学
-
16
vba 2つの条件が一致したらコピーして別シートに値のみ貼り付け
Visual Basic(VBA)
-
17
エクセルのエラーメッセージ「400」って?
Visual Basic(VBA)
-
18
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
19
InputBoxに入力した言葉をシート名にしたい!
Excel(エクセル)
-
20
EXCEL VBA セルに既に入力されている文字に文字を追加する
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
excelのマクロで該当処理できな...
-
別のシートから値を取得するとき
-
別のシートを参照して計算する方法
-
同じ作業を複数のシートに実行...
-
実行時エラー1004「Select メソ...
-
XL:BeforeDoubleClickが動かない
-
ユーザーフォームに入力したデ...
-
ブック名、シート名を他のモジ...
-
IFステートの中にWithステート...
-
【VBA】シート名に特定文字が入...
-
特定の文字を含むシートだけマ...
-
【ExcelVBA】全シートのセルの...
-
エクセルのシート名変更で重複...
-
シートが保護されている状態で...
-
Excelマクロのエラーを解決した...
-
VB6.0でEXCELにシートを追加したい
-
エクセル VBA シートのコピー
-
VBAです。ユーザーフォームの表...
-
指定文字が含まれるシートを削...
-
【Excel VBA】Worksheets().Act...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
別のシートから値を取得するとき
-
excelのマクロで該当処理できな...
-
【ExcelVBA】全シートのセルの...
-
ユーザーフォームに入力したデ...
-
同じ作業を複数のシートに実行...
-
ブック名、シート名を他のモジ...
-
特定の文字を含むシートだけマ...
-
実行時エラー'1004': WorkSheet...
-
VBA 存在しないシートを選...
-
エクセルのシート名変更で重複...
-
XL:BeforeDoubleClickが動かない
-
シートが保護されている状態で...
-
Excel VBA 複数行を数の分だけ...
-
実行時エラー1004「Select メソ...
-
【Excel VBA】Worksheets().Act...
-
Excelマクロのエラーを解決した...
-
エクセル・マクロ シートの非...
-
VBAで同じシート名のコピー時は...
-
ExcelのVBAのマクロで他のシー...
-
【VBA】色のついたシート名を取得
おすすめ情報