计算单元格并存储在数组中以找到最小值; "min"-函数出问题
Calculating cells and storing in array to find the smallest value; "min"-function gives problems
我正在尝试根据用户输入从 table 中计算产品的最便宜替代品。
代码应该是
a) 输入一个数字,产品尺寸(来自用户界面中的 K19 sheet)并将其与 table 中的正确行相匹配,以便找到该尺寸的不同备选方案。
b) 将特定成本乘以规模以获得每个备选方案的总成本(因此变体 Mx、Nx 等是每个备选方案的特定成本)。
c) 将总成本存储在一个数组中,并找到这些数字中的最小值,在用户界面的 C45 中返回给用户。
描述的代码示例:
Sub Calculate()
Dim var As Variant
Dim rownumber As Integer
Dim Mx As Variant
Dim Nx As Variant
Dim Ox As Variant
Dim Px As Variant
Dim Qx As Variant
Dim Rx As Variant
Dim low As Variant
Dim cat As Variant
var = Range(WorksheetFunction.Match(Sheets("User Interface").Range("K19"), Sheets("C-type").Range("L1:L10000"), 0)).Value
rownumber = var.Row
Mx = var * Range("M" & rownumber).Value
Nx = var * Range("N" & rownumber).Value
Ox = var * Range("O" & rownumber).Value
Px = var * Range("P" & rownumber).Value
Qx = var * Range("Q" & rownumber).Value
Rx = var * Range("R" & rownumber).Value
cat = Array("Mx", "Nx", "Ox", "Px", "Qx", "Rx")
low = Min(cat).Value
Sheets("User Interface").Range("C45").Value = low
Sheets("User Interface").Range("c45").Activate
Application.Goto ActiveCell.EntireRow, True
End Sub
问题是 VBA 在 low = Min(cat).Value
处给出错误 ("sub or function not defined"),即使根据我的发现我认为我使用了正确的语法。到目前为止,我找不到任何可行的解决方案。谁能帮我解决问题?
非常感谢!
您是否尝试使用 WorksheetFunction.Min
?
- 当使用 Excel 函数时
Min
你必须写 WorksheetFunction.Min
或 Application.Min
;
- 不要在函数
Min
; 上使用 .value
- 您的
low
值将始终为 0,因为您的数组不包含任何值...改为 cat = Array(Mx, Nx, Ox, Px, Qx, Rx)
low = Application.WorksheetFunction.Min(cat)
这段代码应该有所帮助。
代码有一些错误。
Sub Calculate()
Dim var As Variant
Dim rownumber As Integer
Dim Mx As Variant
Dim Nx As Variant
Dim Ox As Variant
Dim Px As Variant
Dim Qx As Variant
Dim Rx As Variant
Dim low As Variant
Dim cat As Variant
var = Range(WorksheetFunction.Match(Sheets("User Interface").Range("K19"), Sheets("C-type").Range("L1:L10000"), 0)).Value
'<~~ range error
rownumber = var.Row
Mx = var * Range("M" & rownumber).Value
Nx = var * Range("N" & rownumber).Value
Ox = var * Range("O" & rownumber).Value
Px = var * Range("P" & rownumber).Value
Qx = var * Range("Q" & rownumber).Value
Rx = var * Range("R" & rownumber).Value
'cat = Array("Mx", "Nx", "Ox", "Px", "Qx", "Rx")
cat = Array(Mx, Nx, Ox, Px, Qx, Rx) '<~~ quote is not need
low = WorksheetFunction.Min(cat) '<~~ use WorksheetFunction
Sheets("User Interface").Range("C45").Value = low
Sheets("User Interface").Range("c45").Activate
Application.Goto ActiveCell.EntireRow, True
End Sub
我正在尝试根据用户输入从 table 中计算产品的最便宜替代品。 代码应该是 a) 输入一个数字,产品尺寸(来自用户界面中的 K19 sheet)并将其与 table 中的正确行相匹配,以便找到该尺寸的不同备选方案。 b) 将特定成本乘以规模以获得每个备选方案的总成本(因此变体 Mx、Nx 等是每个备选方案的特定成本)。 c) 将总成本存储在一个数组中,并找到这些数字中的最小值,在用户界面的 C45 中返回给用户。
描述的代码示例:
Sub Calculate()
Dim var As Variant
Dim rownumber As Integer
Dim Mx As Variant
Dim Nx As Variant
Dim Ox As Variant
Dim Px As Variant
Dim Qx As Variant
Dim Rx As Variant
Dim low As Variant
Dim cat As Variant
var = Range(WorksheetFunction.Match(Sheets("User Interface").Range("K19"), Sheets("C-type").Range("L1:L10000"), 0)).Value
rownumber = var.Row
Mx = var * Range("M" & rownumber).Value
Nx = var * Range("N" & rownumber).Value
Ox = var * Range("O" & rownumber).Value
Px = var * Range("P" & rownumber).Value
Qx = var * Range("Q" & rownumber).Value
Rx = var * Range("R" & rownumber).Value
cat = Array("Mx", "Nx", "Ox", "Px", "Qx", "Rx")
low = Min(cat).Value
Sheets("User Interface").Range("C45").Value = low
Sheets("User Interface").Range("c45").Activate
Application.Goto ActiveCell.EntireRow, True
End Sub
问题是 VBA 在 low = Min(cat).Value
处给出错误 ("sub or function not defined"),即使根据我的发现我认为我使用了正确的语法。到目前为止,我找不到任何可行的解决方案。谁能帮我解决问题?
非常感谢!
您是否尝试使用 WorksheetFunction.Min
?
- 当使用 Excel 函数时
Min
你必须写WorksheetFunction.Min
或Application.Min
; - 不要在函数
Min
; 上使用 - 您的
low
值将始终为 0,因为您的数组不包含任何值...改为cat = Array(Mx, Nx, Ox, Px, Qx, Rx)
.value
low = Application.WorksheetFunction.Min(cat)
这段代码应该有所帮助。
代码有一些错误。
Sub Calculate()
Dim var As Variant
Dim rownumber As Integer
Dim Mx As Variant
Dim Nx As Variant
Dim Ox As Variant
Dim Px As Variant
Dim Qx As Variant
Dim Rx As Variant
Dim low As Variant
Dim cat As Variant
var = Range(WorksheetFunction.Match(Sheets("User Interface").Range("K19"), Sheets("C-type").Range("L1:L10000"), 0)).Value
'<~~ range error
rownumber = var.Row
Mx = var * Range("M" & rownumber).Value
Nx = var * Range("N" & rownumber).Value
Ox = var * Range("O" & rownumber).Value
Px = var * Range("P" & rownumber).Value
Qx = var * Range("Q" & rownumber).Value
Rx = var * Range("R" & rownumber).Value
'cat = Array("Mx", "Nx", "Ox", "Px", "Qx", "Rx")
cat = Array(Mx, Nx, Ox, Px, Qx, Rx) '<~~ quote is not need
low = WorksheetFunction.Min(cat) '<~~ use WorksheetFunction
Sheets("User Interface").Range("C45").Value = low
Sheets("User Interface").Range("c45").Activate
Application.Goto ActiveCell.EntireRow, True
End Sub