ファイル名に接頭辞・接尾辞を附加するFunction

ファイル名に接頭辞・接尾辞を附加するFunction

ファイル名変換ツールを自作したときに、ついでに作った。

ファイル名に接頭辞を付けるFunction

これは簡単。単純に先頭に文字列を追加するだけ。

リスト1 標準モジュール
Public Function getPrefixedFileName( _
                  ByVal fileName As String, _
                  ByVal prefixString As String) As String
  getPrefixedFileName = prefixString & fileName
End Function

説明するのもあほらしくなるような簡単なコード。

ファイル名に接尾辞を付けるFunction

これはちょっとめんどくさい。ファイル名の文字列から〈「.」(ドット)も含めた拡張子〉を除いた文字列に、接尾辞の文字列を附け加える。

スト2 標準モジュール
Public Function getSuffixedFileName( _
                  ByVal fileName As String, _
                  ByVal suffixString As String) As String
  Dim positionOfDot As Long
  positionOfDot = InStrRev(fileName, ".")    '……(1)'
  Dim nameString As String
  nameString = Left(fileName, positionOfDot - 1)    '……(2)'
  Dim extentionWithDot As String
  extentionWithDot = Replace(fileName, nameString, "")    '……(3)'
  getSuffixedFileName = nameString & suffixString & extentionWithDot
End Function

まず(1)の

positionOfDot = InStrRev(fileName, ".")

で、InStrRev関数を用いて、ファイル名文字列のケツから「.」(ドット)を探す。

InStrRev関数の返り値は、前から何文字目かを表す数値になるので注意。

これで、拡張子を表す「.」(ドット)の位置が分かる。

次に(2)の

nameString = Left(fileName, positionOfDot - 1)

では、先ほど求めた拡張子を表す「.」(ドット)の位置をもとに、Left関数で、
〈「.」(ドット)も含めた拡張子〉を除いた文字列
を切り出す。

例えば、「ち~んw.docx」というファイル名だとすると、まず

InStrRev("ち~んw.docx", ".")

が「5」を返すので、positionOfDotは「5」となる。

んで、

Left("ち~んw.docx", 5 - 1)

が「ち~んw」を返すので、nameStringは「ち~んw」になる、というわけ。

あと、(3)の

extentionWithDot = Replace(fileName, nameString, "")

で、Replace関数を用いて、元のファイル名のうち、〈「.」(ドット)も含めた拡張子〉を除いた文字列を「""」で置換することによって、〈「.」(ドット)も含めた拡張子〉を取り出す。

これはいろいろなやり方ができると思う。Right関数使うとか。

最後に、〈「.」(ドット)も含めた拡張子〉を除いた文字列、接尾辞、〈「.」(ドット)も含めた拡張子〉をつなぎ合わせておしまい。

使ってみる

イミディエイト・ウインドウ上で、getPrefixedFileNamegetSuffixedFileNameに、引数「ち~んw.docx」と「【プヒー!】」を渡してみる。

f:id:akashi_keirin:20180902182823j:plain

意図どおりの結果となった。

おわりに

まあ、一つのFunctionにまとめてしまって、引数で接頭辞か接尾辞かに分岐する方法もあると思う。