Help us understand the problem. What is going on with this article?

Excel のシート名に使えない文字について再考2017

More than 3 years have passed since last update.

何をいまさらとか思われた方、命取りですよ~

今、Excelのシート名に使えない文字 で検索すると以下の情報がひっかかります。

[XL2003]シート名に関する仕様および制限について
https://support.microsoft.com/ja-jp/help/436482

自作ソフト RelaxTools Addin には「シート管理」という機能がありシート名を変更可能なのですが、上記の情報をごくんごくんと「鵜呑み」にしており、あるユーザさんから指摘を受けました。

「’」(シングルコーテーション)を入力すると実行時エラーになりますよ

んな、馬鹿な!ちゃんとMicorosoft の情報でちゃんとチェックしてるしー とか思いシングルコーテーションを入力してみると、見事実行時エラーになる。
なんで~? とか思い修正すると、また指摘。

「'」(全角のアポストロフィ)を入力すると実行時エラーになりますよ

なん...だと こりゃモグラたたきになっちゃうな と思い、先日ちょっと調査をしてみました。以下、プログラムを Excel 2010 と Excel 2016 で実行してみました。

シート名でエラーになる文字調査
Sub check()

    Dim i As Long

    On Error Resume Next
    For i = &H0 To &HFFFF&
        Err.Clear
        ThisWorkbook.Worksheets(1).Name = ChrW(i)
        If Err.Number <> 0 Then
            Debug.Print "&H"; Right$("0000" & Hex(i), 4) & " " & ChrW(i)
        End If

    Next

End Sub

以下の文字でエラーとなりました。とりあえずはこれらをチェックすれば良さそうです。

No. UNICODE 文字
1 U+0000
2 U+0027 '
3 U+002A *
4 U+002F /
5 U+003A :
6 U+003F ?
7 U+005B [
8 U+005C \
9 U+005D ]
10 U+2019
11 U+FF07
12 U+FF0A
13 U+FF0F
14 U+FF1A
15 U+FF1F
16 U+FF3B
17 U+FF3C
18 U+FF3D
19 U+FFE5

シングルコーテーション、アポストロフィ、全角の¥とは別に、全角のバックスラッシュあたりが意外なところです。

ネットの情報(本家であっても)は検証しないとダメですね~ というお話でした。
おまけで、シート名のチェック処理VBAを載せておきます。

シート名不可文字チェック
Function IsErrSheetNameChar(ByVal strBuf As String) As Boolean

    Dim lngChar As Long
    Dim i As Long
    Dim bytBuf() As Byte

    IsErrSheetNameChar = False

    '空はエラー
    If Len(strBuf) = 0 Then
        IsErrSheetNameChar = True
        Exit Function
    End If

    '履歴は予約語なので
    If strBuf = "履歴" Then
        IsErrSheetNameChar = True
        Exit Function
    End If

    bytBuf = strBuf

    For i = LBound(bytBuf) To UBound(bytBuf) Step 2

        lngChar = LShift(bytBuf(i + 1), 8) + bytBuf(i)

        Select Case lngChar
            'エラーになる文字'*/:?[\]’'*/:?[\]¥
            Case &H0&, &H27&, &H2A&, &H2F&, &H3A&, &H3F&, &H5B&, &H5C&, &H5D&, &H2019&, &HFF07&, &HFF0A&, &HFF0F&, &HFF1A&, &HFF1F&, &HFF3B&, &HFF3C&, &HFF3D&, &HFFE5&
                IsErrSheetNameChar = True
                Exit Function

        End Select

    Next

End Function
'------------------------------------------------------------------------------------------------------------------------
' 左シフト
'------------------------------------------------------------------------------------------------------------------------
Function LShift(ByVal lngValue As Long, ByVal lngKeta As Long) As Long
    LShift = lngValue * (2 ^ lngKeta)
End Function

フリーソフトを作っています。
Excelを便利にする250以上の機能を体系化したアドインはこちらです。
「RelaxTools Addin」窓の杜大賞受賞ソフト
http://software.opensquare.net/relaxtools/

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away