ここから本文です

エクセル VBAについて エクセルのマクロを使って、フォルダ内のファイル全て...

アバター

ID非公開さん

2018/11/1621:36:10

エクセル VBAについて

エクセルのマクロを使って、フォルダ内のファイル全てにある処理を行いたいのですが、自動で次のファイルを開き処理を実行をするやり方がわかりません。

流れとしては

1.ファイルを開く
2.処理を実行
3.ファイルを閉じる
4.次のファイルを開く
5.処理を実行

というような感じです。
エクセルのバージョンは2013です。

色々調べてみましたがうまく出来ないのでぜひご協力お願いします。

この質問は、活躍中のチエリアン・専門家に回答をリクエストしました。

閲覧数:
81
回答数:
3
お礼:
100枚

違反報告

ベストアンサーに選ばれた回答

プロフィール画像

カテゴリマスター

lin********さん

リクエストマッチ

2018/11/1622:10:22

今は、意味のないことをしています。

Sub Sample()
Dim p As String, f As String
Dim bk As Workbook
Application.DisplayAlerts = False
Application.ScreenUpdating = False
p = "D:\VBScript"
f = Dir(p & "\*.xls*")
r = 0
Do Until f = ""
Set bk = Workbooks.Open(p & "\" & f)
r = r + 1
ThisWorkbook.ActiveSheet.Cells(r, "A").Value = f
bk.Save
bk.Close
Set bk = Nothing
f = Dir()
Loop
Application.ScreenUpdating = True
End Sub

簡単な説明です。

Application.DisplayAlerts = False

「上書きしますか?」などと聞いてこないようにしています。

Application.ScreenUpdating = False

「画面の更新」を停止しています(画面のちらつき防止と高速化)。

p = "D:\VBScript"

処理する「フォルダ」を指定しています。

f = Dir(p & "\*.xls*")

そのフォルダ内の拡張子が「xls」、「xlsx」、「xlsm」のすべてが処理対象となります(「xlsz」や「xlsabc」というような拡張子は存在しないでしょうから)。

もし、「xlsx」のみでしたら「f = Dir(p & "\*.xlsx")」です。

r = 0

行カウント用変数の初期化。

Do Until f = ""

「xls~」という拡張子のファイルがなくなるまで処理を繰り返します。

Set bk = Workbooks.Open(p & "\" & f)

ブックを開いて、「bk」にセットしています。

r = r + 1

1行カウント。

ThisWorkbook.ActiveSheet.Cells(r, "A").Value = f

マクロを走らせているブックのアクティブシートの列「A」にファイル名を書き出しています。

ただ、この場合、実際には、ファイルを開く必要はないのですが、処理手順を示すために開いています。

bk.Save

ファイルを上書き保存しています。

bk.Close
Set bk = Nothing

ファイルを閉じています。

f = Dir()

「f」には、拡張子が「xls~」のファイル群が入っていて、これを実行するたびに、1つずつ減って行きます。

Loop

を、繰り返しています。

Application.ScreenUpdating = True

「画面の更新」再開。

Application.DisplayAlerts = True

「上書きしますか?」などのメッセージを再び出すようにしています。

アバター

質問した人からのコメント

2018/11/17 20:00:08

ありがとうございました!

ベストアンサー以外の回答

1〜2件/2件中

並び替え:回答日時の
新しい順
|古い順

moa********さん

2018/11/1622:15:58

何をどう調べたのでしょう。
流れとしては
1フォルダにある全ファイル名を取得
(ファイル名が無いと開けない為)
2.1で取得したファイルを一つ開く
3.処理をする
4.2で開いたファイルをクローズ
5.処理対象が有れば2に戻る
6.処理対象が無ければ処理を終了する。

ファイル一覧を取得する方法はWebで散見されるサンプルコードが多いので
調べて下さい。
他は別段特別な処理はないです。

プロフィール画像

カテゴリマスター

tra********さん

リクエストマッチ

2018/11/1622:02:30

C:\HogeHoge\Hogeのなかの「.xlsx」ファイルを一括処理する例です。

Sub sample()
Dim xFile As String
Const cPath As String = "C:\HogeHoge\Hoge\"
xFile = Dir(cPath & "*.xlsx")
Do While xFile <> ""
With Workbooks.Open(cPath & xFile)
MsgBox xFile & "を処理してます"
.Close
End With
xFile = Dir
Loop
End Sub

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる