找到匹配值的行号并存储在变量中
根据输入值,我想在表中找到单元格,并将行号存储在变量中。该变量将用于将下一列中的相应值与输入数字相乘。到目前为止我的代码:找到匹配值的行号并存储在变量中
Option Explicit
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
rownumber = WorksheetFunction.Match(Sheets("User Interface").Range("K27").Value, Sheets("C-type").Range("L5:L345"), 0)
Mx = Sheets("User Interface").Range("K27").Value * Sheets("C-type").Range("M" & rownumber).Value
Nx = Sheets("User Interface").Range("K27").Value * Sheets("C-type").Range("N" & rownumber).Value
Ox = Sheets("User Interface").Range("K27").Value * Sheets("C-type").Range("O" & rownumber).Value
Px = Sheets("User Interface").Range("K27").Value * Sheets("C-type").Range("P" & rownumber).Value
Qx = Sheets("User Interface").Range("K27").Value * Sheets("C-type").Range("Q" & rownumber).Value
Rx = Sheets("User Interface").Range("K27").Value * Sheets("C-type").Range("R" & rownumber).Value
cat = Array(Mx, Nx, Ox, Px, Qx, Rx)
low = Application.WorksheetFunction.Min(cat)
Sheets("User Interface").Range("C45").Value = low
Sheets("User Interface").Range("c45").Activate
Application.Goto ActiveCell.EntireRow, True
End Sub
的问题是,我得到标超出范围错误在我的匹配功能,因此我开始怀疑,这是去了解它的正确方法。我需要以某种方式能够引用表中匹配号码的行号,任何建议将不胜感激。
尝试这个
strToFind = ThisWorkbook.Sheets("User Interface").Range("K27").Value
Set Rng = ThisWorkbook.Sheets("C-type").Range("L5:L345")
If Application.WorksheetFunction.CountIf(Rng, strToFind) > 0 Then
Set Rng1 = Rng.Find(strToFind, LookIn:=xlValues, LookAt:=xlWhole)
rownumber = Rng1.Row
Else
MsgBox strToFind & " does not exist in range " & Rng.Address
End If
你好Maddy,谢谢你的建议。我试图实现这一点:dim'ed strToFind作为变体和Rng,Rng1作为范围然后变体。在这两种情况下,我仍然得到“下标超出范围” - 在我的查找范围内发生了错误。即Set Rng = ThisWorkbook.Sheets(“C-type”)。Range(“L5:L345”)'line。有关如何尝试排除故障的任何建议? –
是工作表名称**“C型”**正确吗? – Maddy
Maddy谢谢你!问题实际上是名为“C型”的连字符。将其更改为Ctype,现在它可以工作。 –
将在'.Find()'函数的工作?例如'rownumber = Sheets(“User Interface”)。Range(“L5:L345”)。Find(What:= Sheets(“User Interface”)。Range(“K27”)。Value,LookIn:= xlValues,LookAt := xlWhole).Row'也许? – Tyeler
您也可以尝试某种形式的错误捕获。您可能会收到错误9,因为没有匹配,或者您的匹配是#N/A。尝试使用'Application.Match',然后使用'If IsError(rownumber)= False'然后您的代码Else MsgBox(“Value not found。”)End If'。当'WorksheetFunction.MATCH'找不到值时,它会抛出运行时错误9.'Application.MATCH'也会抛出一个错误,但错误将被分配给'rownumber',您可以捕获它。 – Tyeler