いまさらなので、深く考えない
ファイル名やフォルダ名に使えない文字は9つ。リネーム時にそれらの文字を入力しようとするとWindowsが教えてくれる。
使えないのは半角文字なので、以下の全角文字に変換する。
全9種類 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
---|---|---|---|---|---|---|---|---|---|
全角文字 | ¥ | / | : | * | ? | ” | < | > | | |
以下、超簡単な関数を作っておくと便利。
Public Function ReplaceStg(ByVal stg As String) As String
stg = Replace(stg, "\", "¥")
stg = Replace(stg, "/", "/")
stg = Replace(stg, ":", ":")
stg = Replace(stg, "*", "*")
stg = Replace(stg, "?", "?")
stg = Replace(stg, """", Chr(&H8168)) ' VBAでは全角のダブルクォーテーションが打てない
stg = Replace(stg, "<", "<")
stg = Replace(stg, ">", ">")
stg = Replace(stg, "|", "|")
ReplaceStg = stg
End Function
ついでに連番を振ってみる
この関数を使って、禁止文字を使ったフォルダを同じ場所に10個作ってみよう。
以下は指定したパスと名前で新しいフォルダを作る関数。既に同名のフォルダがあれば、連番を振る。
Public Sub MakeDirAddNumber(ByVal pth As String, ByVal dir As String)
Dim fso As Object: Set fso = CreateObject("Scripting.FileSystemObject")
Dim pthDir As String: pthDir = pth & "\" & dir
Dim fullNm As String: fullNm = pthDir
Dim i As Long: i = 1
Do While fso.FolderExists(fullNm)
i = i + 1
fullNm = pthDir & " (" & i & ")"
Loop
fso.CreateFolder fullNm
End Sub
これら2つの関数を組み合わせて、デスクトップ上に禁止文字でフォルダを10個作ってみる。
Private Sub Hoge()
Dim dir As String: dir = ReplaceStg("\/:*?""<>|") ' 全ての禁止文字をぶち込む
Dim wsh As Object: Set wsh = CreateObject("WScript.Shell")
Dim pth As String: pth = wsh.SpecialFolders("Desktop")
Dim i As Integer
For i = 1 To 10
MakeDirAddNumber pth, dir
Next
End Sub
おまけ
ダブルクォーテーションについて調べた。
ダブルクォーテーションには開始と終了の2種類あるらしい。(Qiitaのフォントだとわかりずれーな)
開始 [ “ ] 終了 [ ” ]
開始は、オタマジャクシの頭が下向き、終了は上向き、といった感じかな。
日本ではこの区別にあまり馴染みが無い。フォントにもよるが、半角は終了の方で表示される。全角であれば、両方ともメモ帳などで打てるが、VBAではエラーとなってしまう。
また、"
でエスケープしようとすると全角から半角に変化してしまう。
なので、前述のReplaceStg
関数のようにChr
関数で出力する。以下は16進数の文字コードをChr
関数に与えてみた。
Chr(&H22) ' ---> " 半角の終了ダブルクォーテーション
Chr(&H8167) ' ---> “ 全角の開始ダブルクォーテーション
Chr(&H8168) ' ---> ” 全角の終了ダブルクォーテーション
全角のダブルクォーテーションを両方とも打てると言ったが、開始の方は普通に変換しようとしても候補に出てこないぞ
Alt
を押しながらテンキーで0
1
4
7
と打ってAlt
を放す
ググったら早速答えを見つけた。(何でも知ってる、ぐーぐるさん)
しかし、テンキーが無いノートパソコンってどうやって打つんだろう。。。