Excel 如何在多个条件下执行多数组查找?正在尝试查找缺少的值

Excel 如何在多个条件下执行多数组查找?正在尝试查找缺少的值,excel,vba,Excel,Vba,好的,这是我到目前为止的代码: Option Explicit Sub Check_Transactions7() Dim wb As Workbook: Set wb = ThisWorkbook ' workbook containing this code Dim cws As Worksheet: Set cws = wb.Worksheets("Transactions") Dim dws As Worksheet: S

好的,这是我到目前为止的代码:

Option Explicit

Sub Check_Transactions7()
    
    Dim wb As Workbook: Set wb = ThisWorkbook ' workbook containing this code
    
    Dim cws As Worksheet: Set cws = wb.Worksheets("Transactions")
    Dim dws As Worksheet: Set dws = wb.Worksheets("Transac Check")
    
    Dim sName As String: sName = dws.Range("D1").Value
    Dim sws As Worksheet: Set sws = wb.Worksheets(sName)
    Dim srg As Range: Set srg = sws.Range("C4:G" & sws.Range("I1").Value)
    Dim Data As Variant: Data = srg.Value
        
    Dim i As Long, k As Long
    For i = 1 To UBound(Data, 1)
        If Application.Evaluate("(Transactions!P:P = " & Data(i, 1) & ") *" & _
           "(Transactions!L:L = " & Data(i, 4) & ") *" & _
           "(Transactions!Q:Q = " & Data(i, 5) & ")") = 0 Then
            k = k + 1
            Data(k) = Data(i)
        End If
    Next i
    
    dws.Range("N2").Resize(k, 5).Value = Data

End Sub
它在If语句的一个条件下运行良好,但当我尝试重新创建类似于此公式的内容时:

=ISNA(MATCH(1, (Transactions!P:P = C4)*(Transactions!L:L = F4)*(Transactions!Q:Q = G4), 0))
它给我一个类型不匹配错误

如何调整If语句使其工作

谢谢:)


编辑:作为澄清,类型不匹配错误显示在If语句中。我也尝试过使用COUNTIF,但它与我尝试重新创建的公式不一样。公式正在尝试查找缺少的值。

与原始方法没有太大差异

(未经测试,但您应该了解总体思路)

Sub-Check\u事务7()
'公式模板
Const f=“MAX((事务!P:P=)*(事务!L:L=)*(事务!Q:Q=)”
将wb作为工作簿,cws作为工作表,dws作为工作表
Dim sName作为字符串,sws作为工作表,srg作为范围,数据作为变量
暗i为长,k为长,frm为长,col为长
设置wb=ThisWorkbook包含此代码的工作簿
设置cws=wb.工作表(“事务”)
设置dws=wb.工作表(“交易检查”)
sName=dws.范围(“D1”).值
设置sws=wb.工作表(sName)
设置srg=sws.Range(“C4:G”和sws.Range(“I1”)值)
数据=srg.值
k=0
对于i=1到uBond(数据,1)
'使用单元格地址而不是值构建公式,以避免
“必须弄清楚是否需要报价。。。
frm=Replace(f,“,srg.Cells(i,1.Address())
frm=Replace(frm,“,srg.Cells(i,4.Address())
frm=Replace(frm,“,srg.Cells(i,5.Address())
'确保在正确的上下文中计算公式
'Application.Evaluate使用Activesheet,而Activesheet可能不会
“做你想要的人。
如果sws.Evaluate(frm)=0,则
k=k+1
对于col=1到UBound(数据,2)
数据(k,col)=数据(i,col)
下一列
如果结束
接下来我
dws.Range(“N2”)。调整大小(k,5)。值=数据
端接头

不要偏离您原来的方法太远

(未经测试,但您应该了解总体思路)

Sub-Check\u事务7()
'公式模板
Const f=“MAX((事务!P:P=)*(事务!L:L=)*(事务!Q:Q=)”
将wb作为工作簿,cws作为工作表,dws作为工作表
Dim sName作为字符串,sws作为工作表,srg作为范围,数据作为变量
暗i为长,k为长,frm为长,col为长
设置wb=ThisWorkbook包含此代码的工作簿
设置cws=wb.工作表(“事务”)
设置dws=wb.工作表(“交易检查”)
sName=dws.范围(“D1”).值
设置sws=wb.工作表(sName)
设置srg=sws.Range(“C4:G”和sws.Range(“I1”)值)
数据=srg.值
k=0
对于i=1到uBond(数据,1)
'使用单元格地址而不是值构建公式,以避免
“必须弄清楚是否需要报价。。。
frm=Replace(f,“,srg.Cells(i,1.Address())
frm=Replace(frm,“,srg.Cells(i,4.Address())
frm=Replace(frm,“,srg.Cells(i,5.Address())
'确保在正确的上下文中计算公式
'Application.Evaluate使用Activesheet,而Activesheet可能不会
“做你想要的人。
如果sws.Evaluate(frm)=0,则
k=k+1
对于col=1到UBound(数据,2)
数据(k,col)=数据(i,col)
下一列
如果结束
接下来我
dws.Range(“N2”)。调整大小(k,5)。值=数据
端接头

您的具体代码尝试是什么导致类型不匹配?Do`Data(i,4)`需要括号,因为将计算为
=xyz
可能需要是a”,然后是Data(i,4)和后面的相同。或者可能是Data(i,4)。单元格引用的地址?@BigBen if语句引发类型不匹配erro@Nathan_Sav数据(一,4)基本上只是返回一个数值,它不是单元格引用,所以我不这么认为?idkYou有
MATCH(0,
,所以您要查找不匹配的行?可能有助于准确解释您想要做什么,因为您的代码没有这样做…您的特定代码尝试是什么导致类型不匹配?do`Data(I,4)`需要括号,因为将计算为
=xyz
可能需要是一个“然后是数据(i,4),后面是相同的。或者可能是数据(i,4)。单元格引用的地址?@BigBen if语句抛出类型不匹配erro@Nathan_Sav数据(一,4)几乎只返回一个数值,它不是单元格引用,所以我不这么认为?idkYou有
MATCH(0,
,所以您正在查找不匹配的行?可能有助于准确解释您想要做什么,因为您的代码没有这样做…太棒了!这帮了大忙谢谢。太棒了!这帮了大忙谢谢您。