Excel VBA在表中查找

时间:2016-01-17 19:38:28

标签: excel vba excel-vba

我在Excel工作表(Col A:姓氏; Col B:名字)和会员表中列出了活动参与者,其中包含与生日和性别相同的加信息列。

不,我想循环浏览事件列表,并对参与者的生日/性别做一些操作。我可以在MySQL中表达它

SELECT birthdate, sex FROM members WHERE lastname = LASTNAME AND firstname = FIRSTNAME 

LASTNAME& FIRSTNAME从参与者表中提取。我可以弄清楚如何通过事件表创建一个循环但我在如何从成员资格表中提取数据时遇到了麻烦。

我只是不习惯使用Excel VBA,所以任何帮助启动我都会非常感激

到目前为止,我得到了循环:

Dim participantCount As Integer
Dim sh As Worksheet
Dim rw As Range

Set sh = Sheets(INP_tblakt.Value)
For Each rw In sh.Rows

    If sh.Cells(rw.Row, 1).Value = "" And sh.Cells(rw.Row, 2).Value = "" Then
        Exit For
    End If

   participantCount = participantCount + 1
Next rw

编辑:清除

我得到了上面的循环,我想插入"函数"在另一张表中查找A? = sh.Cells(rw.Row,1)B? = sh.Cells(rw.Row,2)的行,以便我可以从D获取值?和E?用它来进一步计算。 VBA函数Find仅支持一个Colum的匹配。我现在找到MATCH和IDEX,但无法成功实现它们。 (希望这有助于理解这个问题,提前感谢您的帮助)

1 个答案:

答案 0 :(得分:0)

假设成员表是Excel表,您可以将 MATCH OFFSET 结合起来你需要。可能有更快的方法,但这就是我得到的。

考虑下表(在同一张表上截图):
TableSample
C3是具有公式的单元格,用于查找与成员表中的FirstName A3和LastName B3匹配的DOB。

公式为:

=IF(MATCH(A3,members[FirstName],0)=MATCH(B3,members[LastName],0),
OFFSET(members[[#Headers],[DOB]],MATCH(A3,members[FirstName],0),0),
"No Match")

由于我们需要精确匹配2个字段(FirstName和LastName),因此我们需要Matches位于相同位置。因此条件是:MATCH(A3,members[FirstName],0)=MATCH(B3,members[LastName],0)

找到完全匹配后,我们可以使用OFFSET找到我们要提取的字段中的第n行:
OFFSET(members[[#Headers],[DOB]],MATCH(A3,members[FirstName],0),0)
这意味着从表成员的匹配行中获取值与标题" DOB "。将文本DOB更改为查找表的所需标题名称。

否则"不匹配"归还。
SampleResult