ここから本文です

お力をお貸しください。

syu********さん

2018/10/310:14:28

お力をお貸しください。

社内の人事評価を行うにあたり、
評価点数がついたエクセルファイルをこれまで
1つずつ開いて統合ファイルにコピペしておりましたが、
部下が増えてきたためVBAで処理したいと思っています。

フォルダ構成のイメージは下記の通りです。

C\評価
|_統合.xlsm
|_1課
| |_佐藤.xlsx
| |_田中.xlsx
| ・
| ・
|_2課
| |_加藤.xlsx
| |_山田.xlsx
| ・
| ・
|_3課
| |_岡田.xlsx
| |_島田.xlsx
| ・
| ・

1課のフォルダを開いて佐藤さんのファイルを開き、
処理をして閉じて、田中さんのファイルを開き・・・
1課フォルダ内の処理が全て終わったら
2課のフォルダで同じことをする・・

という複数フォルダ複数ファイル処理の組み方がわからず、
ご教示いただきたく思います。

処理の部分は書けます。

以上、何卒よろしくお願いいたします。

閲覧数:
39
回答数:
2

違反報告

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

プロフィール画像

カテゴリマスター

hot********さん

2018/10/311:09:59

課がいくつあるかによって違いますが、こんなでしょうか。
Sub 処理(fullName As String)
の中に各Bookに対する処理を書いてください。
閉じる時は、更新するのか参照だけ(更新しない)なのかによって変わります。


Sub sample()
Dim folder As String
Dim ka As Variant
Dim file As Variant
folder = "C:\評価\" 'ルートフォルダ
For Each ka In Array("1課", "2課", "3課") '各課を順に
file = Dir(folder & ka & "\*.xlsx") '各課のフォルダ内の最初の".xlsx"ファイル名
Do While file <> "" 'ファイルがある間
処理 folder & ka & "\" & file 'ファイルのフルパスを処理に渡す
file = Dir '次のファイル名
Loop '繰り返す
Next
End Sub

'各ファイル(ブック)の処理
'fullName:対象ファイルのフルパス(例"C:\評価\1課\佐藤.xlsx")
Sub 処理(fullName As String)
Dim wb As Workbook
Set wb = Workbooks.Open(fullName) 'ブックを開く
'各Bookに対する処理をここに記述
MsgBox wb.Name
'
wb.Close False 'ブックを保存しないで閉じる(更新しない場合)
'wb.Close True 'ブックを保存して閉じる(更新する場合)
End Sub

  • 質問者

    syu********さん

    2018/10/318:45:10

    ありがとうございます!

    >処理 folder & ka & "\" & file 'ファイルのフルパスを処理に渡す

    この発想がなかったです。

    思った通りの動きになりました。
    感謝します。

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

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

1〜1件/1件中

プロフィール画像

カテゴリマスター

sut********さん

2018/10/310:25:27

そういう場合は、「マクロの記録」を使ってカンニングします。
マクロの記録開始とやって、
他の文書を操作して閉じてまで、
記録したらマクロの記録を終了して、
記録したマクロを眺めてみるとやり方が書いてあります。

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

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

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

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

閉じる

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

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

閉じる