[リストへもどる]
一括表示

投稿時間:2002/08/17(Sat) 16:38
投稿者名:130
URL :
タイトル:
ファイル名習得について
つまらないことをお聞きしてすいません。
CSVファイルのシート名を変更できず、
ファイル名がシート名になってしまうので
CSVファイルをVBで読み込むとき、
worksheet名をファイル名、例えばbook2.xlsのbook2
だけをstringでとりたいのですが
パスなどが色々入ってしまってうまくとりだせません。
なにかうまい方法はありませんか?

投稿時間:2002/08/17(Sat) 19:16
投稿者名:nobu
Eメール:
URL :
タイトル:
Re: ファイル名習得について
> CSVファイルをVBで読み込むとき、
> worksheet名をファイル名、例えばbook2.xlsのbook2
> だけをstringでとりたいのですが
> パスなどが色々入ってしまってうまくとりだせません。
> なにかうまい方法はありませんか?

単にVBでフルパスからファイル名の拡張子を除いた部分を取得するなら
下記でも出来ます。 但し全角が含まれる時はそれなりの処理が必要です。

Dim a As String
Dim b As String
Dim fp1 As Integer
Dim fp2 As Integer

a = "c:\excel\book2.xls"

fp1 = InStrRev(a, "\")
fp2 = InStr(a, ".")

b = Mid(a, fp1 + 1, fp2 - fp1)

投稿時間:2002/08/17(Sat) 19:31
投稿者名:NAO★
Eメール:
URL :
タイトル:
Re^2: ファイル名習得について
あう。ごはん食べてる間に先越された。(^^;

> 下記でも出来ます。 但し全角が含まれる時はそれなりの処理が必要です。

VBの場合は文字列はUnicodeなので全角かどうかの考慮はしなくても良いのでは?

投稿時間:2002/08/17(Sat) 19:26
投稿者名:NAO★
Eメール:
URL :
タイトル:
Re: ファイル名習得について
drive名:\パス名\パス名\...\ファイル名.拡張子
               ^a         ^b
考え方
1.パス区切り文字(\)を文字列の最後から探す (aの位置が求められます)
2.拡張し区切り文字(.)を文字列の最後から探す (bの位置が求められます)
3. a+1〜b-1までがファイル名

投稿時間:2002/08/17(Sat) 23:14
投稿者名:Say
Eメール:
URL :
タイトル:
Re: ファイル名習得について
別解
FileSystemObjectオブジェクトのGetFileNameメソッドで
ファイル名を取得し、「.」をデリミタとしてSplitし、
取得した配列のUboundが1以下なら要素0が拡張子なしFile名
2以上なら要素0から要素Ubound-1までをデリミタなしで
Joinしたものが拡張子なしFile名です。

別解2
PathStripPathとPathRemoveExtensionを使います。

'パスからファイル名部分を取り出すAPI
Private Declare Sub PathStripPath Lib "SHLWAPI.DLL" Alias "PathStripPathA"
; _
                    (ByVal strPath As String)
'パスから拡張子を取り除くAPI
Private Declare Sub PathRemoveExtension Lib "SHLWAPI.DLL" Alias "PathRemoveExt
ensionA" _
                    (ByVal strPath As String)
Private Sub Command1_Click()
    Dim strPath As String
    strPath = "C:\WINDOWS\花見.bmp"
    Call PathStripPath(strPath)
    Call PathRemoveExtension(strPath)
    MsgBox strPath
End Sub

投稿時間:2002/08/18(Sun) 15:05
投稿者名:MS
URL :
タイトル:
Re^2: ファイル名習得について
> 別解
> FileSystemObjectオブジェクトのGetFileNameメソッドで

GetBaseNameメソッドで一気の方が宜しいかと。

> 別解2
> PathStripPathとPathRemoveExtensionを使います。

文字列の後ろに付いたゴミ(vbNullChar以降)を捨てた方が宜しいかと。