Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
返回与vbs excel中的多个条件匹配的行号_Excel_Search_Vba_Criteria - Fatal编程技术网

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

返回与vbs excel中的多个条件匹配的行号,excel,search,vba,criteria,Excel,Search,Vba,Criteria,我需要能够在整个表中搜索匹配多个条件的行。我们使用一个以.csv文件形式输出数据的程序。它的行是独立的数据集,每个标题本身没有任何唯一的列,但是如果我在表中搜索多个值,我应该能够精确定位每个标题行。我知道我可以使用Application.WorksheetFunction.Match返回单个条件的行,但我需要搜索两个或三个或四个条件 在伪代码中,它是这样的: Return row number were column A = bill & column B = Woods & c

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

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

Return row number were column A = bill & column B = Woods & column C = some other data
像这样的

假设您使用A1:C20中的数据

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

更改(如适用)

=如果(索引(A1:A20,匹配(“比尔”,A1:A20,0),1)=“比尔”,如果(索引(B1:B20,匹配(“树林”,B1:B20,0),1)=“树林”,如果(索引(C1:C20,匹配(“一些其他数据”,C1:C20,0),1)=“一些其他数据”,匹配(“比尔”,A1:A20,0),“未找到”))

快照


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


*使用Ctrl+Shift+Enter提交

我们需要使用数组:

有两种阵列:

    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) 即:

在下面的例子中,我展示了我想要对每个案例中除管理员之外的所有员工的小时数求和

我们有两种选择,长简单方式和复杂快速方式:

    long simple way
    D2=SUMPRODUCT(C2:C9,(A2=A2:A9)*("admin"<>B2:B9)) <<- SUMPRODUCT makes a multiplication
对于要检查数组的函数,请打开“插入函数”按钮(看起来像和fx),然后双击“匹配”,如果在查找数组中输入一个值,如
A2=A2:A9对于我们的示例,它将给出{TRUE,TRUE,FALSE,FALSE,FALSE,FALSE}这是因为只有前3行来自case=1

对不起,我刚刚更新了我的帖子,它需要在vba for excel中,这样我才能编写宏。与应用过滤器或使用工作表公式相比,您为什么要在vba中这样做?如果公式有帮助,您可以使用以下方法:
    MATCH(1,{1,0,1,1,1,0,0,1},0)=TRUE
    , YOU MUST CTR+SHIFT+ENTER !!! FOR IT TO GIVE AN ARRAY BACK!!!
    long simple way
    D2=SUMPRODUCT(C2:C9,(A2=A2:A9)*("admin"<>B2:B9)) <<- SUMPRODUCT makes a multiplication
    the fast complicated way
    D3=SUMPRODUCT(INDIRECT("c2:c9"),(A3=INDIRECT("a2:a9"))*("admin"<>INDIRECT("b2:b9")))
    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