2017-08-02 35 views
0

根据输入值,我想在表中找到单元格,并将行号存储在变量中。该变量将用于将下一列中的相应值与输入数字相乘。到目前为止我的代码:找到匹配值的行号并存储在变量中

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 

的问题是,我得到标超出范围错误在我的匹配功能,因此我开始怀疑,这是去了解它的正确方法。我需要以某种方式能够引用表中匹配号码的行号,任何建议将不胜感激。

+1

将在'.Find()'函数的工作?例如'rownumber = Sheets(“User Interface”)。Range(“L5:L345”)。Find(What:= Sheets(“User Interface”)。Range(“K27”)。Value,LookIn:= xlValues,LookAt := xlWhole).Row'也许? – Tyeler

+1

您也可以尝试某种形式的错误捕获。您可能会收到错误9,因为没有匹配,或者您的匹配是#N/A。尝试使用'Application.Match',然后使用'If IsError(rownumber)= False'然后您的代码Else MsgBox(“Value not found。”)End If'。当'WorksheetFunction.MATCH'找不到值时,它会抛出运行时错误9.'Application.MATCH'也会抛出一个错误,但错误将被分配给'rownumber',您可以捕获它。 – Tyeler

回答

1

尝试这个

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 
+0

你好Maddy,谢谢你的建议。我试图实现这一点:dim'ed strToFind作为变体和Rng,Rng1作为范围然后变体。在这两种情况下,我仍然得到“下标超出范围” - 在我的查找范围内发生了错误。即Set Rng = ThisWorkbook.Sheets(“C-type”)。Range(“L5:L345”)'line。有关如何尝试排除故障的任何建议? –

+1

是工作表名称**“C型”**正确吗? – Maddy

+0

Maddy谢谢你!问题实际上是名为“C型”的连字符。将其更改为Ctype,现在它可以工作。 –