将每列中的值乘以每列中的第二个单元格
Multiply values in each column by second cell in each column
我有一个 sheet,其中包含:第 1 行:检查容器的日期
第 2 行:特定日期每个坏蛋的平均公斤数
下面第 3 行:每个容器提取的袋子数量。
我的测试 table 的范围是 A1:D8
我试图将此 table 从 "Sheet1" 复制到 "Sheet2",同时计算特定日期每个容器的重量乘以袋数每个容器。
我能够用一个固定值计算单元格。但是,我正在努力如何将下面第 3 行中的每一列乘以第 2 行中的值。
Private Sub CommandButton1_Click()
Dim ws1 As Worksheet
Dim ws2 As Worksheet
Dim rng As Range
Dim myVal As Range
Set ws1 = Worksheets("Sheet1")
Set ws2 = Worksheets("Sheet2")
Set rng = ws2.Range("A3:D8")
Sheets("Sheet1").Range("A3:D8").Copy Destination:=Sheets("Sheet2").Range("A8:D3")
For Each myVal In rng
myVal = myVal.Value * ws1.Range("A1")
Next myVal
End Sub
据我了解,这可能是您需要的:
在下面的代码中,我将创建一个矩阵来执行 2 个矩阵的乘法,而不是遍历每个单元格,然后使用 MMULT 函数 return 结果(见我的图片)
注意:这种做法可能不是很有效,只是临时想到的。
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
.
希望对您有所帮助!
如果能通过公式阶段就简单了:
Private Sub CommandButton1_Click()
Dim ws1 As Worksheet
Dim ws2 As Worksheet
Dim rng As Range
Dim myVal As Range
Set ws1 = Worksheets("Sheet1")
Set ws2 = Worksheets("Sheet2")
Set rng = ws2.Range("A3:D8")
Sheets("Sheet1").Range("A3:D8").Copy Destination:=rng
rng.FormulaR1C1="='Sheet1'!R[0]C[0] * 'Sheet1'!R2C[0]"
For Each myVal In rng
myVal.Formula = myVal.Value
Next myVal
End Sub
另外,如果不需要每次都复制格式,可以去掉.Copy
语句。
我有一个 sheet,其中包含:第 1 行:检查容器的日期 第 2 行:特定日期每个坏蛋的平均公斤数 下面第 3 行:每个容器提取的袋子数量。 我的测试 table 的范围是 A1:D8
我试图将此 table 从 "Sheet1" 复制到 "Sheet2",同时计算特定日期每个容器的重量乘以袋数每个容器。 我能够用一个固定值计算单元格。但是,我正在努力如何将下面第 3 行中的每一列乘以第 2 行中的值。
Private Sub CommandButton1_Click()
Dim ws1 As Worksheet
Dim ws2 As Worksheet
Dim rng As Range
Dim myVal As Range
Set ws1 = Worksheets("Sheet1")
Set ws2 = Worksheets("Sheet2")
Set rng = ws2.Range("A3:D8")
Sheets("Sheet1").Range("A3:D8").Copy Destination:=Sheets("Sheet2").Range("A8:D3")
For Each myVal In rng
myVal = myVal.Value * ws1.Range("A1")
Next myVal
End Sub
据我了解,这可能是您需要的:
在下面的代码中,我将创建一个矩阵来执行 2 个矩阵的乘法,而不是遍历每个单元格,然后使用 MMULT 函数 return 结果(见我的图片)
注意:这种做法可能不是很有效,只是临时想到的。
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
.
希望对您有所帮助!
如果能通过公式阶段就简单了:
Private Sub CommandButton1_Click()
Dim ws1 As Worksheet
Dim ws2 As Worksheet
Dim rng As Range
Dim myVal As Range
Set ws1 = Worksheets("Sheet1")
Set ws2 = Worksheets("Sheet2")
Set rng = ws2.Range("A3:D8")
Sheets("Sheet1").Range("A3:D8").Copy Destination:=rng
rng.FormulaR1C1="='Sheet1'!R[0]C[0] * 'Sheet1'!R2C[0]"
For Each myVal In rng
myVal.Formula = myVal.Value
Next myVal
End Sub
另外,如果不需要每次都复制格式,可以去掉.Copy
语句。