何をいまさらとか思われた方、命取りですよ~
今、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/