Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.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
Vba 查找在两个不同列中包含两个单元格值的行_Vba_Excel - Fatal编程技术网

Vba 查找在两个不同列中包含两个单元格值的行

Vba 查找在两个不同列中包含两个单元格值的行,vba,excel,Vba,Excel,我编写了一对If语句来检查两列中两个单元格的值(例如,检查a列中的B3.value,检查g列中的B2.value),只是为了意识到这不会返回基于同一行中存在的那些值的结果,而是仅当它们在表中存在时才返回结果 我的目标是让代码检查a列中是否存在B3.Value和G列中是否存在B2.Value的行。这些列位于表的DataodyRange中(因为范围是动态的)。现在,我得到的错误代码是 Dim tblData As ListObject Dim checkDate As Date Dim report

我编写了一对If语句来检查两列中两个单元格的值(例如,检查a列中的B3.value,检查g列中的B2.value),只是为了意识到这不会返回基于同一行中存在的那些值的结果,而是仅当它们在表中存在时才返回结果

我的目标是让代码检查a列中是否存在B3.Value和G列中是否存在B2.Value的行。这些列位于表的DataodyRange中(因为范围是动态的)。现在,我得到的错误代码是

Dim tblData As ListObject
Dim checkDate As Date
Dim reportSup As Range
Dim reportDate As Range

Set tblData = Worksheets("Data").ListObjects(1)
Set reportSup = Worksheets("Daily").Range("B2")
Set reportDate = Worksheets("Daily").Range("B3")

  checkDate = WorksheetFunction.Max(Worksheets("Data") _
    .ListObjects("Data") _
    .ListColumns("Date") _
    .DataBodyRange)

  If reportDate.Value = checkDate Then

    If Not IsError(Application.Match(reportSup.Value, _
      tblData.ListColumns(7).DataBodyRange, 0)) Then

      MsgBox "You have already reported for this period. " & _
        "Please enter a different date."
      reportDate.Select
      Exit Sub

    End If

  End If

我不确定是否应该使用EVALUATE或INDEX来查找满足这两个条件的行,以便如果该行存在,则弹出MsgBox,否则继续执行其余代码。

如果我正确理解了您的问题,这就是您想要的。它使用Find查找A列中的B3值,然后检查相应的G列值。我假设这只能发生一次,所以如果不是这样的话,代码需要修改

Sub x()

Dim tblData As ListObject
Dim reportSup As Range
Dim reportDate As Range, rFind As Range, s As String

Set tblData = Worksheets("Data").ListObjects(1)
Set reportSup = Worksheets("Daily").Range("B2")
Set reportDate = Worksheets("Daily").Range("B3")

With tblData.ListColumns(1).DataBodyRange
    Set rFind = .Find(What:=reportDate, LookAt:=xlWhole, MatchCase:=False, SearchFormat:=False)
    If Not rFind Is Nothing Then
        s = rFind.Address
        Do
            If rFind.Offset(, 6).Value = reportSup.Value Then
                MsgBox "Both values found in row " & rFind.Row
                Exit Sub
            Else
                Set rFind = .FindNext(rFind)
            End If
         Loop While rFind.Address <> s
    End If
End With

End Sub
subx()
将tblData设置为列表对象
Dim报告SUP As范围
Dim reportDate作为范围,rFind作为范围,s作为字符串
设置tblData=工作表(“数据”)。列表对象(1)
Set reportSup=工作表(“每日”)。范围(“B2”)
设置报告日期=工作表(“每日”)。范围(“B3”)
使用tblData.ListColumns(1.dataodyrange)
设置rFind=.Find(What:=reportDate,LookAt:=xlother,MatchCase:=False,SearchFormat:=False)
如果不是,那么rFind什么都不是
s=查找地址
做
如果rFind.Offset(,6).Value=reportSup.Value,则
MsgBox“在行中找到两个值”&rFind.row
出口接头
其他的
设置rFind=.FindNext(rFind)
如果结束
在rFind.Address s时循环
如果结束
以
端接头

我被“我的目标是让代码检查a列中是否存在B3.Value和G列中是否存在B2.Value的行。这些列位于表的DataodyRange中(因为范围将是动态的)”弄糊涂了。“您能帮我再次理解您的目标吗。也许以电子表格的形式显示一个例子?是否
工作表(Sheet1).范围(“B3”).值
存在于
工作表(Sheet2).列表对象(1).列表列(1).数据源范围
,并且在同一行中有``工作表(Sheet1).范围(“B2”).值`存在于
工作表(Sheet2).列表对象(1).列表列(7).DataBodyRange
TRUE/false列A和列G都有重复值(例如,日期可以在列A中出现多次,字符串可以在列G中出现多次),但是两者的组合应该是唯一的。(例如,A列中可能有多行包含昨天的日期,但其中只有一行可以包含g列中的字符串“Person 1”)。我将对此进行测试并与您联系!