Edited at

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

More than 1 year has 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/