返回与vbs excel中的多个条件匹配的行号

时间:2012-05-21 18:32:16

标签: excel search vba criteria

我需要能够在整个表格中搜索符合多个条件的行。我们使用以.csv文件形式输出数据的程序。它有分隔数据集的行,这些标题中的每一个都没有任何自己唯一的列,但如果我在表中搜索多个值,我应该能够精确定位每个标题行。我知道我可以使用Application.WorksheetFunction.Match在单个条件上返回一行,但我需要搜索两个或三个标准。

在伪代码中,它将是这样的:

Return row number were column A = bill & column B = Woods & column C = some other data

3 个答案:

答案 0 :(得分:1)

我们需要使用数组:

有两种数组:

    numeric {1,0,1,1,1,0,0,1}
    boolean {TRUE,FALSE,TRUE,TRUE,TRUE,FALSE,FALSE,TRUE}

要在它们之间进行转换,我们可以使用:

    MATCH function
    MATCH(1,{1,0,1,1,1,0,0,1},0)  -> will result {TRUE,FALSE,TRUE,TRUE,TRUE,FALSE,FALSE,TRUE}

    simple multiplication
    {TRUE,FALSE,TRUE,TRUE,TRUE,FALSE,FALSE,TRUE}*{TRUE,FALSE,TRUE,TRUE,TRUE,FALSE,FALSE,TRUE} -> will result {1,0,1,1,1,0,0,1}

你可以检查匹配函数中的数组,如下图所示输入,请注意MATCH函数将把一个阵列作为一个“或”函数处理(一个匹配将导致为真) 即:

    MATCH(1,{1,0,1,1,1,0,0,1},0)=TRUE
    , YOU MUST CTR+SHIFT+ENTER !!! FOR IT TO GIVE AN ARRAY BACK!!!

在下面的例子中,我表明我想总结所有员工的小时数,除了每个案例的管理员

我们有2个选项,简单的长路,复杂的快捷方式:

    long simple way
    D2=SUMPRODUCT(C2:C9,(A2=A2:A9)*("admin"<>B2:B9)) <<- SUMPRODUCT makes a multiplication

基本上A1 = {2,3,11,3,2,4,5,6} * {0,1,1,0,0,0,0,0}(它必须是一个数字阵列正确的生产!!!) 即:A1 = 2 * 0 + 3 * 1 + 11 * 1 + 3 * 0 + 2 * 0 + 4 * 0 + 5 * 0 + 6 * 0

这会导致问题,因为如果您拖动单元格以自动完成其余单元格,它将编辑较低和较高的值 即:D9 = SUMPRODUCT(C9:C16,(A9 = A9:A16)*(“admin”&lt;&gt; B9:B16)),超出范围 如果您有一个表并希望以不同的顺序查看结果

,则与上述相同
    the fast complicated way
    D3=SUMPRODUCT(INDIRECT("c2:c9"),(A3=INDIRECT("a2:a9"))*("admin"<>INDIRECT("b2:b9")))

它是相同的,除了在自动填充或表重新排序时我们不想修改的单元格上使用INDIRECT 请注意,INDIRECT有时会给出VOLATILE ERROR,我建议不要在单个单元格上使用它或在阵列中只使用它一次

f * c *我无法发布图片:( 表是:

    case    emplyee hours   totalHoursPerCaseWithoutAdmin
    1   admin   2   14
    1   him 3   14
    1   her 11  14
    2   him 3   5
    2   her 2   5
    3   you 4   10
    3   admin   5   10
    3   her 6   10

并且对于检查数组的函数,打开插入函数按钮(它看起来像和fx)然后双击MATCH然后如果你在Lookup_array里面输入一个像 A2 = A2:A9对于我们的示例,它将给出{TRUE,TRUE,TRUE,FALSE,FALSE,FALSE,FALSE,FALSE},因为只有前3行来自case = 1

答案 1 :(得分:0)

这样的东西?

假设您在A1:C20中输入数据

我正在寻找&#34;比尔&#34;在A,&#34; Woods&#34;在B和&#34;其他一些数据&#34;在C

适用时更改

= IF(INDEX(A1:A20,MATCH(&#34;比尔&#34;,A1:A20,0),1)=&#34;比尔&#34;,IF(INDEX(B1:B20,比赛(&#34; Woods&#34;,B1:B20,0),1)=&#34; Woods&#34;,IF(INDEX(C1:C20,MATCH)(&#34;其他一些数据&#34; ,C1:C20,0),1)=&#34;其他一些数据&#34;,MATCH(&#34; Bill&#34;,A1:A20,0),&#34; Not Found&#34;) ))

<强>快照

enter image description here

答案 2 :(得分:0)

我会使用这个数组*公式(三个标准):

=MATCH(1,((Range1=Criterion1)*(Range2=Criterion2)*(Range3=Criterion3)),0)

*使用Ctrl+Shift+Enter提交