Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


3094 / 13646 ツリー ←次へ | 前へ→

【64288】フォルダ名の集計 初心者 10/1/30(土) 11:45 質問[未読]
【64289】Re:フォルダ名の集計 かみちゃん 10/1/30(土) 11:55 質問[未読]
【64291】Re:フォルダ名の集計 初心者 10/1/30(土) 13:05 質問[未読]
【64292】Re:フォルダ名の集計 かみちゃん 10/1/30(土) 13:27 発言[未読]
【64293】Re:フォルダ名の集計 初心者 10/1/30(土) 13:35 質問[未読]
【64295】Re:フォルダ名の集計 かみちゃん 10/1/30(土) 14:00 発言[未読]
【64296】Re:フォルダ名の集計 初心者 10/1/30(土) 14:20 質問[未読]
【64298】Re:フォルダ名の集計 かみちゃん 10/1/30(土) 14:27 発言[未読]
【64297】Re:フォルダ名の集計 かみちゃん 10/1/30(土) 14:23 発言[未読]
【64299】Re:フォルダ名の集計 初心者 10/1/30(土) 14:40 質問[未読]
【64300】Re:フォルダ名の集計 かみちゃん 10/1/30(土) 14:45 発言[未読]
【64301】Re:フォルダ名の集計 初心者 10/1/30(土) 15:24 質問[未読]
【64302】Re:フォルダ名の集計 かみちゃん 10/1/30(土) 15:31 発言[未読]
【64303】Re:フォルダ名の集計 初心者 10/1/30(土) 15:38 質問[未読]
【64304】Re:フォルダ名の集計 初心者 10/1/30(土) 15:49 質問[未読]
【64305】Re:フォルダ名の集計 かみちゃん 10/1/30(土) 16:03 発言[未読]
【64306】Re:フォルダ名の集計 初心者 10/1/30(土) 16:15 質問[未読]
【64307】Re:フォルダ名の集計 初心者 10/1/30(土) 16:21 質問[未読]
【64308】Re:フォルダ名の集計 かみちゃん 10/1/30(土) 16:34 発言[未読]
【64310】Re:フォルダ名の集計 初心者 10/1/30(土) 16:56 質問[未読]
【64317】Re:フォルダ名の集計 かみちゃん 10/1/30(土) 17:17 発言[未読]
【64323】Re:フォルダ名の集計 初心者 10/1/30(土) 17:42 質問[未読]
【64324】Re:フォルダ名の集計 かみちゃん 10/1/30(土) 17:48 発言[未読]
【64326】Re:フォルダ名の集計 初心者 10/1/30(土) 18:14 質問[未読]
【64328】Re:フォルダ名の集計 かみちゃん 10/1/30(土) 18:25 発言[未読]
【64332】Re:フォルダ名の集計 初心者 10/1/30(土) 20:27 質問[未読]
【64333】Re:フォルダ名の集計 かみちゃん 10/1/30(土) 20:37 発言[未読]
【64334】Re:フォルダ名の集計 初心者 10/1/30(土) 20:46 お礼[未読]
【64313】Re:フォルダ名の集計 Abyss 10/1/30(土) 16:58 発言[未読]
【64315】Re:フォルダ名の集計 かみちゃん 10/1/30(土) 17:06 発言[未読]
【64316】Re:フォルダ名の集計 Abyss 10/1/30(土) 17:11 発言[未読]

【64288】フォルダ名の集計
質問  初心者  - 10/1/30(土) 11:45 -

引用なし
パスワード
   いつもお世話になっています。


PCのとあるフォルダ(自分で選択するため、その時により、色々変更します)にある、全てのフォルダ名(1コの時もあれば、100コ以上の時もあります)あつめて
エクセルのシートに1行ずつ書いていく。という
プログラムを作成したいのですが、どうすればいいのでしょうか。


よろしくご指導お願いいたします。

【64289】Re:フォルダ名の集計
質問  かみちゃん  - 10/1/30(土) 11:55 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>PCのとあるフォルダ(自分で選択するため、その時により、色々変更します)にある、全てのフォルダ名(1コの時もあれば、100コ以上の時もあります)あつめて
>エクセルのシートに1行ずつ書いていく。という
>プログラムを作成したい

「フォルダ名△一覧△VBA」(△は半角スペース)
でネット検索すると、いろいろと出てきます。

http://www.k1simplify.com/vba/tipsleaf/leaf280.html
http://www.asahi-net.or.jp/~ef2o-inue/vba_o/sub05_110_080.html

上記は、ファイル名一覧ですが、ヒントになると思います。

【64291】Re:フォルダ名の集計
質問  初心者  - 10/1/30(土) 13:05 -

引用なし
パスワード
   かみちゃんさん、ありがとうございます。

Sub test1()
  Application.ScreenUpdating = False
  Dim wb As Workbook, ws As Worksheet, i As Long, myFile
  myFile = Application.GetOpenFilename _
        (filefilter:="サンプルファイル,*.xls", _
        Title:="ファイルを選択", MultiSelect:=True)
  If TypeName(myFile) = "Boolean" Then Exit Sub
  For i = 1 To UBound(myFile)
   Sheets(1).Select
   Range("A65536").End(xlUp).Activate
   ActiveCell.Value = myFile
  Next i
  Application.ScreenUpdating = True
End Sub

こういう感じで作ったのですが、
問題点
フォルダの名前を取得できない。
そんざいしているファイルを全て選択できない。
名前だけを取得できない。


という問題解決方法がさっぱりわからず困っています。。

【64292】Re:フォルダ名の集計
発言  かみちゃん  - 10/1/30(土) 13:27 -

引用なし
パスワード
   こんにちは。かみちゃん です。

> そんざいしているファイルを全て選択できない。
> 名前だけを取得できない。

「ファイルを全て選択できない」とはどういう意味ですか?
提示されたコードは、「ファイルを開く」ダイアログで選択したファイル名のフルパスを表示するだけです。

したいことは、指定されたフォルダの中にあるフォルダ名の一覧なのではないでしょうか?
なお、一覧で取得されたフォルダの中にあるフォルダ(サブフォルダ)はどうしたいのでしょうか?

また、紹介したURLは、参考になりませんでしたでしょうか?

【64293】Re:フォルダ名の集計
質問  初心者  - 10/1/30(土) 13:35 -

引用なし
パスワード
   ▼かみちゃん さん:

存在しているファイルというのは、フォルダの中にいくつかさらにフォルダがあり、それらを順番に名前を取得していきたいと思っています。

名前は、フォルダの名前だけ取得したいのですが、C\←こういうのまで引いてしまうので、困っています。

ご紹介いただいたHPみましたが、コードの意味が勉強不足で、変更の仕方がわからず困っております。

【64295】Re:フォルダ名の集計
発言  かみちゃん E-MAIL  - 10/1/30(土) 14:00 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>ご紹介いただいたHPみましたが、コードの意味が勉強不足で、変更の仕方がわからず困っております。

どこまで試して、困っているのですか?
試した内容が見えません。
初心者さんから提示されたコードは、まったく違うものです。

再度、紹介したURL等を確認して、ファイル名一覧が取得できることを確認してみてください。
そうすると、フォルダ名一覧にすることは割りと簡単です。

それとも、難しいコードをサクッと紹介したら、いいのですか?

まずは、自分で調べてみるという努力をしていただきたいと思っています。
そのほうが必ず、チカラになりますから、がんばっていただきたいのです。

【64296】Re:フォルダ名の集計
質問  初心者  - 10/1/30(土) 14:20 -

引用なし
パスワード
   いやな気にさせてすいません。

以前他のことで教えていただいたコードがあり、それを応用できないかとおもって
それを使用していました。

HTTP://www.asahi-net.or.jp/~ef2o-inue/vba_o/sub05_110_080.html
をみると、やりたいことは何となく似ていたのですが、
このコードの中身を見たら、コードが大量にあり、まったく理解できませんでした。

やはり、このような高度なコードが必要になるのでしょうか

【64297】Re:フォルダ名の集計
発言  かみちゃん E-MAIL  - 10/1/30(土) 14:23 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>再度、紹介したURL等を確認して、ファイル名一覧が取得できることを確認してみてください。
>そうすると、フォルダ名一覧にすることは割りと簡単です。

http://www.k1simplify.com/vba/tipsleaf/leaf280.html
の内容を確認していただいて、
そこに載っている example13 をダウンロードして確認してみてください。

そうすると、指定されたフォルダ配下にある、ファイル名をすべて取得されます。
まずは、その動作を確認してください。

確認できれば、そのコードのうち、

  For Each File_List In File_Collection
    Cells(cnt, Pop + 1) = File_List.Name
    cnt = cnt + 1
  Next

というコードと、

  Pop = Pop + 1



  Pop = Pop - 1

を削除すれば、期待していることはできるのではないかと思います。

【64298】Re:フォルダ名の集計
発言  かみちゃん E-MAIL  - 10/1/30(土) 14:27 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>いやな気にさせてすいません。

まず、ご理解いただきたいのが、嫌なキモチにはなっていません。
嫌だったら、コメントしなければいいことなので・・・

>HTTP://www.asahi-net.or.jp/~ef2o-inue/vba_o/sub05_110_080.html
>をみると、やりたいことは何となく似ていたのですが、
>このコードの中身を見たら、コードが大量にあり、まったく理解できませんでした。
>
>やはり、このような高度なコードが必要になるのでしょうか

再帰呼び出しという手法が理解できれば、高度なコードは必要ないのですが、
フォルダ名/ファイル名一覧を作成したいという要件は、割とあって、たくさん
紹介されています。

さきほど、【64297】に参照できそうなURLのご紹介とその修正方法を書かせていただきました。
参考になれば・・・

【64299】Re:フォルダ名の集計
質問  初心者  - 10/1/30(土) 14:40 -

引用なし
パスワード
   かみちゃんさん、色々とご迷惑おかけします。

このHPのダウンロードをすると、見たことのないファイルなのですが
開くにはどうしたらいいんでしょうか。。。

【64300】Re:フォルダ名の集計
発言  かみちゃん E-MAIL  - 10/1/30(土) 14:45 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>このHPのダウンロードをすると、見たことのないファイルなのですが
>開くにはどうしたらいいんでしょうか。。。

LZH圧縮ファイルなので、LZH形式のファイルを解凍できるツールが必要です。

私のHPではないので、そのまま引用するのは、気がひけるのですが・・・
以下のコードになっています。

Option Explicit
Public cnt, Pop As Integer

Sub test3()
 
  Dim FolderSpec As String
  
  FolderSpec = FolderPath
  
  cnt = 1
  Pop = 1
  
  If FolderSpec <> "" Then
    ListUp FolderSpec
  End If
 
End Sub
Sub ListUp(FolderSpec)

  Dim File_Collection As Object
  Dim File_List As Variant
  Dim Folder_Collection As Object
  Dim Folder_List As Variant
  
  Set File_Collection = CreateObject("Scripting.FileSystemObject").GetFolder(FolderSpec).Files
  
  'Foldor の名前をセルに入力
  Cells(cnt, Pop) = FolderSpec
  cnt = cnt + 1

  For Each File_List In File_Collection

    Cells(cnt, Pop + 1) = File_List.Name
    cnt = cnt + 1
  Next
  
  Set Folder_Collection = CreateObject("Scripting.FileSystemObject").GetFolder(FolderSpec).SubFolders
  
  For Each Folder_List In Folder_Collection
    Pop = Pop + 1
    ListUp FolderSpec & "\" & Folder_List.Name
  Next
  Pop = Pop - 1
End Sub

Function FolderPath() As String
  
  Dim Shell As Object
  
  Set Shell = CreateObject("Shell.Application").BrowseForFolder(0, "フォルダを選択してください", 0, "c:\")
  
  If Shell Is Nothing Then
    FolderPath = ""
  Else
    FolderPath = Shell.Items.Item.Path
  End If

End Function

【64301】Re:フォルダ名の集計
質問  初心者  - 10/1/30(土) 15:24 -

引用なし
パスワード
   私のPCにその圧縮フォルダを解凍するものがなかったようで、
かみちゃんさんに載せていただいたコードを、ご指導のように、
変更すると期待しているものができました。

ひとつ要望とすれば、
ファイルを記入した際、
例)C:\\ファイル名
例)C:\ファイル名\AlbumArtSmall.jpg.files

のように拾ってくるのですが、これを
ファイル名だけ。という風に変更するにはどう変更すればいいのでしょうか。


Option Explicit
Public cnt, Pop As Integer

Sub test3()

  Dim FolderSpec As String
 
  FolderSpec = FolderPath
 
  cnt = 1
  Pop = 1
 
  If FolderSpec <> "" Then
    ListUp FolderSpec
  End If

End Sub
Sub ListUp(FolderSpec)

  Dim File_Collection As Object
  Dim File_List As Variant
  Dim Folder_Collection As Object
  Dim Folder_List As Variant
 
  Set File_Collection = CreateObject("Scripting.FileSystemObject").GetFolder(FolderSpec).Files
 
  'Foldor の名前をセルに入力
  Cells(cnt, Pop) = FolderSpec
  cnt = cnt + 1

  Set Folder_Collection = CreateObject("Scripting.FileSystemObject").GetFolder(FolderSpec).SubFolders
 
  For Each Folder_List In Folder_Collection
    ListUp FolderSpec & "\" & Folder_List.Name
  Next
End Sub

Function FolderPath() As String
 
  Dim Shell As Object
 
  Set Shell = CreateObject("Shell.Application").BrowseForFolder(0, "フォルダを選択してください", 0, "")
 
 
  If Shell Is Nothing Then
    FolderPath = ""
  Else
    FolderPath = Shell.Items.Item.Path
  End If

End Function

【64302】Re:フォルダ名の集計
発言  かみちゃん E-MAIL  - 10/1/30(土) 15:31 -

引用なし
パスワード
   こんにちは。かみちゃん です。

したいことがわからないのですが・・・

>ファイルを記入した際、
>例)C:\\ファイル名
>例)C:\ファイル名\AlbumArtSmall.jpg.files
>
>のように拾ってくるのですが、これを
>ファイル名だけ。という風に変更するにはどう変更すればいいのでしょうか。

そのようなものを拾って何に使うのですか?

C:\MyDocuments\Test1\aaa.xls
C:\MyDocuments\Test1\Test11\bbb.xls
C:\MyDocuments\Test1\Test11\ccc.xls
C:\MyDocuments\Test1\Test12\ddd.xls

などというファイルがあった場合、
C:\MyDocuments
を指定すると

C:\MyDocuments
C:\MyDocuments
C:\MyDocuments
C:\MyDocuments

という結果になればいいのですか?

【64303】Re:フォルダ名の集計
質問  初心者  - 10/1/30(土) 15:38 -

引用なし
パスワード
   ▼かみちゃん さん:

>C:\MyDocuments\Test1\aaa.xls
>C:\MyDocuments\Test1\Test11\bbb.xls
>C:\MyDocuments\Test1\Test11\ccc.xls
>C:\MyDocuments\Test1\Test12\ddd.xls
>
>などというファイルがあった場合、
>C:\MyDocuments
>を指定すると
>
aaa
bbb
ccc
ddd

というかたちにしたいと思っています。

というのも、音楽データがあり、それらの音楽データの曲名が
フォルダ名として存在しているので、その音楽曲名だけを
リストで表示したいのですが、いちいち曲名を
フォルダをみて入力するのが
手間だったので、このコードを書きたいと思っております。

なので、その曲名だけをピックアップしたいのですが
可能でしょうか。

【64304】Re:フォルダ名の集計
質問  初心者  - 10/1/30(土) 15:49 -

引用なし
パスワード
   ▼かみちゃん さん:

Option Explicit
Public cnt, Pop As Integer

Sub test3()

  Dim FolderSpec As String
 
  FolderSpec = FolderPath
 
  cnt = 1
  Pop = 1
 
  If FolderSpec <> "" Then
    ListUp FolderSpec
  End If

End Sub
Sub ListUp(FolderSpec)

  Dim File_Collection As Object
  Dim File_List As Variant
  Dim Folder_Collection As Object
  Dim Folder_List As Variant
 
  Set File_Collection = CreateObject("Scripting.FileSystemObject").GetFolder(FolderSpec).Files
 
  'Foldor の名前をセルに入力
  Cells(cnt, Pop) = FolderSpec
  cnt = cnt + 1

  Set Folder_Collection = CreateObject("Scripting.FileSystemObject").GetFolder(FolderSpec).SubFolders
 
  For Each Folder_List In Folder_Collection
    ListUp FolderSpec & "\" & Folder_List.Name
  Next
End Sub

Function FolderPath() As String
 
  Dim Shell As Object
 
  Set Shell = CreateObject("Shell.Application").BrowseForFolder(0, "フォルダを選択してください", 0, "")
 
 
  If Shell Is Nothing Then
    FolderPath = ""
  Else
    FolderPath = Shell.Items.Item.Path
  End If

End Function

このコードを実行したところ、希望の内容に近いのですが
1.フォルダ名を抜き出したいフォルダ(A)を選択する
2.そのフォルダ(A)の中にあるフォルダ(A-A’)の名前を抽出する
3.抽出したフォルダ名(A-A')をシートに記入していく


という内容なのですが、
1.はできました
2.は、A-A'のさらに中にあるフォルダまで引っ張ってきてしまいます。

必要なのは、A-A'のフォルダ名だけなのですが、
どう変更したらいいのでしょうか。

【64305】Re:フォルダ名の集計
発言  かみちゃん E-MAIL  - 10/1/30(土) 16:03 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>このコードを実行したところ、希望の内容に近いのですが
>1.フォルダ名を抜き出したいフォルダ(A)を選択する
>2.そのフォルダ(A)の中にあるフォルダ(A-A’)の名前を抽出する
>3.抽出したフォルダ名(A-A')をシートに記入していく
>
>
>という内容なのですが、
>1.はできました
>2.は、A-A'のさらに中にあるフォルダまで引っ張ってきてしまいます。
>
>必要なのは、A-A'のフォルダ名だけなのですが、
>どう変更したらいいのでしょうか。

こんにちは。かみちゃん です。

>> C:\MyDocuments\Test1\aaa.xls
>> C:\MyDocuments\Test1\Test11\bbb.xls
>> C:\MyDocuments\Test1\Test11\ccc.xls
>> C:\MyDocuments\Test1\Test12\ddd.xls
>>
>> などというファイルがあった場合、
>> C:\MyDocuments
>> を指定すると
>>
> aaa
> bbb
> ccc
> ddd
>
> というかたちにしたいと思っています。
>
> というのも、音楽データがあり、それらの音楽データの曲名が
> フォルダ名として存在しているので、その音楽曲名だけを
> リストで表示したいのですが、いちいち曲名を
> フォルダをみて入力するのが
> 手間だったので、このコードを書きたいと思っております。
>
> なので、その曲名だけをピックアップしたいのですが
> 可能でしょうか。

まず、確認したいのですが、取得したいのは、フォルダ名なのですか?
ファイル名なのですか?
「名前」という中途半端な表現を使わずに、どちらかハッキリさせてください。
また、フォルダの中にあるサブフォルダを検索対象にするのですか?
しないのですか?

C:\My Documents\My Music\Singer1\Album11\Music_aaa.wma
C:\My Documents\My Music\Singer1\Album11\Music_bbb.wma
C:\My Documents\My Music\Singer1\Album12\Music_ccc.wma
C:\My Documents\My Music\Singer2\Album21\Music_ddd.wma
C:\My Documents\My Music\Singer2\Album21\Music_eee.wma
C:\My Documents\My Music\Singer2\Album22\Music_fff.wma

となっている場合、フォルダ選択の際に
C:\My Documents\My Music
を指定したら、どのような結果になればいいのですか?

> PCのとあるフォルダ(自分で選択するため、その時により、色々変更します)にある、全てのフォルダ名(1コの時もあれば、100コ以上の時もあります)あつめて
> 存在しているファイルというのは、フォルダの中にいくつかさらにフォルダがあり、それらを順番に名前を取得していきたいと思っています。
> 名前は、フォルダの名前だけ取得したいのですが、C\←こういうのまで引いてしまうので、困っています。

とおっしゃっていますよね?
であれば、
C:\My Documents\My Music\Singer1\Album11
C:\My Documents\My Music\Singer1\Album12
C:\My Documents\My Music\Singer2\Album21
C:\My Documents\My Music\Singer2\Album22
という結果を得たいという解釈をしていますが・・・

具体的な例示と期待している結果をきちんと説明していただけていないからか、
私の理解力が乏しいのかわかりませんが、したいことがわかりません。

【64306】Re:フォルダ名の集計
質問  初心者  - 10/1/30(土) 16:15 -

引用なし
パスワード
   かみちゃんさん
長々とつきあわせてすいません。。

>まず、確認したいのですが、取得したいのは、フォルダ名なのですか?
>ファイル名なのですか?
>「名前」という中途半端な表現を使わずに、どちらかハッキリさせてください。
>また、フォルダの中にあるサブフォルダを検索対象にするのですか?
>しないのですか?


取得したいのは「フォルダ名」です。
フォルダの中にあるサブフォルダは、当初は必要だったのですが、
教えていただいている間に「必要なし」となったので、
存在しているメインフォルダだけを取得したいです。


>C:\My Documents\My Music\Singer1\Album11\Music_aaa.wma
>C:\My Documents\My Music\Singer1\Album11\Music_bbb.wma
>C:\My Documents\My Music\Singer1\Album12\Music_ccc.wma
>C:\My Documents\My Music\Singer2\Album21\Music_ddd.wma
>C:\My Documents\My Music\Singer2\Album21\Music_eee.wma
>C:\My Documents\My Music\Singer2\Album22\Music_fff.wma

となっていれば、
Singer1というフォルダを選択した場合は
Album11
Album12
のみ。
Singer2というフォルダを選択した場合は
Album21
Album22
のみ。
を取得したいと思っています。

Singer1やSinger2は一番最初のフォルダを選択するようにしたいです。

すいません、ややこしい内容でご迷惑おかけします。

【64307】Re:フォルダ名の集計
質問  初心者  - 10/1/30(土) 16:21 -

引用なし
パスワード
   存在しているもの

第1段階
フォルダA
フォルダB
フォルダC
フォルダD


1.ここから、フォルダBを選択する
  Set Shell = CreateObject("Shell.Application").BrowseForFolder(0, "フォルダを選択してください", 0, "")
 

第2段階
ファルダBの中には

フォルダあああ
フォルダいいい
フォルダううう
フォルダえええ
フォルダおおお
     ・・・・・・・と他にもある。

2.これら「あああ」「いいい」などというフォルダ名を抽出して
シートに記入したい。

この、2.の部分で困っています。

【64308】Re:フォルダ名の集計
発言  かみちゃん E-MAIL  - 10/1/30(土) 16:34 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>>まず、確認したいのですが、取得したいのは、フォルダ名なのですか?
>>ファイル名なのですか?
>>「名前」という中途半端な表現を使わずに、どちらかハッキリさせてください。
>>また、フォルダの中にあるサブフォルダを検索対象にするのですか?
>>しないのですか?
>
>
>取得したいのは「フォルダ名」です。
>フォルダの中にあるサブフォルダは、当初は必要だったのですが、
>教えていただいている間に「必要なし」となったので、
>存在しているメインフォルダだけを取得したいです。

どこでその説明をされましたか?
仕様が途中で変わることがあるのは、よくあるのですが、質問しているならば、
質問先には、きちんと説明するようにしましょう!

>>C:\My Documents\My Music\Singer1\Album11\Music_aaa.wma
>>C:\My Documents\My Music\Singer1\Album11\Music_bbb.wma
>>C:\My Documents\My Music\Singer1\Album12\Music_ccc.wma
>>C:\My Documents\My Music\Singer2\Album21\Music_ddd.wma
>>C:\My Documents\My Music\Singer2\Album21\Music_eee.wma
>>C:\My Documents\My Music\Singer2\Album22\Music_fff.wma
>
>となっていれば、
>Singer1というフォルダを選択した場合は
>Album11
>Album12
>のみ。
>Singer2というフォルダを選択した場合は
>Album21
>Album22
>のみ。
>を取得したいと思っています。

Sub ListUp(FolderSpec)

  '〜省略〜

End Sub

の部分を以下にすればできると思います。

Sub ListUp(FolderSpec)
  Dim Folder_Collection As Object
  Dim Folder_List As Variant

  Set Folder_Collection = CreateObject("Scripting.FileSystemObject").GetFolder(FolderSpec).SubFolders

  For Each Folder_List In Folder_Collection
   Cells(cnt, 1) = FolderSpec & "\" & Folder_List.Name
   cnt = cnt + 1
  Next
End Sub

>Singer1やSinger2は一番最初のフォルダを選択するようにしたいです。

いちいち、ひとつずつ、選択しなくても、親フォルダ(C:\My Documents\My Music)
を選択すれば、一気に取得できるのですが・・・

【64310】Re:フォルダ名の集計
質問  初心者  - 10/1/30(土) 16:56 -

引用なし
パスワード
   ▼かみちゃん さん:
できました!まさに、期待しているものです。

変更点、でたのに言い忘れてしまい、本当にすいませんでした。。

この取得した、ファイル名ですが
アーティスト_曲名

となっているので、スペース(半角ないし、全角)を見つけて
アーティストをA列 曲名をB列にそれぞれ入力したいのですが
この場合は・・

Sub ListUp(FolderSpec)
  Dim Folder_Collection As Object
  Dim Folder_List As Variant

  Set Folder_Collection = CreateObject("Scripting.FileSystemObject").GetFolder(FolderSpec).SubFolders

  For Each Folder_List In Folder_Collection
   Cells(cnt, 1) = Folder_List.Name
   cnt = cnt + 1
  Next
End Sub

の、Folder_List.Nameから半角ないし、全角のスペースを
見つけてわけるのでしょうか?

【64313】Re:フォルダ名の集計
発言  Abyss  - 10/1/30(土) 16:58 -

引用なし
パスワード
   お邪魔します。

折角Shellオブジェクトを使っていますから
これ一つで解決なると思いますが。

Sub myTest()

  Dim oShell As Object
  Dim oFolder As Object
  Dim i As Long, e
  
  Set oShell = CreateObject("Shell.Application")
  Set oFolder = oShell.BrowseForFolder(0, "フォルダ選択", 0)
  If oFolder Is Nothing Then Exit Sub
  
  For Each e In oFolder.Items
    If e.IsFolder Then
      i = i + 1
      Cells(i, 1) = e.Name
    End If
  Next

End Sub

【64315】Re:フォルダ名の集計
発言  かみちゃん  - 10/1/30(土) 17:06 -

引用なし
パスワード
   こんにちは。かみちゃん です。

▼Abyss さん
>お邪魔します。
>
>折角Shellオブジェクトを使っていますから
>これ一つで解決なると思いますが。

申し訳ありませんが、

>> まずは、自分で調べてみるという努力をしていただきたいと思っています。
>> そのほうが必ず、チカラになりますから、がんばっていただきたいのです。

について、ご配慮いただけないでしょうか?

【64316】Re:フォルダ名の集計
発言  Abyss  - 10/1/30(土) 17:11 -

引用なし
パスワード
   なるほど。その流れでしたね。(汗)
ただ、FileSystemObjectとShellオブジェクトの
2種類を同時に使っていたので気になったのです。
ご意図を理解せず、失礼しました。

【64317】Re:フォルダ名の集計
発言  かみちゃん E-MAIL  - 10/1/30(土) 17:17 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>この取得した、ファイル名ですが

ですから・・・
ファイル名なのですか?フォルダ名ではなかったのですか?

>>> まず、確認したいのですが、取得したいのは、フォルダ名なのですか?
>>ファイル名なのですか?
>>「名前」という中途半端な表現を使わずに、どちらかハッキリさせてください。
>>また、フォルダの中にあるサブフォルダを検索対象にするのですか?
>>しないのですか?
>
>
> 取得したいのは「フォルダ名」です。

と、おっしゃっていませんでしたか?
なのに、なぜ、突然、「ファイル名」の話が出てくるのでしょうか?

また、通常、
C:\My Documents\My Music\Singer1\Album11\Music_aaa.wma
というフルパスの場合、
Singer1
がアーティスト名
Album11
がアルパム名
Music_aaa.wma
が曲名
になっていると思います。

これが、Singer1というアーティストのMusic_aaaという曲名の場合、
C:\My Documents\My Music\Singer1 Music_aaa\xxxx.wma
となっているということなのでしょうか?
この場合、xxxx.wma の部分は、ファイル名なのですが、この部分は、何になっているのでしょうか?

要するに、1曲1つのフォルダなのですか?

> Folder_List.Nameから半角ないし、全角のスペースを
> 見つけてわけるのでしょうか?

文字列(フォルダ名)から半角スペース、全角スペースで区切って取得したいのならば、
どちらかに統一して、Split関数で分けます。

Sub Test()
 Dim ss As String

 ss = "Singer1 Music_aaa"
 Cells(1, 1).Resize(, 2).Value = Split(StrConv(ss, vbNarrow), " ")
End Sub

【64323】Re:フォルダ名の集計
質問  初心者  - 10/1/30(土) 17:42 -

引用なし
パスワード
   ▼かみちゃん さん:
すいません。フォルダ名の間違いです。

取得したいものは、かみちゃんさんのおかげでうまくいきました。

フォルダ名を分ける際
Sub ListUp(FolderSpec)
  Dim Folder_Collection As Object
  Dim Folder_List As Variant
  Dim ss As String
  
  Set Folder_Collection = CreateObject("Scripting.FileSystemObject").GetFolder(FolderSpec).SubFolders

  For Each Folder_List In Folder_Collection
  
    Cells(cnt, 1) = Folder_List.Name
    ss = Folder_List.Name
    Cells(cnt, 2).Value = Split(StrConv(ss, vbNarrow), " ")

   cnt = cnt + 1
  Next
End Sub

とすると、A列に全てのフォルダ名、B列にスペースより前半のフォルダ名となり
スペースより後半のフォルダ名を表示できないのですが
もし、C列に後半のフォルダ名を表示するには
どうすればいいのでしょうか。

ヘルプを調べてみたのですが、意味がよくわからなくて。。

【64324】Re:フォルダ名の集計
発言  かみちゃん E-MAIL  - 10/1/30(土) 17:48 -

引用なし
パスワード
   こんにちは。かみちゃん です。

> フォルダ名の間違いです。

申し訳ありませんが、混乱しますので、きちんと、表現を使い分けてください。

> A列に全てのフォルダ名、B列にスペースより前半のフォルダ名となり
> スペースより後半のフォルダ名を表示できないのですが
> もし、C列に後半のフォルダ名を表示するには
> どうすればいいのでしょうか。

予想どおりの展開です。
アーティスト名や曲名?の間に半角や全角のスペースがある場合が多いので、
どこで、アーティスト名とか曲名を判断するのだろう?と不思議に感じています。
私の手元の環境では、アーティストごと、アルバムごとにフォルダがわかれていて、
曲名はファイル名になっているものですから、初心者さんがしたいことは容易にできます。

なお、本題の質問は、以下のようなコードで動作を確認してください。
 ss = "Singer1 Music_aaa AAA"
の部分をいろいろ変えると、いいと思います。

Sub Test1()
 Dim ss As String
 Dim v As Variant
 
 ss = "Singer1 Music_aaa AAA"
 v = Split(StrConv(ss, vbNarrow), " ")
 Cells(1, 1).Resize(, UBound(v) + 1).Value = v
End Sub

【64326】Re:フォルダ名の集計
質問  初心者  - 10/1/30(土) 18:14 -

引用なし
パスワード
   ▼かみちゃん さん:
名前間違い、すいませんでした。


>Sub Test1()
> Dim ss As String
> Dim v As Variant
> 
> ss = "Singer1 Music_aaa AAA"
> v = Split(StrConv(ss, vbNarrow), " ")
> Cells(1, 1).Resize(, UBound(v) + 1).Value = v
>End Sub

↑これを参考に、今までの分を全て載せると

Option Explicit
Public cnt, Pop As Integer

Sub test3()

  Dim FolderSpec As String
 
  FolderSpec = FolderPath
 
  cnt = 1
  Pop = 1
 
  If FolderSpec <> "" Then
    ListUp FolderSpec
  End If

End Sub
Sub ListUp(FolderSpec)
  Dim Folder_Collection As Object
  Dim Folder_List As Variant
  Dim ss As String
  Dim v As Variant
  
  Set Folder_Collection = CreateObject("Scripting.FileSystemObject").GetFolder(FolderSpec).SubFolders

  For Each Folder_List In Folder_Collection
  
    Cells(cnt, 1) = Folder_List.Name
    ss = Folder_List.Name
    Cells(cnt, 2).Value = Split(StrConv(ss, vbNarrow), " ")
    v = Split(StrConv(ss, vbNarrow), " ")
    Cells(cnt, 3).Value = v
 
   cnt = cnt + 1
  Next
End Sub


Function FolderPath() As String
 
  Dim Shell As Object
 
  Set Shell = CreateObject("Shell.Application").BrowseForFolder(0, "フォルダを選択してください", 0, "")
 
 
  If Shell Is Nothing Then
    FolderPath = ""
  Else
    FolderPath = Shell.Items.Item.Path
  End If

End Function

こうしたのですが、C列もB列と同じ「スペースより前半の名前」になってしまい、
>Sub Test1()
> Dim ss As String
> Dim v As Variant
> 
> ss = "Singer1 Music_aaa AAA"
> v = Split(StrConv(ss, vbNarrow), " ")
> Cells(1, 1).Resize(, UBound(v) + 1).Value = v
>End Sub
のように、うまくわかれてくれません。

どこがおかしい部分なのでしょうか。
    Cells(cnt, 1) = Folder_List.Name
    ss = Folder_List.Name
    Cells(cnt, 2).Value = Split(StrConv(ss, vbNarrow), " ")
    v = Split(StrConv(ss, vbNarrow), " ")
    Cells(cnt, 3).Value = v

だとおもうのですが。変え方がわからず・・・

やりたいこと
A列:フォルダ名全て
B列:スペースより前半の名前
C列:スペースより後半の名前

としたいです。

【64328】Re:フォルダ名の集計
発言  かみちゃん E-MAIL  - 10/1/30(土) 18:25 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>>  Cells(1, 1).Resize(, UBound(v) + 1).Value = v
>> End Sub
> のように、うまくわかれてくれません。
>
> どこがおかしい部分なのでしょうか。

ご自身でがんばって修正してみたコードをよく見てください。
そのようにしていないからです。

>やりたいこと
>A列:フォルダ名全て
>B列:スペースより前半の名前
>C列:スペースより後半の名前
>
>としたいです。

であるならば、

 Cells(cnt, 1) = Folder_List.Name
 ss = Folder_List.Name
 Cells(cnt, 2).Value = Split(StrConv(ss, vbNarrow), " ")
 v = Split(StrConv(ss, vbNarrow), " ")
 Cells(cnt, 3).Value = v

の部分は、

 ss = Folder_List.Name
 Cells(cnt, 1).Value = ss
 v = Split(StrConv(ss, vbNarrow), " ")
 Cells(cnt, 2).Resize(, UBound(v) + 1).Value = v

とすれば、できると思います。

【64332】Re:フォルダ名の集計
質問  初心者  - 10/1/30(土) 20:27 -

引用なし
パスワード
   かみちゃんさん、全て解決できました。

あと1点だけ、勉強のため教えていただけないでしょうか。

Resize(, UBound(v) + 1)の処理がどういう意味をなすのか、わからないのですが、どういう意味をなす処理になるんでしょうか。

【64333】Re:フォルダ名の集計
発言  かみちゃん E-MAIL  - 10/1/30(土) 20:37 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>Resize(, UBound(v) + 1)の処理がどういう意味をなすのか、わからないのですが、どういう意味をなす処理になるんでしょうか。

勉強のためなら、Resizeプロパティをヘルプを調べてみてください。
UBound(v) + 1
で何が得られるのかは、以下のコードで確かめて、考えてみてください。

Sub Test2()
 Dim ss As String
 Dim v As Variant

 ss = "Singer1 Music_aaa AAA"
 v = Split(StrConv(ss, vbNarrow), " ")
 MsgBox UBound(v) + 1
End Sub

 ss = "Singer1 Music_aaa AAA"
をいろいろ変えてみると、さらに理解が深まると思います。

【64334】Re:フォルダ名の集計
お礼  初心者  - 10/1/30(土) 20:46 -

引用なし
パスワード
   ▼かみちゃん さん:

色々とご指導ありがとうございました。
教えていただいたコードを参考に勉強したいと思います。

本日は本当にありがとうございました。

3094 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free