• ベストアンサー

(Excel)VBA ファイルパスからファイル名を求める

Excel97のVBAで  f-name = Application.GetOpenFilename() とするとf-nameにはオープンしたファイルのパスを含めたファイル名が代入されます。 これをそのまま  Workbooks(f-name).close とすると、パス部分が余分なのかエラーになります。 そこで、このf-nameからファイル名(ブック名)だけ切り出す方法があれば教えてください。 もしくはこのオープンからクローズまでの流れとして良いやり方があれば教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.2

Excel97の場合は、最後の『\』を探しにいく必要があると思います。下記は処理例です。 キャンセルした時のf-nameは別途処理してください。 Public Function myFileName(flName As String)   Dim L As Integer   For L = Len(flName) To 1 Step -1     If Mid(flName, L, 1) = "\" Then       myFileName = Right(flName, Len(flName) - L)       Exit For     End If   Next End Function

smatsuz
質問者

お礼

回答ありがとうございます。 ばっちり動きました。 元々UNIX屋なので(マクロの様に用意されていて)もっと簡単にできるかと思っていました。

その他の回答 (2)

  • wtnb_h
  • ベストアンサー率35% (14/40)
回答No.3

EXCEL2000でですが、GetOpenFilenameの後に、 Dim ファイル名 As String ファイル名 = Dir(CurDir() & "\*.*") とすると、選んだファイル名のみ、ファイル名に格納されました。 EXCEL97で出来るか判りませんが、試してみてはいかがでしょうか?

smatsuz
質問者

お礼

回答ありがとうございます。 残念ながらExcel97ではうまく行きませんでした。 でもなんとなくDir()とCurDir()の組み合わせでGetOpenFilename()の選択ファイルが認識できるとは思えないんですが......

  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.1

こんにちは。maruru01です。 以下の関数を作成しました。 参考になりますか。 では。 ' フルパスからファイル名を取り出す Public Function MakeFileName(fileName As String) As String   Dim z0 As Long   z0 = InStrRev(fileName, "\")   If z0 <> 0 Then     MakeFileName = Mid(fileName, z0 + 1)   Else     MakeFileName = fileName   End If End Function

smatsuz
質問者

お礼

回答ありがとうございます。 残念ながらInStrRev()がundefineになってしまします。 私の環境がおかしいか、Excel97にはないのかもしれませんね。

関連するQ&A