多标准,多列匹配

时间:2015-06-03 11:00:15

标签: excel vba excel-vba

我正在尝试对多重匹配进行编码,以便在添加新记录之前检查表中是否存在记录。我一直在尝试使用'评估'来关注this示例。和'匹配'比较。我宁愿使用匹配而不是循环,因为最终表格可能非常大。

这是我到目前为止所做的:

Rem SheetString = Worksheets(WorkSite).Range("E1").Address(False, False, , True) & "&" & TblRng.Range(1, j).Offset(-5, 0).Address(False, False, , True) & "&" & TblRng.Range(1, j).Offset(-6, 0).Address(False, False, , True) & "&" & TblRng.Range(1, j).Offset(-2, 0).Address(False, False, , True)
SheetString = Worksheets(WorkSite).Range("E1").Address(False, False, , True) & "&" & _
    TblRng.Range(1, j).Offset(-5, 0).Address(False, False, , True) & "&" & _
    TblRng.Range(1, j).Offset(-6, 0).Address(False, False, , True) & "&" & _
    TblRng.Range(1, j).Offset(-2, 0).Address(False, False, , True)

Rem RangeString = TblTrspt.ListColumns(1).Range.Address(False, False, , True) & "&" & TblTrspt.ListColumns(2).Range.Address(False, False, , True) & "&" & TblTrspt.ListColumns(3).Range.Address(False, False, , True) & "&" & TblTrspt.ListColumns(4).Range.Address(False, False, , True)
RangeString = TblTrspt.ListColumns(1).Range.Address(False, False, , True) & "&" & _
    TblTrspt.ListColumns(2).Range.Address(False, False, , True) & "&" & _
    TblTrspt.ListColumns(3).Range.Address(False, False, , True) & "&" & _
    TblTrspt.ListColumns(4).Range.Address(False, False, , True)

Eval = Application.Evaluate("MATCH(" & SheetString & "," & RangeString & ",0)")

If IsError(Eval) Then
'add new item if not already in list

SheetString是标准,RangeString是要检查的表。它们需要一起检查,因为组合可能是唯一的,但每个字段将出现多次。

目前我无法编译这段代码,因为我得到了#34;应用程序定义的对象定义错误"在设置SheetString的行上。

1 个答案:

答案 0 :(得分:0)

假设WorkSitevariableTblRngRangeTblTrsptListObject;以下更改适用:

  1. 设置SheetString
  2.   

    目前我无法获得此代码进行编译   "应用程序定义的对象定义错误"在线上设置   SheetString。

    TblRng.Cells(1, j)替换为TblRng.Cells(1, j)TblRngRange而不是ListObject,按照:

      

    TblRng =工作表(WorkSite).Range(" Tbl"& WorkSite)

    With TblRng.Cells(1, j)
        SheetString = Worksheets(WorkSite).Range("E1").Address(External:=1)
        SheetString = SheetString & Chr(38) & .Offset(-5, 0).Address(External:=1)
        SheetString = SheetString & Chr(38) & .Offset(-6, 0).Address(External:=1)
        SheetString = SheetString & Chr(38) & .Offset(-2, 0).Address(External:=1)
    End With
    

    .Address(False, False, , True)替换为.Address(External:=1),因为只需要外部参考。 references是否“绝对”仅在公式将写入工作表并进一步复制时才有意义。

    1. 设置RangeString
    2. With TblTrspt RangeString = .ListColumns(1).Range.Address RangeString = RangeString & Chr(38) & .ListColumns(2).Range.Address RangeString = RangeString & Chr(38) & .ListColumns(3).Range.Address RangeString = RangeString & Chr(38) & .ListColumns(4).Range.Address End With

      .Address(False, False, , True)替换为.Address,与先前的评论一致。同样在这种情况下,External References不需要Evaluate Method,因为Worksheet ListObject位于TblTrspt {/ 1}}。

      1. 要将Evaluate Method应用于TblTrspt所在的工作表。

        Eval = TblTrspt.Parent.Evaluate("MATCH(" & SheetString & "," & RangeString & ",0)")
        
      2. Application.Evaluate

        替换TblTrspt.Parent.Evaluate