2016-06-13 91 views
1

我一直在试图查找这个地方,我似乎无法找到答案或让它工作。VBA乘以两个命名范围

我的代码

'Define Variables for cell ranges' 
Dim BidItem As Range 
Dim BidItemDes As Range 
Dim BidItemUnit As Range 
Dim BidItemQTY As Range 
Dim BidItemUP As Range 

'Store the sheet range into the variables' 
Set BidItem = Sheets("BidItems").Range("A1:A" & Range("A1").End(xlDown).Row) 
Set BidItemDes = Sheets("BidItems").Range("B1:B" & Range("B1").End(xlDown).Row) 
Set BidItemUnit = Sheets("BidItems").Range("C1:C" & Range("C1").End(xlDown).Row) 
Set BidItemQTY = Sheets("BidItems").Range("D1:D" & Range("D1").End(xlDown).Row)  
Set BidItemUP = Sheets("BidItems").Range("E1:E" & Range("E1").End(xlDown).Row) 
Set BidItemValue = Sheets("BidItems").Range("F1:F" & Range("F1").End(xlDown).Row) 

Set BidItemValue = Sheets("BidItems").Range("F1:F" & Range("F1").End(xlDown).Row) 

我需要做的是在范围BidItemQTY的所有数据,并通过回答范围BidItemValue范围BidItemUP ,然后输出相乘。

我有最后一行代码设置来启动功能,但 我似乎无法掌握如何在VBA中使用变量来进行数学函数。

+0

难道你不能在列F中手动添加公式并向下拖动? '= $ D1 * $ E1' –

回答

2

考虑这个小小的例子:

Sub dural() 
    Dim second As Range 
    Dim first As Range, prodt As Long 

    Set first = Range("A1:A3") 
    Set second = Range("B1:B3") 
    prodt = Application.WorksheetFunction.SumProduct(first, second) 

    MsgBox prodt 
End Sub 

enter image description here

编辑#1:

为了获取存储在细胞中的个别产品,用途:

Sub dural() 
    Dim second As Range 
    Dim first As Range, prodt As Long 
    Dim third As Range 

    Set first = Range("A1:A3") 
    Set second = Range("B1:B3") 
    Set third = Range("C1:C3") 

    For i = 1 To 3 
     third(i, 1) = first(i, 1) * second(i, 1) 
    Next i 

End Sub 

enter image description here

注:

  • 由于范围不是单细胞,我们把它们当作二维
  • 有可能避免使用移调()的循环
  • 在这种情况下,一维也将工作:


For i = 1 To 3 
     third(i) = first(i) * second(i) 
Next i 
+0

看着Dans代码我以为他希望每个项目都有一个单独的值,因为'BidItemValue'变量覆盖了F列中的许多单元格。我可能是错的,但在这种情况下SUMPRODUCT绝对是答案。 –

+0

是的,我正在寻找它自己添加每一行的IE浏览器:F2 = D2 * E2,F3 = D3 * E3等 –

+0

@DanLopes看我**编辑#1:** –