Насколько я понимаю, это, вероятно, то, что вам нужно:
в следующем коде вместо итерации по каждой ячейке я создам матрицу для выполнения умножения 2 матриц, а затем использую Функция MMULT для возврата результата (см. Мое изображение)
Примечание: Этот подход может быть не очень эффективным, это всего лишь временная мысль.
Sub Test()
Dim ws1 As Worksheet: Set ws1 = Sheets("Sheet1")
Dim ws2 As Worksheet: Set ws2 = Sheets("Sheet2")
Dim Rng As Range: Set Rng = ws2.Range("A3:D8")
Dim Header: Header = ws1.[a2:d2].Value2
M_size = Rng.Columns.Count
ws1.Range("A3:D8").Copy Destination:=Rng
Dim matrix() As Integer
ReDim matrix(M_size - 1, M_size - 1) As Integer:k = 1 'initialize matrix element=0
For i = 1 To M_size
matrix(i - 1, i - 1) = Header(1, k): k = k + 1 'change diagonal values
Next i
Rng = Application.WorksheetFunction.MMult(Rng, matrix)'multiply 2 matrices
End Sub
.
Надеюсь, это поможет!