感謝のプログラミング 10000時間

たどり着いた結果(さき)は、感謝でした。

Excel VBAでファイルパスの末尾をチェックして、セパレータを追加する

<スポンサーリンク>

1.イントロダクション

「C:\tmp」というフォルダに「hoge.txt」があるとする。
このhoge.txtを指定するには「C:\tmp\hoge.txt」と指定しなければいけないんだけど、このとき、フォルダの末尾に「\」がちゃんと書いていないと、
「フォルダ」と「パス」が別々に指定されていたときに、ファイルをちゃんと見つけることができない。

具体的には、このような場合だ。
f:id:sho322:20140115201456j:plain

フォルダとファイルが別セルにあって、それぞれの値を利用して、ファイルを開きたいときなど。
セパレータをチェックする。

2.サンプル

以下のサンプルでは、フォルダの末尾が「\」であるかを確認して、「\」でなかった場合に「\」を追加している。

Option Explicit


Sub ファイルのパスを調べる()
    Dim orgFolderPath As String
    Dim fileName As String
    
    orgFolderPath = Cells(3, 2).Value
    fileName = Cells(4, 2).Value
    
    MsgBox ("BEFOER:" + orgFolderPath + fileName)
    
    orgFolderPath = addSeparator(orgFolderPath)
    'addSeparator (orgFolderPath)   これだとC:\tmphoge.txtとなる
    
    MsgBox ("AFTER:" + orgFolderPath + fileName)

End Sub

Function addSeparator(ByVal orgPath As String)
    Dim stringLength As Integer
    Dim endString As String
    
    endString = Right(orgPath, 1)
    If (endString <> "\") Then
        addSeparator = orgPath & "\"
    Else
        addSeparator = orgPath
    End If
End Function

3.デモ

実行結果はこのようになる。
f:id:sho322:20140115201506j:plain

f:id:sho322:20140115201515j:plain

4.補足

逆にセパレータを削除するには以下のような関数を使うといい。

Function removeSeparator(ByVal orgPath As String)
    Dim stringLength As Integer
    Dim endString As String
    Dim cutPoint As Integer
    
    removeSeparator = orgPath
    stringLength = Len(orgPath)
    cutPoint = stringLength - 1
    endString = Right(orgPath, 1)
    
    
    If (endString = "\") Then
        removeSeparator = Left(orgPath, cutPoint)
    End If

End Function

5.参考

Excel VBA 逆引き辞典パーフェクト 2013/2010/2007/2003対応

Excel VBA 逆引き辞典パーフェクト 2013/2010/2007/2003対応