• ベストアンサー

エクセルマクロでファイル名のみ(拡張子無し)格納

下記の様なマクロが有りますが、ここでファイル名のみ(拡張子無し)を fairumeiに格納したいのですがどの様なコードを書いた方が良いのでしょうか。? (ファイル名の長さは全部違います、エクセル2000) どうか、宜しくお願いします。 Sub シート検索版() Dim myPName As String myPName = Application.GetOpenFilename("測定データ(*.xls;*.csv),*.xls;*.csv") If myPName = "False" Then Exit Sub Dim wb_New As Workbook Set wb_New = Workbooks.Add Dim myKAKUCHOSI As String Dim myPATHNAME As String Dim myLName As String Dim fairumei As String Dim wb As Workbook On Error GoTo mfinish fairumei = ここが分からない myPATHNAME = CurDir myLName = Dir(myPATHNAME & "\" & "*" & myKAKUCHOSI) 'パス及びファイル名拡張子付き

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

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんばんは。 >ここでファイル名のみ(拡張子無し)をfairumeiに格納したい ご質問のコードがさっぱり読めませんが、 単に、それだけで良いなら、難しいことを考えなくても、以下のようにすればよいだけなのですが。 '---------------------------------- Sub FileNameGet()  Dim myPName As String  Dim myLName As String  Dim fairumei As String  Dim fairumei2 As String  myPName = Application.GetOpenFilename("測定データ(*.xls;*.csv),*.xls;*.csv")  If myPName = "False" Then Exit Sub  'パス付き拡張子なし  myLName = Mid$(myPName, 1, InStrRev(myPName, ".") - 1)  'パスなし拡張子あり  fairumei = Mid$(myPName, InStrRev(myPName, "\") + 1)  'パスなし拡張子なし  fairumei2 = Mid$(myPName, InStrRev(myPName, "\") + 1, InStrRev(myPName, ".") - InStrRev(myPName, "\") - 1)    MsgBox "パス付き拡張子なし: " & myLName & vbCrLf & _      "パスなし拡張子あり: " & fairumei & vbCrLf & _      "パスなし拡張子なし: " & fairumei2 & vbCrLf End Sub

hibohibo
質問者

お礼

回答ありがとう御座います。 急いでいたもので過去のマクロを多少修正したのもでした。(^^ゞ 月曜日に確認してみます。

すると、全ての回答が全文表示されます。

その他の回答 (2)

  • nicotinism
  • ベストアンサー率70% (1019/1452)
回答No.2

変数宣言はなるべくまとめて置かれたほうが分かりやすいし間違いが無いと思います。 レスは手抜きです。整形して下さい。 また、変数の宣言を強制するようにした方が誤りが無いように思います モジュールの先頭に、Option Explicit を追加(アップされて無いだけでしたらご容赦) で、 Dim myPName As String myPName = Application.GetOpenFilename("測定データ(*.xls;*.csv),*.xls;*.csv") If myPName = "False" Then Exit Sub Dim wb_New As Workbook Set wb_New = Workbooks.Add Dim myKAKUCHOSI As String Dim myPATHNAME As String Dim myLName As String Dim fairumei As String Dim wb As Workbook 'On Error GoTo mfinish '-----------------------------------------追加 Dim fairuname As String Dim objFso As Object Set objFso = CreateObject("scripting.FilesystemObject") fairumei = objFso.getbasename(myPName) MsgBox fairumei '-----------------------------------------追加ここまで 'これで拡張子抜きのファイル名が取得できると思います。 '拡張子が4桁でも2桁でも多分大丈夫かな? 'こんな意地悪なファイル名、あれれ.xlt.xls → あれれ.xlt がファイル名となります。 'WindowsXP Pro Sp2 + Excel 2002 Sp3 で検証

hibohibo
質問者

お礼

回答ありがとう御座います。 月曜日に確認してみます。

すると、全ての回答が全文表示されます。
  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.1

指定の文字で区切られている文字列を分解する関数「SPLIT」があります。 例はmyPName="C:\Test\File.txt" としますよ。 Dim strArrey() as string Dim nArrey as long strArrey() = split(myPName, ".") nArrey=ubound(strArrey()) ここまでの結果で、nArrey=1です。 strArrey()は2個の要素を持ちます。 strArrey(0)="C:\Test\File" strArrey(1)="txt" myPNameが"C:\Test\File.csv.txt" だったら? ご心配無く。nArrey=2です。 strArrey()は3個の要素を持ちます。 strArrey(0)="C:\Test\File" strArrey(1)="csv" strArrey(2)="txt" つまりstrArrey(nArrey)に拡張子のみが入ります。 で、拡張子のみを何か変数に保存しておく。 同じこと(SPLIT)を"\"で行えば、配列strArrey()の最終要素がファイル名を指します。 あとは適当に調整してみてください。 あと、SPLITの逆はJOINです。こちらも研究してみてください。 replaceの代替になります。

hibohibo
質問者

お礼

回答ありがとう御座います。 月曜日に確認してみます。

すると、全ての回答が全文表示されます。

関連するQ&A