0

我需要能够在整个表中搜索匹配多个条件的行。我们使用一个程序以 .csv 文件的形式输出数据。它有分隔数据集的行,这些标题中的每一个都没有任何唯一的列,但是如果我在表中搜索多个值,我应该能够查明每个标题行。我知道我可以使用 Application.WorksheetFunction.Match 根据单个条件返回一行,但我需要搜索两个三个或四个条件。

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

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

3 回答 3

1

我们需要使用数组:

有2种数组:

    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 函数会将数组视为“或”函数(一个匹配将导致 true 即:

    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} (它必须是 SUMPRODUCT 中向右的数字数组!!!) 即: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"< >B9:B16)),如果你有一个表格并且想以不同的顺序查看结果,则与上述相同

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

它是一样的,除了在自动完成或表格重新排序时我们不想修改的单元格上使用了 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

于 2013-09-24T10:15:10.500 回答
0

I would use this array* formula (for three criteria):

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

*commit with Ctrl+Shift+Enter

于 2012-05-21T22:59:56.120 回答
0

像这样的东西?

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

我正在寻找“Bill”中的A“Woods”B和“其他一些数据”C

根据需要进行更改

=IF(INDEX(A1:A20,MATCH("Bill",A1:A20,0),1)="Bill",IF(INDEX(B1:B20,MATCH("Woods",B1:B20,0), 1)="Woods",IF(INDEX(C1:C20,MATCH("其他一些数据",C1:C20,0),1)="其他一些数据",MATCH("Bill",A1:A20,0 ),“未找到”)))

快照

在此处输入图像描述

于 2012-05-21T20:23:01.967 回答