マクロを使用してExcelで試しましたが、私は私の正確な要求を得ることができません。Excelでフォルダ名を取得する方法は?
例:カテゴリはフォルダ名です。このカテゴリーの中に、私はこのAAA ExcelでをEEEするために取得する方法 AAA BBB CCC DDD EEE
のような多くのフォルダを持っています。
マクロを使用してExcelで試しましたが、私は私の正確な要求を得ることができません。Excelでフォルダ名を取得する方法は?
例:カテゴリはフォルダ名です。このカテゴリーの中に、私はこのAAA ExcelでをEEEするために取得する方法 AAA BBB CCC DDD EEE
のような多くのフォルダを持っています。
このコードは、例えばC(セルA1で定義されたパス内のすべてのフォルダの名前を取得します:)、列Bに入れ:
Sub GetChildFolders()
Dim fso, categoryFolder, subFolder As Object
Dim i As Integer
Set fso = CreateObject("Scripting.FileSystemObject")
Set categoryFolder = fso.GetFolder(Cells(1, 1).Value)
i = 1
For Each subFolder In categoryFolder.subfolders
Cells(i, 2) = subFolder.Name
i = i + 1
Next subFolder
End Sub
Alterantively、あなたは返す新しい式を作成することができますコンマは、フォルダを区切りリスト: (新しい式を作成するには、から新しいモジュールを追加するVBAのウィンドウでメニューを挿入)
Function GetChildFoldersList(ByVal path As String)
Dim fso, categoryFolder, subFolder As Object
Set fso = CreateObject("Scripting.FileSystemObject")
Set categoryFolder = fso.GetFolder(path)
For Each subFolder In categoryFolder.subfolders
GetChildFoldersList = GetChildFoldersList + subFolder.Name + ", "
Next subFolder
If GetChildFoldersList > 0 Then
GetChildFoldersList = Left(GetChildFoldersList, Len(GetChildFoldersList) - 2)
Else
GetChildFoldersList = "Folder is Empty!"
End If
End Function
** Microsoft Scripting Runtime **(**ツール - >参照... **)への参照を追加し、 'Dim fso As New Scripting.FileSystemObject'と書くことができます。 –
'fso'と' categoryFolder'は 'Variant'とタイプされていることに注意してください。それらが 'Object'として型付けされるためには、各変数に対して' As Object'を繰り返す必要があります: 'Dim fso As Object、categoryFolder As Object、subFolder As Object'。 –
T彼は適切に範囲を扱います。
サブフォルダがアルファベット順にフォルダを返すとは限りません。 (documentationにそのようなことは言及されていません)。
'Add a reference to 'Microsoft Scripting Runtime' (Tools -> References...)
Function ChildFolders(path As String) As String
Dim fso As New Scripting.FileSystemObject
Dim fldr As Scripting.Folder
Set fldr = fso.GetFolder(path)
Dim minFolder As String, maxFolder As String
minFolder = ""
maxFolder = ""
Dim x As folder
For Each x In fldr.SubFolders
If x.Name < minFolder Or minFolder = "" Then
minFolder = x.Name
ElseIf x.Name > maxFolder Then
maxFolder = x.Name
End If
Next
Select Case True
Case minFolder = "" And maxFolder = ""
ChildFolders = "(No folders)"
Case maxFolder = ""
ChildFolders = minFolder
Case Else
ChildFolders = minFolder & " to " & maxFolder
End Select
End Function
これにはDir()を使用できます。 –
フォルダをスキップした場合はどうなりますか? 'AAA'、' BBB'、 'DDD'、' EEE'? –