マクロを最適化する方法

マクロを最適化する方法

毎年、前年と同じ構造を持つ新しい年間 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. 両方のファイルにある同じ名前のすべてのシート
  2. 参照先のセルを検索する
  3. ソースファイルから同じ場所にある宛先ファイルに参照をコピーします

答え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

関連情報