gpt4 book ai didi

Excel vba - 查找列数据所在的行号(多个子句)

转载 作者:行者123 更新时间:2023-12-02 09:11:44 34 4
gpt4 key购买 nike

我需要 VBA 中的一个函数来根据 2 个 where 子句查找行号。

这是 Excel 示例:

**     A      B      C      D**
1 id1 day1 val1 xxx
2 id2 day1 val2 xxx
3 id3 day1 val3 xxx
4 id1 day2 val1 xxx
5 id2 day2 val2 xxx
6 id3 day2 val3 xxx

我需要找到行号(在本例中行号为 2),其中 B =“day1”且 A =“id2”。

根据行号,我需要进一步获取其他列的值,即C2、D2

希望问题是清楚的。

谢谢!

最佳答案

通过这样的数据设置,您可以使用 MATCH 函数来获取行号:

=MATCH(1,INDEX(($A$1:$A$6="id2")*($B$1:$B$6="day1"),),0)

如果这些条件没有匹配项,公式将返回 #N/A 错误。您还可以将条件更改为单元格引用,例如:

=MATCH(1,INDEX(($A$1:$A$6=F1)*($B$1:$B$6=G1),),0)

对于问题的第二部分,返回包含找到的行号的值,您可以使用 INDEX 函数从列返回值。因此,假设匹配公式位于单元格 H1 中,这两个公式将分别返回 C 列和 D 列中的值:

=INDEX($C$1:$C$6,H1)
=INDEX($D$1:$D$6,H1)

或者,您可以将它们全部放入一个公式中:

=INDEX($C$1:$C$6,MATCH(1,INDEX(($A$1:$A$6=F1)*($B$1:$B$6=G1),),0))

如果您不想查看错误,可以在 excel 2007+ 上使用 IFERROR

=IFERROR(INDEX($C$1:$C$6,MATCH(1,INDEX(($A$1:$A$6=F1)*($B$1:$B$6=G1),),0)),"No Matches")

Excel 2003 及更低版本的错误检查:

=IF(ISNA(MATCH(1,INDEX(($A$1:$A$6=F1)*($B$1:$B$6=G1),),0)),"No Matches",INDEX($C$1:$C$6,MATCH(1,INDEX(($A$1:$A$6=F1)*($B$1:$B$6=G1),),0)))

[编辑]:我根据用户请求提供了一个 VBA 解决方案。这使用了查找循环,该循环非常高效且灵活,并展示了如何在找到匹配项后从其他列中提取值:

Sub tgr()

Dim rngFound As Range
Dim strFirst As String
Dim strID As String
Dim strDay As String

strID = "id2"
strDay = "day1"

Set rngFound = Columns("A").Find(strID, Cells(Rows.Count, "A"), xlValues, xlWhole)
If Not rngFound Is Nothing Then
strFirst = rngFound.Address
Do
If LCase(Cells(rngFound.Row, "B").Text) = LCase(strDay) Then
'Found a match
MsgBox "Found a match at: " & rngFound.Row & Chr(10) & _
"Value in column C: " & Cells(rngFound.Row, "C").Text & Chr(10) & _
"Value in column D: " & Cells(rngFound.Row, "D").Text
End If
Set rngFound = Columns("A").Find(strID, rngFound, xlValues, xlWhole)
Loop While rngFound.Address <> strFirst
End If

Set rngFound = Nothing

End Sub

关于Excel vba - 查找列数据所在的行号(多个子句),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18262403/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com