|
ぺーぺーさん、こんにちは
こんな感じでどうでしょう。
ただし、前回同様Excelを使える環境にありませんので、検証を
行っていない事をお断りしておきます。
Sub macro()
Dim folder1 As String
Dim folder2 As String
Dim template As String
Dim f As String
Dim wbT As Workbook
Dim wb As Workbook
' 使いませんので、削除
' Dim strWorkBookName As String
folder1 = "C:\Users\tsuruta\Documents\macro\folder1" 'フォルダ1
folder2 = "C:\Users\tsuruta\Documents\macro\folder2" 'フォルダ2
template = "C:\Users\tsuruta\Documents\macro\template.xlsm" 'テンプレートBook
' f = Dir(folder1 & "\" & "1.xlsx") 'フォルダ1内の最初のBook名
' これでは、『C:\Users\tsuruta\Documents\macro\folder1\1.xlsx』しか
' 処理の対象になりませんので、下記のように変更
f = Dir(folder1 & "\*.xlsx") 'フォルダ1内のxlsxファイルを取得
Do While f <> "" 'Book名がある間
Set wbT = Workbooks.Open(template) 'テンプレートを開く
' Set wb = Workbooks.Open(folder1 & "\" & "1.xlsx") '生データを開く
' ここもこのままでは、
' 『C:\Users\tsuruta\Documents\macro\folder1\1.xlsx』しか
' 処理の対象になりませんので、下記のように変更。
' 変数『f』には開く対象のファイル名が取得されていますので
' それを使用してOpenするBookのFullPathを生成。
Set wb = Workbooks.Open(folder1 & "\" & f) '生データを開く
wb.Worksheets("Sheet1").Range("B:B").Copy '生データのBookのSheet1のB列の値をコピー
wbT.Worksheets("Sheet1").Range("B:B").PasteSpecial 'コピーした値をテンプレートのSheet1のB列にペースト
' strWorkBookName = ActiveWorkbook.Name '生データのファイル名をコピー
' 変数fにファイル名が取得ずみです。ここは不要になります。
wb.Close False '生データを保存せずに閉じる
'以下ソルバー実行
SolverReset
SolverOk SetCell:="$G$5", MaxMinVal:=2, ValueOf:=0, ByChange:="$J$3:$J$6", _
Engine:=1, EngineDesc:="GRG Nonlinear"
Application.DisplayAlerts = False
SolverSolve True
Application.DisplayAlerts = True
'ソルバー終了
' wbT.Close True, folder2 & "\" & strWorkBookName 'テンプレートの結果を元のファイル名でフォルダ2に保存して閉じる
' 変数fを使用して、Folder2へ同名保存。
wbT.Close True, folder2 & "\" & f
f = Dir 'フォルダ1内の次のBook名
Loop '繰り返す
End Sub
|
|