

こんにちは。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で質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
プロが教えるわが家の防犯対策術!
ホームセキュリティのプロが、家庭の防犯対策を真剣に考える 2組のご夫婦へ実際の防犯対策術をご紹介!どうすれば家と家族を守れるのかを教えます!
-
Excel VBA シート名変更時、重複していたら連番を付けたい
その他(Microsoft Office)
-
VBAでシートコピー後、シート名が重複している時の処理
Access(アクセス)
-
VBAで同じシート名のコピー時は処理中止したいのですが・・・
Visual Basic(VBA)
-
-
4
VBAでシートコピー後、シート名が重複している時の処理
Excel(エクセル)
-
5
ExcelVBAを使って、値がある場合は作業を繰り返し実行するプログラムを作成したい。
Visual Basic(VBA)
-
6
EXCEL VBAで全選択範囲の解除
Excel(エクセル)
-
7
VBA セルの値と同じ名前のシートにデータを補填するやり方を教えてください エクセルのブックがありま
Excel(エクセル)
-
8
エクセルVBAでセルに入力したパスでブックを開く
Excel(エクセル)
-
9
InputBoxに入力した言葉をシート名にしたい!
Excel(エクセル)
-
10
シートをコピーして シートに1から連番をふる
Word(ワード)
-
11
ユーザーフォームを表示中にシートの操作をさせるには
Excel(エクセル)
-
12
【VBA】指定した検索条件に一致したら別シートに転記したい
Visual Basic(VBA)
-
13
VBA(エクセル)で自動的にボタンをクリックさせるには
その他(プログラミング・Web制作)
-
14
VBA シート名重複した場合削除する
Access(アクセス)
-
15
EXCEL VBA セルに既に入力されている文字に文字を追加する
Excel(エクセル)
-
16
VBAで別モジュールへの変数の受け渡し方法
Visual Basic(VBA)
-
17
VBAでセルに入っている日付をシート名にする
Excel(エクセル)
-
18
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
19
VBAでシート名をセルから取得したいのですが
Access(アクセス)
-
20
エクセル:シート名を手入力でなく、セル「A1」の文字を出したい。
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
人気Q&Aランキング
-
4
ブック名、シート名を他のモジ...
-
5
【VBA】指定した検索条件に一致...
-
6
セルの値によって、シート見出...
-
7
Excel VBA 複数行を数の分だけ...
-
8
ユーザーフォームに入力したデ...
-
9
vbaでworksheetfunctionでの複...
-
10
コマンドボタンをクリックでシ...
-
11
C#でExcelのシートを選択する方法
-
12
VBAユーザーフォーム内に別のシ...
-
13
【ExcelVBA】指定のシート以外...
-
14
入力した項目別に色分けをした...
-
15
エクセルの特定のシートのみを...
-
16
【Excel】指定したセルの名前で...
-
17
エクセルのマクロでアクティブ...
-
18
重複するidをデータごとにまと...
-
19
ExcelのVBAのマクロで他のシー...
-
20
EXCEL(VBA)でシート保護がかか...
おすすめ情報
公式facebook
公式twitter