プロが教えるわが家の防犯対策術!

エクセル2010を使用しています。

Sheetが30枚ほどあり、Sheet名を一括で変換したいマクロを作りたいのですが、
どのようなマクロになりますか。

Sheetは、Sheet1、Sheet2、Sheet3、Sheet4、、、、Sheet30
と作られています。

Sheet1  AAA
Sheet2  BBB
Sheet3  CCC

とリストにしています。

Sheet1にAAA、Sheet2にBBB という形でシート名になるようにマクロを教えてください。
よろしくお願いいたします。

質問者からの補足コメント

  • 失礼いたしました。
    sheet1 AAA
    sheet2 BBB
    の、AAA、BBBは任意で正確にはリンゴ、すいかなどの単語が入ります。

      補足日時:2016/06/14 20:15

A 回答 (5件)

この種のコードは、かなりエラーが出やすいです。


しかし、マクロで変えざるを得ないという厄介なものがあります。
手動で入れたものは、後々エラーを呼び込みます。
本来は、シート名のチェッカーを入れなくてはなりませんが、面倒なので割愛しています。

全角半角に関わらず 31字より以上
使用出来ない文字の検出
":", "\", "/", "?", "*", "(", ")"
の規則があります。

次の問題としては、まず、リストの正確さでしょうね。
リストの少なくとも、A列側は、マクロで出さないとうまくいきません。

以下の二つのマクロには矛盾があります。
SheetsNameList では、シートの名前を出させておいて、
ChangeSheetNames では、シートのインデックスを使っています。
これをわざとしています。
エラーが発生した所は飛び越えていきます。

'//
Sub SheetsNameList()
'一覧の名前を出す(A列は触らないこと、順序はそのままにします。)
Dim i As Long
For i = 1 To Worksheets.Count
   Cells(i + 1, 1).Value = Worksheets(i).Name
Next i
End Sub

Sub ChangeSheetNames()
  Dim x As Variant
  Dim i As Long
  x = Range("A2", Cells(Rows.Count, 1).End(xlUp).Offset(, 1)).Value '配列
  On Error GoTo ErrHandler
  For i = LBound(x) To UBound(x)
    Worksheets(i).Name = x(i, 2) '2を1にすると元に戻る
  Next i
  Exit Sub
ErrHandler:
  Resume Next
End Sub
'//
    • good
    • 0

No2です。

はてどうしてでしょうかね。
A列にあるシート名が存在しない
B列にシート名として使用できない文字がある
かな?
どんなエラーメッセージなのかもわからないのでこれくらいですね。
でも、よく考えたら、一度、変換してしまうとA列を修正しないと使えないですよね。
使いづらくないですか。
Sub ボタン1_Click()
For i = 2 To Range("A" & Rows.Count).End(xlUp).Row
Sheets(i).Name = Range("B" & i).Value
Next
End Sub
として、上から2枚のシートから順に名前を変更した方が使いやすくないですか。
    • good
    • 0

失礼しました。


シート名の対応表が A,D列で2行目から始まるとして

シート名の対応表が A,B列で2行目から始まるとして
と云う事で訂正します。
    • good
    • 0
この回答へのお礼

ありがとうございます。
いただいたマクロですが 上手くできませんでした。
私の設定がおかしいのか?
具体的にはSheetの名称を下記のように一括変更したいです。

A列       B列
Sheet変換用 Sheet名
Sheet1    りんご
Sheet2    みかん
Sheet3    すいか
Sheet4    いちご
Sheet5    さくらんぼ
Sheet6    レモン
Sheet7    きゅうり
Sheet8    じゃがいも
Sheet9    レタス

お礼日時:2016/06/15 10:23

シート名の対応表が A,D列で2行目から始まるとして


Sub ボタン1_Click()
For i = 2 To Range("A" & Rows.Count).End(xlUp).Row
Sheets(Range("A" & i).Value).Name = Range("B" & i).Value
Next
End Sub
で大丈夫ではないでしょうか。
    • good
    • 0

27枚目以降(ZZZの後)のシート名はどうなるのですか?

    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!