こんにちは。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も見ています
-
フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
あなたが普段思っている「これまだ誰も言ってなかったけど共感されるだろうな」というあるあるを教えてください
-
Excel VBA シート名変更時、重複していたら連番を付けたい
その他(Microsoft Office)
-
VBAでシートコピー後、シート名が重複している時の処理
Access(アクセス)
-
VBAで同じシート名のコピー時は処理中止したいのですが・・・
Visual Basic(VBA)
-
-
4
VBAでシートコピー後、シート名が重複している時の処理
Excel(エクセル)
-
5
Excelシート名が重複してらシート名に連番を付加させる方法
Excel(エクセル)
-
6
VBA シート名重複した場合削除する
Access(アクセス)
-
7
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
8
エクセルVBA 同じ名前のシートがすでにあるとエラートラップに飛ばしたいのですがうまくいきません こ
Visual Basic(VBA)
-
9
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
10
エクセル:シート名を手入力でなく、セル「A1」の文字を出したい。
Excel(エクセル)
-
11
EXCEL VBAで全選択範囲の解除
Excel(エクセル)
-
12
VBAのコマンドボタンの文字列の改行方法は?
Visual Basic(VBA)
-
13
マクロで印刷→セルの値から部数変更するには
Excel(エクセル)
-
14
シートをコピーして シートに1から連番をふる
Word(ワード)
-
15
シート名を変更してもVBAでエラーにならないように
Excel(エクセル)
-
16
エクセルVBAでセルに入力したパスでブックを開く
Excel(エクセル)
-
17
VBAでブックを非表示で開いて処理して閉じる方法
Excel(エクセル)
-
18
エクセルをPDFで保存し、ファイル名はA1セルを参照するVBAの記述を教えてください。
Excel(エクセル)
-
19
VBAでセルに入っている日付をシート名にする
Excel(エクセル)
-
20
特定の文字を含むシートだけマクロ処理をしたい
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・「I love you」 をかっこよく翻訳してみてください
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・昔のあなたへのアドバイス
- ・かっこよく答えてください!!
- ・あなたが好きな本屋さんを教えてください
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
特定の文字を含むシートだけマ...
-
VBAでシート挿入を禁止したい。
-
ユーザーフォームに入力したデ...
-
エクセルのマクロでアクティブ...
-
マクロ(VBA)を用いて野球の打...
-
別のシートから値を取得するとき
-
userFormに貼り付けたLabelを変...
-
ブック名、シート名を他のモジ...
-
Worksheet_Changeの内容を標準...
-
ExcelのVBAのマクロで他のシー...
-
【ExcelVBA】全シートのセルの...
-
同じ作業を複数のシートに実行...
-
シート削除のマクロで「delete...
-
VBAで同じシート名のコピー時は...
-
月ごとに作成している日報ファ...
-
エクセルの絶対参照の一括操作...
-
エクセル・マクロ シートの非...
-
エクセルのシート名変更で重複...
-
VBA 検索して一致したセル...
-
シート名一致すれば印刷、一致...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
特定の文字を含むシートだけマ...
-
excelのマクロで該当処理できな...
-
【ExcelVBA】全シートのセルの...
-
ユーザーフォームに入力したデ...
-
別のシートから値を取得するとき
-
ブック名、シート名を他のモジ...
-
実行時エラー'1004': WorkSheet...
-
Excelマクロのエラーを解決した...
-
XL:BeforeDoubleClickが動かない
-
シートが保護されている状態で...
-
エクセルのシート名変更で重複...
-
実行時エラー1004「Select メソ...
-
VBAで同じシート名のコピー時は...
-
エクセルで通し番号を入れてチ...
-
同じ作業を複数のシートに実行...
-
Excel VBA リンク先をシート...
-
ExcelのVBAのマクロで他のシー...
-
Vba UserformからExcelシートの...
-
【Excel VBA】Worksheets().Act...
-
VBA 存在しないシートを選...
おすすめ情報