Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 查找匹配值的行号并存储在变量中_Excel_Match_Row_Vba - Fatal编程技术网

Excel 查找匹配值的行号并存储在变量中

Excel 查找匹配值的行号并存储在变量中,excel,match,row,vba,Excel,Match,Row,Vba,根据输入值,我想在表中查找单元格,并将行号存储在变量中。此变量将用于将下一列中的相应值与输入编号相乘。到目前为止,我的代码是: 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

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

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
试试这个

    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

.Find()
函数可以工作吗?类似于
rownumber=Sheets(“用户界面”).Range(“L5:L345”).Find(What:=Sheets(“用户界面”).Range(“K27”).Value,LookIn:=xlValues,LookAt:=xlother)。Row
可能吗?您也可以尝试某种形式的错误捕获。您可能会收到错误9,因为没有匹配项,或者您的匹配项为“N/a”。请尝试使用
应用程序。匹配
,然后使用
如果IsError(rownumber)=False,则代码Else MsgBox(“未找到值”)。如果
,则结束。当
WorksheetFunction.MATCH
找不到值时,它将抛出运行时错误9
Application.MATCH
也会抛出一个错误,但该错误将被分配到您可以捕获的
rownumber
。函数
.Find()
会工作吗?类似于
rownumber=Sheets(“用户界面”).Range(“L5:L345”).Find(What:=Sheets(“用户界面”).Range(“K27”).Value,LookIn:=xlValues,LookAt:=xlother)。Row
可能吗?您也可以尝试某种形式的错误捕获。您可能会收到错误9,因为没有匹配项,或者您的匹配项为“N/a”。请尝试使用
应用程序。匹配
,然后使用
如果IsError(rownumber)=False,则代码Else MsgBox(“未找到值”)。如果
,则结束。当
WorksheetFunction.MATCH
找不到值时,它将抛出运行时错误9
Application.MATCH
也会抛出一个错误,但该错误将被分配到
rownumber
,您可以捕获该错误。您好,Maddy,谢谢您的建议。我试着实现这个:dim'ed strofind作为variant,Rng,Rng1作为range,然后variant。在这两种情况下,我仍然得到“下标超出范围”-我的查找范围错误。即“Set Rng=ThisWorkbook.Sheets(“C-type”).Range(“L5:L345”)行。关于如何尝试排除故障有什么建议吗?Maddy,谢谢!问题实际上是“C-type”名称中的连字符。改成Ctype,现在可以用了。你好,麦迪,谢谢你的建议。我试着实现这个:dim'ed strofind作为variant,Rng,Rng1作为range,然后variant。在这两种情况下,我仍然得到“下标超出范围”-我的查找范围错误。即“Set Rng=ThisWorkbook.Sheets(“C-type”).Range(“L5:L345”)行。关于如何尝试排除故障有什么建议吗?Maddy,谢谢!问题实际上是“C-type”名称中的连字符。将其更改为Ctype,现在可以工作了。