
リストボックスにフォルダ名を表示させるマクロを作成しました。
すると、フォルダ名の他に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も見ています
-
先着1,000名様に1,000円分もらえる!
教えて!gooから感謝をこめて電子書籍1,000円分プレゼント
-
VBAで数値を左から蓄積していきたいのですが、下記コードを直すとしたらどうすればいいか教えて下さい。
Visual Basic(VBA)
-
Loopの強制終了 マクロ Excel VBA
Visual Basic(VBA)
-
VBA for next
Visual Basic(VBA)
-
4
for Each の入れ子で、できそうなのですが。。。。
Visual Basic(VBA)
-
5
Excelの課題で「九九表の気数列だけが表示されるボタンを作れ」という問題があります。 privat
Visual Basic(VBA)
-
6
Excel VBA マクロ ユーザーフォーム
Visual Basic(VBA)
-
7
Excel VBA マクロ 選択したフォルダを取り込み
Visual Basic(VBA)
-
8
エクセル マクロ ループ処理
Excel(エクセル)
-
9
For Eachを使わないVBA マクロ
Visual Basic(VBA)
-
10
VBA 数字をフィルターで表示
Visual Basic(VBA)
-
11
VBA構文でコンパイルエラーの原因を教えてください。
Visual Basic(VBA)
-
12
CSVファイルのデータを2次元配列で読み込む際、どんな手段を取りますか?
Visual Basic(VBA)
-
13
Excel VBA に関する質問です。
Visual Basic(VBA)
-
14
vba 進捗状況
Visual Basic(VBA)
-
15
VBA構文でコンパイルエラーの原因を教えてください。改1
Visual Basic(VBA)
-
16
Excelに詳しい方教えて下さい。この2つの問題が分かりません。難易度が高い為か他のサイトで質問して
Excel(エクセル)
-
17
VBA 血液型に連番をふる
Visual Basic(VBA)
-
18
VBA コードを実行すると画面が真っ白になる
Visual Basic(VBA)
-
19
【VBA】条件に一致しない行を削除したい
Visual Basic(VBA)
-
20
ExcelのVBAプログラム作成について
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
人気Q&Aランキング
-
4
Windows10でコマンドプロンプト...
-
5
多量のファイルをフォルダに自...
-
6
ファイル名と同名のフォルダを...
-
7
ファイル名に特定の文字列を含...
-
8
Excel VBA マクロ フォルダ名を...
-
9
デスクトップの画像をhtmlに表...
-
10
C言語でのフォルダ作成
-
11
Javaでフォルダ複数階層のZipフ...
-
12
指定したフォルダを開く
-
13
全サブフォルダのファイルの取得
-
14
フォルダを開くマクロ
-
15
ExcelVBAでフォルダへのハイパ...
-
16
日付のフォルダを自動で作成し...
-
17
マクロでネットワークドライブ...
-
18
エクセル 一つ上の階層の別フ...
-
19
GetPrivateProfileString関数
-
20
vbsで選択ダイアログを表示した...
おすすめ情報