Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/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
Excel VBA复合vlookup_Excel_Vlookup_Vba - Fatal编程技术网

Excel VBA复合vlookup

Excel VBA复合vlookup,excel,vlookup,vba,Excel,Vlookup,Vba,好吧,我看到很多问题和我的问题很相似,但是没有一个是非常精确的,所以答案没有帮助。虽然它可能不完全是一个vlookup的过程是类似的,所以这是最接近的事情,我可以认为作为一个标题 我在文档a中有一列(a)的值,我希望excel遍历每个值,并在文档B中查找(a)列中的相同值。对于找到的每个值,我想做三件事: 我希望它在文档B中找到的每个匹配值的右侧两个单元格中获取值,并将其粘贴到文档A列中值的右侧一个单元格中 我想让它查看文档B中每个匹配值右侧的值3,如果该值是“time”,则在文档A列中的值右侧

好吧,我看到很多问题和我的问题很相似,但是没有一个是非常精确的,所以答案没有帮助。虽然它可能不完全是一个vlookup的过程是类似的,所以这是最接近的事情,我可以认为作为一个标题

我在文档a中有一列(a)的值,我希望excel遍历每个值,并在文档B中查找(a)列中的相同值。对于找到的每个值,我想做三件事:

  • 我希望它在文档B中找到的每个匹配值的右侧两个单元格中获取值,并将其粘贴到文档A列中值的右侧一个单元格中

  • 我想让它查看文档B中每个匹配值右侧的值3,如果该值是“time”,则在文档A列中的值右侧放置字母“T”两个单元格

  • 如果在文档B中找到的每个匹配值右侧的四个单元格的值大于5,我希望excel在文档A的A列中的值右侧的三个单元格中填充公式=文档B中该行(G列/H列)的值

  • 如果我的措辞令人困惑,我基本上想做一个更复杂的vlookup。文档A只有A列,我想看看A列,使用文档B中的表格填写B、C和D列

    如果您有任何问题,请告诉我,并提前感谢您给我的任何帮助

    =INDEX(B!$C$1:$C$15,MATCH(A!A1,B!$A$1:$A$15,0))
    
    进入工作表
    A
    B1
    或任何
    值右侧的一个单元格,然后向下拖动

    =IF(INDEX(B!$D$1:$D$15,MATCH(A!A1,B!$A$1:$A$15,0))="time","T",INDEX(B!$D$1:$D$15,MATCH(A!A1,B!$A$1:$A$15,0)))
    
    进入工作表
    A
    C1
    或任何
    值右侧的两个单元格,然后向下拖动

    *注意:如果在文档B
    中找到的
    匹配值不是“时间”,则您没有指定希望该值是什么,因此我只使用单元格中的值

    =IF(INDEX(B!$E$1:$E$15,MATCH(A!A1,B!$A$1:$A$15,0))>5,INDEX(B!$G$1:$G$15,MATCH(A!A1,B!$A$1:$A$15,0))/INDEX(B!$H$1:$H$15,MATCH(A!A1,B!$A$1:$A$15,0)),INDEX(B!$E$1:$E$15,MATCH(A!A1,B!$A$1:$A$15,0)))
    
    进入工作表
    A
    D1
    或任何
    值右侧的三个单元格,然后向下拖动

    *注意:如果在文档B中找到的
    匹配值是
    而不是
    >5
    ,则您没有指定希望该值是什么,因此我只使用单元格中的值

    =IF(INDEX(B!$E$1:$E$15,MATCH(A!A1,B!$A$1:$A$15,0))>5,INDEX(B!$G$1:$G$15,MATCH(A!A1,B!$A$1:$A$15,0))/INDEX(B!$H$1:$H$15,MATCH(A!A1,B!$A$1:$A$15,0)),INDEX(B!$E$1:$E$15,MATCH(A!A1,B!$A$1:$A$15,0)))
    

    这是如果您要查找的值位于工作表
    A
    列中,并且您正在返回工作表B
    C:E
    列中的值。首先,我的英语不好。很抱歉但据我所知,我会尽力帮忙的

    文档包含以下信息

    名称
    萨基尔
    哈桑
    肺门

    B在以下信息中添加文档。
    姓名索引年龄性别栏5栏6栏7栏8
    萨基尔833男1102
    肺门620女性11184
    努雷4 22女1 4 1

    文档可以在B2列中写入以下公式

    =IF(VLOOKUP(A2;[DocB.xlsx]Sheet1!$A$2:$H$4;2;FALSE)>5;VLOOKUP(A2;[DocB.xlsx]Sheet1!$A$2:$H$4;7;FALSE)/VLOOKUP(A2;[DocB.xlsx]Sheet1!$A$2:$H$4;8;FALSE);"No Match")
    

    尊重。

    你想做的每一件事都是从一个简单的“VLOOKUP”开始的,但也有一些是曲折的。为了简化事情,我们应该将范围命名为“A”和“B”。您可以通过选择属于“A”的所有单元格,然后在地址框(屏幕左上角)中键入名称来完成此操作。让我们称之为“RangeA”。同样,选择属于区域B的所有单元格(第一列到第八列;确保不包括标题),并将其称为RangeB。现在我们可以开始:

    对于A中的每个值,在B中找到相应的值,并返回 右边的值2”:

    这是一个简单的VLOOKUP。在A(可能是B1)右侧的单元格中输入此公式:

    说明:在单元格A1中的RangeB范围内查找值。找到一个完全匹配的(这是“假”)。返回第3列中的相应值(右边两个)。将公式一直向下拖动(快捷方式:选中单元格右下角的小正方形时双击)

    我想让它看到每个匹配项右边的值3 文件B中的值,如果该值为“时间”,则填写字母 “T”文档A列A值右侧的两个单元格

    这是一个VLOOKUP,后跟一个IF。将以下公式中的两个单元格放在A(可能是C1)的右侧,然后像以前一样向下拖动:

    =IF(VLOOKUP(A1, RangeB, 4, FALSE) = "time", "T", "")
    
    说明:如前所述查找(但第4列,即“右侧三”)。测试找到的值。如果是“时间”,请在此单元格中输入“T”;否则,输入“”(即无)

    如果该值位于中找到的每个匹配值右侧的四个单元格中 文档B>5我希望excel将三个单元格填充到 文档A的A列中值的右侧,公式为 文档B中同一行的(G列/H列)值

    找到匹配项,计算比率。使用匹配函数(在工作表的隐藏列中)只查找一次会更快,因此我们有一个对行号的引用(我们需要它三次),但这不是必需的。除非工作表有数千行,否则不会注意到性能差异。根据他的说法,在公式中没有“快速方法”来实现这一点

    =if(VLOOKUP(A1, RangeB, 5, FALSE) > 5, VLOOKUP(A1, RangeB, 7, FALSE)/VLOOKUP(A1, RangeB, 8, FALSE), "")
    
    就在这里。请注意,
    索引(匹配…
    (@user2140261的首选方法)可以实现与
    VLOOKUP
    相同的功能,但它涉及两个函数。但是如果您决定创建一个包含
    MATCH
    函数的隐藏列,那么您可以使用
    INDEX
    函数来实现所有其他功能,因为您只使用一个匹配项,这将是最有效的(与为每列重新计算一次或多次相反)


    我希望你能从这里找到答案。

    你看到了吗?哇,这是一个更好/更全面的方法@Floris谢谢你一旦我有足够好的代表支持我,我会这样做的you@SeanConnecticut我之所以使用索引,是因为我觉得可读性是为了知道我从哪个列返回值,而不是从哪个列返回值p巫婆可以吃任何东西