Microsoft Excelのワークシート作成サブルーチン
Microsoft Excelというのはもともとマッキントッシュのアプリケーションだから、いろいろとマックの制限を引きずっている。誰もが気がつくのは「なぜ印刷したらセルから文字がはみ出るんだぁ!」
これは、マックのフォントが画面表示と印刷で幅が違う!という仕様だったので、それをアプリケーションで対応したからだ、ということだ。
それ以外の制限として「ワークシート名」というのがある。31文字以内。禁則文字はMS-Windowsでは類を見ないもの。しかも(仕様には書いてないみたいだが)禁則文字を全角にして乗り切ろうにも、Windowsのファイル名と違ってやはりエラーメッセージが出る。これはマックのOSである漢字Talkには半角と全角の区別がない、という素晴らしい特性によるものである。
というわけで、本来ならば「例えばVBAで、Microsoft Excelのワークシートを作る際には使おうとしているワークシート名がそれでいいのか、独自のチェックをかけないといけない」はずである。が、今のところ見つからないので、
自分で作りました。
拡張子と思しきものがあれば取っ払います。
禁則文字をアンダースコアで置き換えます。
シート名を31文字で切ります。
すでに同名のシートがあれば削除して再作成します。
こんなもんでいいかしら。
'<シートがあれば消して、作り直す。シート名は引数>
Sub シートドロップクリエイト(作成シート名 As String)
If ワークシート名検証(作成シート名) Then
Application.DisplayAlerts = False
Worksheets(作成シート名).Delete
Application.DisplayAlerts = True
End If
'Set ws = Worksheets.Add() 'シートを最初に追加する場合
Set ws = Worksheets.Add(after:=Worksheets(Worksheets.Count)) 'シートを最後に追加する場合。
ws.Name = 作成シート名
End Sub
Function ワークシート名検証(名前候補 As String) As Boolean
'Microsoft Excelはもともとマックのソフトなので、シート名の制限は漢字Talkのファイル名規則に従う。
'そこで、ワークシート名としようとした文字列を"名前候補"として渡し、規則に従っているかを検証。
'それでも31文字に切り縮め、禁則文字を置き換えるくらいのサービスはするので、実質は、
'シート名を整え、その上で重複したシート名があれば、Trueを返す関数となる。
'仕様にはないが全角もダメ。Macが全角と半角を区別しないから
Const シート名禁則 = ":,\,/,?,*,[,],:,¥,/,?,*,[,]"
Dim arrシート名禁則 As Variant
Dim s As Integer
Dim wk_名前候補 As String
Dim ws As Worksheet, flag As Boolean
arrシート名禁則 = Split(シート名禁則, ",")
'ファイル名をシート名にしたい時もあるので拡張子があれば除く
If InStr(名前候補, ".") > 0 Then
wk_名前候補 = Left(名前候補, InStrRev(名前候補, ".") - 1)
Else
wk_名前候補 = 名前候補
End If
'MS-Excelのシート名の制限31文字で切る
wk_名前候補 = Left(wk_名前候補, 31)
'名前候補に禁則文字があれば、半角アンダースコアに変換
For s = 0 To UBound(arrシート名禁則)
wk_名前候補 = Replace(wk_名前候補, arrシート名禁則(s), "_")
Next s
'同じ名前のシートがないか確認
flag = False
For Each ws In Worksheets
If ws.Name = wk_名前候補 Then
flag = True
Exit For
End If
Next ws
名前候補 = wk_名前候補
ワークシート名検証 = flag
End Function
同じような長い名前をつける羽目になったとき、最後に(1)とか(2)とかの序数をつけるというサブルーチンも作ったのですが、結局1回しか使ってないので、それは省略。
(もともと長いファイル名のブックがあって、各人がそれに記入した後、ファイル名に自分の社員番号をつけて保存するルールとなっていて、そういうのが同じフォルダにズラーっと並ぶというのがあったわけ。集計する側はとりあえず「ファイル名から拡張子を除いてシート名に」しようとしたのだけども、31文字の制限超えるんで、作ったの。)
ちなみにMicrosoft Excelという表記も昔の名残で、Excelってケミカル銀行のファームバンキングソフトの名前だったのだな。でもどうしてもExcelという名前が使いたかったので「かならずMicrosoft Excelと表記するから」と約束して使わせてもらえることになった。その後、ケミカル銀行はマニファチャラーズ・ハノーバー銀行に買収され、更にチェース・マンハッタン銀行に買収されたのでExcelというファームバンキングソフトは宙に浮いた時期があり、そのとき購入しておけば当然商標権はおまけでついてくるので、買っちゃいましょう!すごい宣伝効果ですよ!!と社内で提案したが無視されてしまった。