[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『同じフォルダ内のファイルを指定した順番に開きたい』(初心者)
はじめまして。お知恵を拝借したく質問させていただきます。
同一のフォルダ内に保存されているファイルを、
こちらの指定した順番に開いて順番に処理をしたいと考えています。
同じファイル内には、北海道から沖縄まで地域別に配布された同じファイルを格納しています。
指定した順番にファイルを開き、sheet1に入力されているA〜D列のデータをコピーして1枚のシートにまとめていきたいです。
頭の中では
1 A列に1から順に開きたいシートの名前を入力する
2 指定のフォルダ内を検索して、1番目のシートを開く
3 A〜D列をコピーする
4 集約シートに貼り付ける
5 A列の2番目のファイルを開く
…
というループ作業ではないかと考えているのですが、この考え方で実現可能なのでしょうか?
Openで指定するファイルをシート上から取得する方法が分からず先に進めなくなってしまいました。
格納されているファイルを上から順に開くマクロは組んだことがあるのですが、その際はこちらの指定した順番に開くのではなかったため、そういった方法が可能なのか、どう実現できるのか、ご教授いただけますと幸いです。
宜しくお願いいたします。
< 使用 Excel:Excel2019、使用 OS:Windows10 >
■2
>Openで指定するファイルをシート上から取得する方法が分からず
>1 A列に1から順に開きたいシートの名前を入力する
これが、アクティブシートのA1セルから順番に、開きたい【ブック名】を入力するだとしたら、こんな感じでよいでしょう
Sub さんぷる() Dim 行 As Long
With ActiveSheet For 行 = 1 To .Cells(.Rows.Count, "A").End(xlUp).Row MsgBox ThisWorkbook.Path & "\" & .Cells(行, "A").Value & vbLf & "↑を開く処理を実行" Next 行 End With End Sub
■3
↓のほうがよいとおもいます。
4 集約シートに貼り付ける 5 A列の2番目のファイルを開く ↓ 4 集約シートに貼り付ける 5 開いたブックを保存せずに閉じる 6 A列の2番目のファイルを開く
(もこな2) 2021/06/24(木) 12:36
例えば北海道、東京、沖縄のブックが1つのフォルダに入っていた場合に、
A1 北海道
A2 沖縄
A3 東京
と入力し、
この順番に各ブックのデータをコピーしたいです。
フォルダに保管されている上から順では順不同となってしまうので、
こちらの意図した北海道、東京、沖縄の順に上からコピーしたデータを並べることができません。
1 「北海道.xlsx」を開いてコピー
2 「北海道.xlsx」を閉じる
3 「東京.xlsx」を開いてコピー
4 「東京.xlsx」を閉じる
5 「沖縄.xlsx」を開いてコピー
6 「沖縄.xlsx」を閉じる
という作業を行いたいのですが、開く順をA列に入力すればどうにか指定できないかな…と思った次第です。
宜しくお願いいたします。
(初心者) 2021/06/24(木) 15:30
(もこな2) 2021/06/24(木) 16:02
サンプルのVBAを実行した際にMsgBoxにパスが表示されるだけでしたので勘違いをしておりました。
頂いたコードと、手元にあるコードをにらめっこしながら、組みなおしてみたいと思います。
ありがとうございます!
(初心者) 2021/06/24(木) 16:13
'フォルダを選択する
sub test()
Application.ScreenUpdating = False
With Application.FileDialog(msoFileDialogFolderPicker)
If .Show = True Then folder = .SelectedItems(1) End If End With
file = Dir(folder & "\*.xlsm")
If file <> "" Then
For row = 1 To ThisWorkbook.Worksheets("読み取り順").Range("A" & Rows.Count).End(xlUp).row Order = ThisWorkbook.Worksheets("読み取り順").Cells(row, "A").Value → Set book = Workbooks.Open(folder & "\*" & Order & "*.xlsm")
file = Dir() Application.DisplayAlerts = False ' メッセージを非表示 book.Close Application.DisplayAlerts = True ' メッセージを表示 Next row
Else
MsgBox "ファイルが見つかりません"
End If
Application.ScreenUpdating = True
End Sub
矢印のところでファイルが見つからないとエラーが出てしまい、部分一致でフォルダを探すことができません。
"*"を抜いて読み取り順のシートにデータの名前を入力すると問題なく作動します。
前後のワイルドカードの使い方が間違っているのでしょうか?
(初心者) 2021/06/25(金) 11:48
いままでは、Do〜Loopでフォルダにある全ファイルを巡回して条件(拡張子が".xlm")に合うものをかたっぱしから拾っていたわけですが、そこから考え方を変えないとダメです。
Sub さんぷる2() Dim フォルダパス As String Dim ファイル名 As String Dim 行 As Long
'▼フォルダを指定してもらう処理 With Application.FileDialog(msoFileDialogFolderPicker) If .Show = True Then フォルダパス = .SelectedItems(1) Else MsgBox "処理中止" End If End With
'▼ファイルリストに沿ってファイルの有無をチェックする処理 With ThisWorkbook.Worksheets("読み取り順") For 行 = 1 To .Cells(.Rows.Count, "A").End(xlUp).Row ファイル名 = Dir(フォルダパス & "\" & .Cells(行, "A").Value & ".xlsm")
'▼ファイルがあれば(Dir関数で""にならなければ)処理を実行 If ファイル名 <> "" Then MsgBox フォルダパス & "\" & ファイル名 & vbLf & "↑を開く処理を実行" Else MsgBox フォルダパス & vbLf & "↑に↓のファイルはありません" & vbLf & .Cells(行, "A").Value & ".xlsm" End If Next 行 End With End Sub
要は、かたっぱしから探すんじゃなく、ピンポイントで探してあれば処理するという考え方にすればよいです。
(もこな2) 2021/06/25(金) 12:40
ありがとうございます!
ファイル名 = Dir(フォルダパス & "\" & .Cells(行, "A").Value & ".xlsm")
を
ファイル名 = Dir(フォルダパス & "\*" & .Cells(行, "A").Value & "*.xlsm")
としたら、部分一致でもOpenメソッドが実行でき、希望の作業が実現できました。
勉強になりました。
ありがとうございます。
(初心者) 2021/06/25(金) 13:27
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.