【问题标题】:Finding the row that contains two cell values in two different columns在两个不同的列中查找包含两个单元格值的行
【发布时间】:2018-07-19 20:30:41
【问题描述】:

我编写了一对 If 语句来检查两个单元格中的两个列的值(例如,检查 A 列的 B3.Value,检查 G 列的 B2.Value),只是意识到这不会返回结果基于存在于同一行中的那些值,但前提是它们完全存在于表中。

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

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,否则继续执行其余代码。

【问题讨论】:

  • 我对“我的目标是让代码检查是否存在 A 列中的 B3.Value 和 G 列中的 B2.Value 的行感到困惑。这些列位于 DataBodyRange表(因为范围将是动态的)。”你能帮我再次理解你的目标吗?也许以电子表格的形式展示一个示例?
  • Worksheets(Sheet1).Range("B3").Value 是否存在于Worksheets(Sheet2).ListObjects(1).ListColumns(1).DataBodyRange 中并且 在同一行中 是否存在 ``Worksheets(Sheet1).Range("B2").Value` 存在于@987654324 @真/假

标签: vba excel


【解决方案1】:

如果我正确理解了您的问题,这就是您想要的。它使用 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

【讨论】:

  • A 列和 G 列都有重复值(例如,日期可以在 A 列中出现多次,字符串可以在 G 列中出现多次),但是两者的组合应该是唯一的。 (例如,A 列中可能有多行包含昨天的日期,但其中只有一个行可以包含 G 列中的字符串“Person 1”。)我会对此进行测试并回复您!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-02
  • 2013-10-18
  • 2022-01-15
  • 2010-11-07
  • 2016-12-27
相关资源
最近更新 更多