在excel中查找满足多个条件的单元格地址

时间:2017-12-21 01:56:00

标签: arrays excel

亲爱的excel专家,

我想找到满足几种条件的某个细胞的地址。

例如:

name       date     type   date     type    date    type
John    2018-01-01  b   2018-03-01  d   2018-02-01  a
Kyle    2018-01-01  a   2018-02-01  b   2018-04-01  b
Kate    2018-02-01  c   2018-01-01  d   2018-05-01  c
Mattew  2018-01-01  c   2018-03-01  a   2018-06-01  d

在上面的表格中,

条件1是日期。 条件2是类型。

通过使用这两个条件,我需要找到相应名称的地址。

例如:

Cond.1:2018-01-01 条件2:a 结果:约翰

你可以给我一些建议吗?

非常感谢。

1 个答案:

答案 0 :(得分:0)

假设你的数据是这样的:

  A       B            C      D            E       F           G
1 name    date         type   date         type    date        type
2 John    2018-01-01   b      2018-03-01   d       2018-02-01  a
3 Kyle    2018-01-01   a      2018-02-01   b       2018-04-01  b
4 Kate    2018-02-01   c      2018-01-01   d       2018-05-01  c
5 Mattew  2018-01-01   c      2018-03-01   a       2018-06-01  d
6
7 Date   2018-01-01
8 Type   a
9 Result ???

然后下面的VBA代码可以工作,(我已经对每行代码进行了解释,以解释发生了什么。)不知道你对VBA有多自信,如果太过分,那就道歉了。这可能是一种更优雅的方式,但是根据您的数据结构,我发现在一个公式中很难做到....

Sub IdentifyName()

Dim condition1 As Variant '' date
Dim condition2 As Variant '' type
Dim rng As Range '' where the data is
Dim cel As Range
Dim cel2 As Range
Dim rownum As Variant '' what row the matched date lies on
Dim rownum2 As Variant '' what row the matched type lies on
Dim colnum As Variant '' what column the matched date lies in
Dim colnum2 As Variant '' what column the matched type lies in

Set rng = Range("A2:G5") '' the table where the data is ** Change this to set the range where you search for your data **

condition1 = Cells(7, 2).Value ''condition 1 (date)

condition2 = Cells(8, 2).Value '' condition 2 (type)

For Each cel In rng.Cells '' create loop for every cell in the above declared range

    If cel.Value = condition1 Then '' if the cell matches the condition 1

        rownum = cel.row '' then find the row number of the matched cell

        colnum = cel.Column '' find the column number of the matched cell

            For Each cel2 In rng.Cells '' if we have a match on date create loop for every cell in the same range for condition2

                If cel2.Value = condition2 Then '' if the cell in the range matches condition2

                    rownum2 = cel2.row '' identify the row number of the matched cell

                    colnum2 = cel2.Column '' identify the column number of the matched cell

                        If rownum = rownum2 And colnum = colnum2 - 1 Then '' if both the matches are on the same row and condition2 is 1 column to the right

                            Cells(9, 2).Value = Cells(rownum, 1).Value '' put the name in the cell on the corresponding row
                        End If
                End If
            Next cel2 '' if the conditions arent met then try the next cell in range to match condition 2
    End If
 Next cel '' if the conditions arent met then try the next cell in range to match condition 1

End Sub