Excel VBA質問箱 IV

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

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


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

【16215】フォルダ内のファイルを順に処理 tomo 04/7/21(水) 9:14 質問[未読]
【16216】Re:フォルダ内のファイルを順に処理 IROC 04/7/21(水) 9:21 回答[未読]
【16217】Re:フォルダ内のファイルを順に処理 tomo 04/7/21(水) 10:14 質問[未読]
【16219】Re:フォルダ内のファイルを順に処理 でん 04/7/21(水) 10:30 回答[未読]
【16218】Re:フォルダ内のファイルを順に処理 ちゃっぴ 04/7/21(水) 10:28 回答[未読]

【16215】フォルダ内のファイルを順に処理
質問  tomo  - 04/7/21(水) 9:14 -

引用なし
パスワード
   フォルダ内のエクセルファイルを順に処理していくマクロを作りたいです。

まず、別フォルダのエクセルファイル(このエクセルにマクロが組み込まれています)が
あらかじめ一つ開いていて、次に処理を行うフォルダのエクセルを順に開いて
マクロを実行していきたいんです。
どなたか、教えていただけないでしょうか。。
よろしくお願いします。

【16216】Re:フォルダ内のファイルを順に処理
回答  IROC  - 04/7/21(水) 9:21 -

引用なし
パスワード
   Dir 関数を使っては如何でしょうか?

【16217】Re:フォルダ内のファイルを順に処理
質問  tomo  - 04/7/21(水) 10:14 -

引用なし
パスワード
   ▼IROC さん:
>Dir 関数を使っては如何でしょうか?
早速お返事ありがとうございます。
VBAの超初心者で、Dir関数の基本的なことから
わかっていないんです。
もう少しヒントを与えてもらえないでしょうか・・

【16218】Re:フォルダ内のファイルを順に処理
回答  ちゃっぴ  - 04/7/21(水) 10:28 -

引用なし
パスワード
   ▼tomo さん:
>フォルダ内のエクセルファイルを順に処理していくマクロを作りたいです。

やり方はいろいろあります。

1. VBAのDir関数を使用する
2. ExcelVBAのFileSeachObjectを使用する
3. FileSystemObjectを使用する
4. コマンドプロンプトのコマンドDIRをリダイレクトして使用する
5. Win32API FindFirstFileを使用する

1.のVBAのDir関数ですが、すべて半角のパスを使用する場合は
問題ありませんが、全角が混在する場合は注意が必要です。
私が調べたところ、パスを内部でANSIで処理するようで
256Byteの制限が存在します。
ちなみにこれはDir関数に限らず、VBAのファイル操作関数・
ステートメントにおける制限事項です。
よって、全角半角混在で256Byteを超える場合は注意が必要です。
速度は若干遅いです。

2.のFileSeachObjectは、皆さんご存知のように不具合が存在します。
Index Service実行下では使用しないほうがよいでしょう。
速度は遅いです。

3.のFileSystemObjectは安定性には定評があります。
また、直感的にわかりやすい構造をしているため、VBA初心者でも
十分に扱えるでしょう。
ただ、こちらもデメリットが存在します。
ファイルリストを取得する場合、速度が非常に遅いです。

4.のDirコマンドは安定していますし、速度もなかなか速いです。
呼び出しは、Shell関数、WSHのRunメソッドを使用します。
また、サブフォルダの検索を行う際、
再帰を使用しなくてもよいというメリットもあります。
ただ、複雑な処理を行わせる場合、厳しいことがあります。

5.のFindFirstFileは初心者には厳しいですが、安定性・速度とも抜群です。
ただ、Win32APIに相当慣れていないと使用することができないと思います。

それぞれ、メリット・デメリットがありますので、お好きなものを
ご使用になるとよいでしょう。

いきなり、FindFirstFileでやると厳しいと思いますので
FileSystemObject辺りがお勧めです。
(バグになる可能性が低いので・・・)

【16219】Re:フォルダ内のファイルを順に処理
回答  でん  - 04/7/21(水) 10:30 -

引用なし
パスワード
   tomo さん こんにちは。

こんなんではどう?

Sub FileSearch()
  Set fs = Application.FileSearch
  With fs
    .LookIn = "c:\test"
    .Filename = "*.xls"
    .SearchSubFolders = True
    If .Execute(SortBy:=msoSortByFileName, SortOrder:=msoSortOrderAscending) > 0 Then
      For i = 1 To .FoundFiles.Count
        Workbooks.Open .FoundFiles(i)
        MsgBox .FoundFiles(i) & " を開いたで!"
        ActiveWorkbook.Close
      Next i
    Else
      MsgBox "ファイルがない!"
    End If
  End With
  Set fs = Nothing
End Sub

ではでは。

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