![マクロを最適化する方法](https://rvso.com/image/1641917/%E3%83%9E%E3%82%AF%E3%83%AD%E3%82%92%E6%9C%80%E9%81%A9%E5%8C%96%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95.png)
毎年、前年と同じ構造を持つ新しい年間 Excel ファイルを作成します。前年に、その Excel ファイルのすべてのシートから読み取る行と列を定義し、計算結果を同じファイルに返します。
新しい年には、手順全体を繰り返す必要があります。データを手動で再バインドせずに、リンクと数式を前年から翌年に移動する方法はありますか?
これは記録されたマクロです:
Sub NewYearData()
' NewYearData Makronaredba
Windows("PreviousYear.xlsm").Activate
Sheets("1.A.1.a.ii Liquid Fuels").Select
Range("C16:AH18").Select
Selection.Copy
Application.WindowState = xlNormal
Windows("CurrentYear2.xlsx").Activate
Range("C16").Select
ActiveSheet.Paste Link:=True
ActiveSheet.Paste
Windows("PreviousYear.xlsm").Activate
Sheets("1.A.1.a.ii Gaseous Fuels Gaseo").Select
Range("C16:AH18").Select
Application.CutCopyMode = False
Selection.Copy
Windows("CurrentYear2.xlsx").Activate
Sheets("1.A.1.a.ii Gaseous Fuels Gaseo").Select
Range("C16:AH18").Select
ActiveSheet.Paste
End Sub
すべてのシートに適用するにはどうすればいいですか?
- 両方のファイルにある同じ名前のすべてのシート
- 参照先のセルを検索する
- ソースファイルから同じ場所にある宛先ファイルに参照をコピーします
答え1
これは同じシートを持っていることを前提としています(同じ名前) で両方ワークブック。いくつかのオブジェクトを定義し、ループを使用します。
Sub NewYearData()
Dim wb1 As Workbook, wb2 As Workbook
Dim r1 As Range, r2 As Range
Dim addy As String, sh As Worksheet
Dim shName As String
Set wb1 = Workbooks("PreviousYear.xlsm")
Set wb2 = Workbooks("CurrentYear2.xlsx")
addy = "C16:AH18"
For Each sh In wb1.Sheets
shName = sh.Name
Set r1 = sh.Range(addy)
Set r2 = wb2.Sheets(shName).Range(addy)
r1.Copy r2
Next sh
End Sub