0
0

More than 1 year has passed since last update.

【VBA小ネタ】ファイル名に使えない文字を回避する

Last updated at Posted at 2022-08-06

いまさらなので、深く考えない

ファイル名やフォルダ名に使えない文字は9つ。リネーム時にそれらの文字を入力しようとするとWindowsが教えてくれる。
ファイル名に使えない文字.png
使えないのは半角文字なので、以下の全角文字に変換する。

全9種類 1 2 3 4 5 6 7 8 9
全角文字

以下、超簡単な関数を作っておくと便利。

VBA
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個作ってみよう。
以下は指定したパスと名前で新しいフォルダを作る関数。既に同名のフォルダがあれば、連番を振る。

VBA
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個作ってみる。

VBA
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のフォントだとわかりずれーな:sweat_smile:

  開始 [ “ ]   終了 [ ” ]

開始は、オタマジャクシの頭が下向き、終了は上向き、といった感じかな。

日本ではこの区別にあまり馴染みが無い。フォントにもよるが、半角は終了の方で表示される。全角であれば、両方ともメモ帳などで打てるが、VBAではエラーとなってしまう。
image.png
また、"でエスケープしようとすると全角から半角に変化してしまう。
なので、前述のReplaceStg関数のようにChr関数で出力する。以下は16進数の文字コードをChr関数に与えてみた。

VBA
Chr(&H22)   ' --->   "    半角の終了ダブルクォーテーション 
Chr(&H8167) ' --->   “    全角の開始ダブルクォーテーション  
Chr(&H8168) ' --->   ”    全角の終了ダブルクォーテーション

全角のダブルクォーテーションを両方とも打てると言ったが、開始の方は普通に変換しようとしても候補に出てこないぞ:interrobang:

Altを押しながらテンキーで0 1 4 7と打ってAltを放す

ググったら早速答えを見つけた。(何でも知ってる、ぐーぐるさん:clap::clap_tone1::clap_tone2::clap_tone3:
しかし、テンキーが無いノートパソコンってどうやって打つんだろう。。。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0