
リストボックスにフォルダ名を表示させるマクロを作成しました。
すると、フォルダ名の他にExcelファイルも表示されてしまいます。
下記マクロの’ファイルが見つからなくなるまで繰り返す に「該当の
Excelファイル名」を入れれば表示されなくなることは分かるのですが、該当のExcelファイル名が固定とは限らないので、「Excelファイル(.xlsm)ならどのようなファイル名であっても表示させない」といったようにしたいです。
どのようにすれば良いかご教授いただけないでしょうか?
作成したマクロ↓
Private Sub UserForm_Initialize()
Dim S_folderPath As String '該当のフォルダ=このブックと同じフォルダ
Dim FileName As String
Me.TextBox1 = ThisWorkbook.Path & "\"
S_folderPath = Me.TextBox1.Text
UserForm1.Caption = "フォルダ名を選択して下さい"
'ファイル名(フォルダ名)の取得
FolderName = Dir(S_folderPath, vbDirectory) '←リストボックスに表示させるフォルダ名
'ファイルが見つからなくなるまで繰り返す
Do While FolderName <> ""
If FolderName <> "." And FolderName <> ".." Then
ListBox1.AddItem FolderName
End If
FolderName = Dir()
Loop
End Sub
No.3ベストアンサー
- 回答日時:
>LCase(Right(FolderName, 5))
FolderNameの右側5桁が".xlsm"であるかを判定します。
FolderNameが"?????.xlsm"であれば、この条件にマッチします。(?は任意の文字)
但し、FolderNameが"?????.XLSM"のケースもマッチさせる必要があります。
まず、FolderNameの右側5文字を取り出します。
Right(FolderName, 5)がそれになります。
次に、その文字を強制的に小文字に変換します。(.XLSMは.xlsmに変換される)
LCase(対象となる文字)がそれになります。
そうすると、xlsmもXLSMも処理したことになります。
これは
dim name1 as String
dim name2 as String
name1 = Right(FolderName,5,1)
name2 = Lcase(name1)
if If FolderName <> "." And FolderName <> ".." And name2 <> ".xlsm" Then
としても同じ結果になります。
迅速かつとても分かりやすい回答をありがとうございます。
このようなLCase関数の使い方は初めてでしたので、参考になりました。
こちらも今後のコード作成に利用したいと思います。
本当にありがとうございました!!
No.2
- 回答日時:
以下のようにしてください。
If FolderName <> "." And FolderName <> ".." And LCase(Right(FolderName, 5)) <> ".xlsm" Then
FileSystemObjectを使用すると、指定フォルダ内のすべてのサブフォルダ
を簡単に取得できます。(.とか..とか、及び他のファイルを最初から除いて取得できますので、提示された例のようにそれらをはじく必要がありません)
以下サンプルです。
s_folderpathにあなたが取得したい指定フォルダを記述してください。
イミデイとウインドウに結果が表示されます。
Public Sub 指定フォルダ内の全サブフォルダ取得()
Dim wFSO As Object
Dim wfolder As Object
Dim wfolders As Object
Dim disp_folder As Object
Dim s_folderpath As String
Set wFSO = CreateObject("Scripting.FileSystemObject")
s_folderpath = "d:\goo\excel\goo番外"
Set wfolder = wFSO.GetFolder(s_folderpath)
Set wfolders = wfolder.SubFolders
For Each disp_folder In wfolders
Debug.Print disp_folder.name
Next
End Sub
回答ありがとうございます。
FileSystemObjectを用いれば指定しないで済むのでよさそうですね。そちらの方法も試してみます。
また、LCase(Right(FolderName, 5))はどのような意味か教えていただくことはできますでしょうか?インターネットで検索しましたが、回答が得られなかったので気になっています。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
exclude xcopy 除外フォルダ指...
-
エクセルのデータをメモ帳に貼...
-
ファイル名と同名のフォルダを...
-
VBScript 再帰処理について
-
MinGWで正規表現(regex.h)がし...
-
デスクトップの画像をhtmlに表...
-
EXPLORERで開いているフォルダ...
-
会社のネットワーク上のファイ...
-
ExcelVBAでフォルダへのハイパ...
-
Excelvbaでブックをコピー名前...
-
Windows10でコマンドプロンプト...
-
指定フォルダの絶対パス取得
-
ActiveX EXE内でのCurDir関数の...
-
クラウドにあるフォルダを共有...
-
ファイルとフォルダのどちらも...
-
Downloaded Program Filesはど...
-
エクセルのマクロについて教え...
-
VBプロジェクトでのフォルダ構...
-
マクロでネットワークドライブ...
-
excel VBA Dirにて検索したフォ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Windows10でコマンドプロンプト...
-
VBA 最新のフォルダ取得
-
デスクトップの画像をhtmlに表...
-
ファイル名と同名のフォルダを...
-
会社のネットワーク上のファイ...
-
ExcelのVBAでフォルダ指定がで...
-
Excelで指定したフォルダに保存...
-
VBA フォルダの複数選択ができない
-
【マクロ】ファイル名の日付に...
-
VB.NRT FolderBrowserDialogを...
-
【マクロ】フォルダにファイル...
-
ThisWorkbookがあるフォルダ更...
-
ディレクトリ名変更してコピー...
-
(C#)フォルダを指定するダイ...
-
VB6で7-ZIPのAPIを使用した圧縮...
-
VBプロジェクトでのフォルダ構...
-
パス名に2バイト文字(マルチバ...
-
Debug フォルダは消していいの?
-
フォルダにリンクを貼りたい
-
フォルダAから1つのファイルだ...
おすすめ情報