Vba 查找在两个不同列中包含两个单元格值的行
我编写了一对If语句来检查两列中两个单元格的值(例如,检查a列中的B3.value,检查g列中的B2.value),只是为了意识到这不会返回基于同一行中存在的那些值的结果,而是仅当它们在表中存在时才返回结果 我的目标是让代码检查a列中是否存在B3.Value和G列中是否存在B2.Value的行。这些列位于表的DataodyRange中(因为范围是动态的)。现在,我得到的错误代码是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
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”)。我将对此进行测试并与您联系!