みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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

下記の様なマクロが有りますが、ここでファイル名のみ(拡張子無し)を
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) 'パス及びファイル名拡張子付き

投稿日時 - 2006-09-15 22:24:30

QNo.2409153

困ってます

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

こんばんは。

>ここでファイル名のみ(拡張子無し)を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

投稿日時 - 2006-09-16 00:14:10

お礼

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

投稿日時 - 2006-09-16 12:01:46

ANo.3

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.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 で検証

投稿日時 - 2006-09-15 23:38:13

お礼

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

投稿日時 - 2006-09-16 12:02:21

ANo.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の代替になります。

投稿日時 - 2006-09-15 22:44:25

お礼

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

投稿日時 - 2006-09-16 12:02:48

あなたにオススメの質問