Excel VBA質問箱 IV

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

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


2472 / 13645 ツリー ←次へ | 前へ→

【67814】画像集約について 初心者 11/1/11(火) 16:49 質問[未読]
【67818】Re:画像集約について kanabun 11/1/11(火) 17:35 発言[未読]
【67819】Re:画像集約について 初心者 11/1/11(火) 17:39 質問[未読]
【67824】Re:画像集約について 山猿 11/1/11(火) 21:32 発言[未読]
【67834】Re:画像集約について kanabun 11/1/12(水) 13:03 発言[未読]
【67843】Re:画像集約について 初心者 11/1/12(水) 16:29 発言[未読]
【67844】Re:画像集約について kanabun 11/1/12(水) 17:22 発言[未読]

【67814】画像集約について
質問  初心者  - 11/1/11(火) 16:49 -

引用なし
パスワード
   はじめまして。
いま、以下のことで悩んでおります。

フォルダAに100程度のフォルダがあり、そのフォルダに
写真を入れています。

それらを1つのフォルダBに集約するには、どのようにすればいいのでしょうか。


EXCEL VBAを使用して、作成することは可能でしょうか。


お分かりの方がいれば、ご教授よろしくおねがいします。

【67818】Re:画像集約について
発言  kanabun  - 11/1/11(火) 17:35 -

引用なし
パスワード
   ▼初心者 さん: こんにちは〜
>
>フォルダAに100程度のフォルダがあり、そのフォルダに
>写真を入れています。
>
>それらを1つのフォルダBに集約するには、どのようにすればいいのでしょうか。

・フォルダBを作成する
・フォルダA内のサブフォルダを含む画像ファイルのリストを取得する
・リスト順に フォルダBにFileCopyする(または MoveFileする)

どの辺が分かりませんか?

【67819】Re:画像集約について
質問  初心者  - 11/1/11(火) 17:39 -

引用なし
パスワード
   ▼kanabun さん:はじめまして。

お恥ずかしいながら、マクロの記録でしかVBAをしたことがないので
全てわからない状態で困っております。。。

【67824】Re:画像集約について
発言  山猿  - 11/1/11(火) 21:32 -

引用なし
パスワード
   ▼初心者 さん:
>お恥ずかしいながら、マクロの記録でしかVBAをしたことがないので
>全てわからない状態で困っております。。。
恥ずかしいことでもなんでもないです。
誰でも最初は使えないわけで、
すべて分からないなら、教科書で勉強していけばいいだけです。

最初から「初心者」という看板を振りかざして、
初心者だからコードもらえるだろう、というのは感心しません。

フォルダやファイルの操作は、FileSystemObjectが便利です。
ヒントもありましたから、
ht tp://officetanaka.net/excel/vba/filesystemobject/index.htm
で勉強してみては?

【67834】Re:画像集約について
発言  kanabun  - 11/1/12(水) 13:03 -

引用なし
パスワード
   ▼初心者 さん:

>フォルダAに100程度のフォルダがあり、そのフォルダに
>写真を入れています。
>
>それらを1つのフォルダBに集約するには、

その後いかがですか(^^

フォルダの作成は
 VBAの MakeDirステートメントとか
 APIの SHCreateDirectoryEx とか、用途に合わせてありますが、
まぁ、フォルダの作成は一回だけなので、とりあえずは手動で
作成しておいてもいいでしょうね。

ところで、100ものサブフォルダがあるということですが、
単一フォルダに集めるとき、個々のファイル名に重複があると
同じフォルダに集めることはできなくなります。
すべてのファイル名に重複はありませんか?

あと、ファイルは コピーですか、移動ですか?

【67843】Re:画像集約について
発言  初心者  - 11/1/12(水) 16:29 -

引用なし
パスワード
   ▼kanabun さん:

サブフォルダは、名前は違うので問題はないかとは思います。

現在の状況は、集めてくるフォルダを探す。
までの工程で止まっています。

ちなみに、コピーで集約しようと思っています。

【67844】Re:画像集約について
発言  kanabun  - 11/1/12(水) 17:22 -

引用なし
パスワード
   ▼初心者 さん:

> 現在の状況は、集めてくるフォルダを探す。
> までの工程で止まっています。

どのようなコードになりましたか?

参考まで、FileSystemObjectを使うと、指定フォルダ直下の
サブフォルダ名を取得するコードは
以下のように簡単に書けます。

(注意)このマクロを走らせる前に、VBEメニュー[ツール]-[参照設定...]
で、
★ Microsoft Scripting Runtimeへの参照設定をしておいてください。
参照設定しなくとも 実行時に
  CreateObject("Scripting.FileSystemObject") と実行時バインディング
すれば同様の処理ができますが、Fsoのもつ豊富なメソッド・プロパティを
簡単に参照するためにも、まずは事前バインディング法をおすすめします。

あと、
> Dim src As String:   src = "E:\(Map2)"
> Dim Dest As String:   Dest = "E:\(MapAll)\"
には コピー元フォルダ名、コピー先フォルダ名をそちらの環境のものに
変更しておいてください。(あ、Destはここでは不要でしたね)

Sub Try1() 'Debug.Print パス表示のみ
 Dim src As String:   src = "E:\(Map2)"
 Dim Dest As String:   Dest = "E:\(MapAll)\"
 Dim FSO As FileSystemObject
 Dim Folder As Folder
  
  Set FSO = New FileSystemObject
  For Each Folder In FSO.GetFolder(src).SubFolders
    Debug.Print Folder.Path 'フォルダパス名を _
           イミディエイト・ウィンドウに表示する
  Next
  Set FSO = Nothing
 
End Sub

イミディエイト・ウィンドウ(Ctrl+[G]で出てくるウィンドウ)に
ちゃんと、サブフォルダ名が表示されましたか?


>ちなみに、コピーで集約しようと思っています。


では、いよいよファイルのコピーに挑戦してみましょう。
以下のプロシージャで先頭の
> Dim SrcPath As String: SrcPath = "E:\(Map2)"
> Dim Dest As String:   Dest = "E:\(MapAll)\"
のところを、そちらの環境のコピー元のパス、コピー先パス名
にそれぞれ変更してください。

★コピー先フォルダはすでに作成されているものとします。
以下の例では 拡張子が*.jpg のファイルのみをコピーしています。

Sub Try2copy() 'ワイルドカード使って <COPYFile> 1階層のみ
 Dim SrcPath As String: SrcPath = "E:\(Map2)"
 Dim Dest As String:   Dest = "E:\(MapAll)\"
 Dim Folder As Folder
 Dim src As String
  
 If Right$(Dest, 1) <> "\" Then Dest = Dest & "\"
 With New FileSystemObject
  For Each Folder In .GetFolder(SrcPath).SubFolders
    src = Folder.Path & "\*.jpg" '拡張子*.jpgファイルのみ
    Debug.Print src, Dest
    On Error Resume Next
     .CopyFile src, Dest
     If Err().Number Then
       Debug.Print , Err().Description
     End If
    On Error GoTo 0
  Next
 End With
End Sub

何らかの理由で Fso.CopyFileメソッドが失敗することがあります。
そのばあいは、イミディエイト・ウィンドウにエラーメッセージが
表示されます。(処理は継続します)
コピー先フォルダ名 Dest の末尾には "\"を付けて、コピー先が
フォルダ名であることを指定しています。

>サブフォルダは、名前は違うので問題はないかとは思います。

ファイル名に重複があると、FileCopy時にエラーになると思います。

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