例えば、パスの文字列があったとして、"C:\visualBasic\mojiretu\0001.jpg"からファイル名の一部"0001"を取り出したいのですがどうしたらよいですか?
また、それにインクリメントして"0002"という文字列をつくりたいのですが。
自分は初心者なので正しいかどうかはわかりません。
勉強になると思ったので作ってみました。
おかしな点やここはこうした方が良い等ありましたら指摘してもらえるとうれしいです。
Private Sub Command1_Click()
Debug.Print hoge("c:\test\0001.test")
End Sub
Private Function hoge(filepath As String) As String
Dim strPath As String
Dim strTemp() As String
Dim Temp As String
Dim lngTemp As Long
Dim lnglen As Long
Dim zero As String
On Error GoTo moge
'\で区切る
strTemp = Split(filepath, "\")
'.で区切る
strTemp = Split(strTemp(UBound(strTemp)), ".")
'ファイル名(拡張子抜き)の長さ
lnglen = Len(strTemp(0))
'数字を足す
lngTemp = CLng(strTemp(0)) + 1
'0を数
Do Until lnglen = Len(zero)
zero = zero & "0"
Loop
'0追加
strTemp(0) = Right(zero & CStr(lngTemp), lnglen)
'拡張子結合
Temp = Join(strTemp, ".")
'パス分解
strTemp = Split(filepath, "\")
'ファイル名部分を変更
strTemp(UBound(strTemp)) = Temp
'結合し戻す
hoge = Join(strTemp, "\")
Exit Function
moge:
End Function
>lnglen = Len(strTemp(0))
>'数字を足す
>lngTemp = CLng(strTemp(0)) + 1
>'0を数
>Do Until lnglen = Len(zero)
> zero = zero & "0"
>Loop
>'0追加
>strTemp(0) = Right(zero & CStr(lngTemp), lnglen)
ここは数字4桁と決まっているなら
strTemp(0)=Format(Clng(strTemp(0)+1&,"0000")
とした方が簡単かもしれませんね
> "C:\visualBasic\mojiretu\0001.jpg"からファイル名の一部"0001"
> を取り出したいのですがどうしたらよいですか?
ファイル名の一部"0001"が、ファイルのベース名 (ファイル拡張子を除いたもの) なら、以下が簡単ですね。
http://www.microsoft.com/JAPAN/developer/library/script56/jsmthgetbasename.htm
>strTemp(0) = Right(zero & CStr(lngTemp), lnglen)
この場合は、"9999"の次は"0000"になり
> strTemp(0)=Format(Clng(strTemp(0)+1&,"0000")
この場合は、"9999"の次は"10000"になるので注意が必要です。
ファイルシステムオブジェクトを使うならこんな感じです。
Private Function IncrementFileName(strFileName As String) A String
Dim fso As Object
Dim strFolderName As String 'フォルダ名
Dim strBaseName As String '拡張子を除いたファイル名
Dim strExtensionName As String '拡張子
Set fso = CreateObject("Scripting.FileSystemObject")
strFolderName = fso.GetParentFolderName(strFileName)
strBaseName = fso.GetBaseName(strFileName)
strExtensionName = fso.GetExtensionName(strFileName)
'9999の次は10000になる
IncrementFileName = strFolderName & "\" & _
Format$(CLng(strBaseName) + 1, "0000") & "." & _
strExtensionName
Set fso = Nothing
End Function
皆さんありがとうございました。
使わせていただきます
皆さんありがとうございました。
使わせていただきます
ツイート | ![]() |