furenet さんの引用:
請求書はいくつもあるのですが確認の意味もあり一つずつ開きながらしたいと思っております。
マクロは自動化を行う為に使います。
【】内を作業者が行う処理だとして
今の質問者さんの動作イメージだと
1.【マクロ実行】
2.ダイアログを表jし、処理対象となるファイルを選択
3.ファイルを開く
4.【R2または他のセルの値を確認】
確認し正しいなら.R2のセルの値を、集計表のC5に張り付ける
確認し誤りなら何もしない
5.ファイルを閉じる
6.マクロ終了
4. の動作で、操作者の確認判断が入るのであれば、
その段階で、マクロは中断し作業効率としては大きな改善は見込めないのではないでしょうか?
それよりは、
1) 集計表のセルに、対象となるファイルのフルパスを入力しておく
2)【マクロ実行】
3) 1で入力してあるフルパスを参照し対象となるファイルを開く
4) R2(確認しなければならないセルがあるならその)値を取得し請求書ファイルに貼り付け
5) ファイルを閉じる
6) 1の対象となるファイルの一覧が無くなるまで 3. からの動作を繰り返す
7) マクロ終了
の動作の方が効率的と思いますが いかがでしょうか?
参考までに。
こんなデータがある時
A B C D E
1 No フォルダ ファイル A2 B2
2 1 C:\DATA\ AA.xlsx
3 2 C:\DATA\ BB.xlsx
4 3 C:\DATA\ CC.xlsx
5 4 C:\DATA\ DD.xls
D/E列にデータを転記するコード
Sub Sample()
'開いたブックのコピー元アドレス
Const target1 As String = "A2"
Const target2 As String = "B2"
Dim FSO As Object 'Scripting.FileSystemObject
Dim wbk As Workbook '開くブック
Dim wst As Worksheet 'アクティブシート
'(集計表ファイルの転記先シートをアクティブにしておく)
Dim i As Long
Dim strFilePath As String
Set wst = ActiveSheet
Set FSO = CreateObject("Scripting.FileSystemObject")
i = 2
'2行目から開始
Do
'B列&C列 のフォルダ-ファイル を繋ぎファイルパス取得
strFilePath = wst.Cells(i, 2).Value & wst.Cells(i, 3).Value
'ファイルの存在確認
If FSO.FileExists(strFilePath) = True Then
'ファイルがある時
'ファイルを開く
Set wbk = Workbooks.Open(Filename:=strFilePath, ReadOnly:=True)
'セル内容 D列、E列へ転記
wst.Cells(i, 4).Value = wbk.Worksheets("Sheet1").Range(target1).Value
wst.Cells(i, 5).Value = wbk.Worksheets("Sheet1").Range(target2).Value
'ファイルを閉じる
wbk.Close
End If
'次の行を処理する
i = i + 1
'A列の値が空白になるまでループする
Loop While Not IsEmpty(wst.Cells(i, 1))
'後始末
Set wst = Nothing
Set wbk = Nothing
Set FSO = Nothing
MsgBox "終了"
End Sub
コードを改造すれば希望の動作ができると思います。
改造がんばってみてください。