2016-10-22 8 views
0

マクロを使用してExcelで試しましたが、私は私の正確な要求を得ることができません。Excelでフォルダ名を取得する方法は?

例:カテゴリはフォルダ名です。このカテゴリーの中に、私はこのAAA ExcelでをEEEするために取得する方法 AAA BBB CCC DDD EEE

のような多くのフォルダを持っています。

+1

これにはDir()を使用できます。 –

+0

フォルダをスキップした場合はどうなりますか? 'AAA'、' BBB'、 'DDD'、' EEE'? –

答えて

0

このコードは、例えば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 
+0

** Microsoft Scripting Runtime **(**ツール - >参照... **)への参照を追加し、 'Dim fso As New Scripting.FileSystemObject'と書くことができます。 –

+0

'fso'と' categoryFolder'は 'Variant'とタイプされていることに注意してください。それらが 'Object'として型付けされるためには、各変数に対して' As Object'を繰り返す必要があります: 'Dim fso As Object、categoryFolder As Object、subFolder As Object'。 –

0

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 
関連する問題