VBA复杂的vlookup

好吧,我看到了一些类似于我的问题,但没有一个是完全确切的。所以答案没有帮助。 虽然它可能不是一个完全的vlookup过程是相似的,所以这是我能想到的最接近的一个标题。

我在文档A中有一列值(A),我想让excel遍历每个值并查看文档B以在列(A)中find相同的值。 对于每个价值它发现我想做三件事情:

  1. 我希望它抓住文档B中find的每个匹配值右侧的值两个单元格,并将它粘贴到文档A的A列中值的右侧一个单元格

  2. 我希望它查看文档B中find的每个匹配值的右边三个值,如果该值为“时间”,则将文本A的列A中值的右边的字母“T”放在两个单元格中。

  3. 如果在文档B中find的每个匹配值右边的四个单元格的值是> 5,我希望excel将单元格的三个单元格填充到文档A的列A中值的右侧,公式为=(列G /列H)在同一行的文档B中。

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

请让我知道如果您有任何问题,并提前感谢您可以给我的任何帮助。

你想要做的每一件事情都是以一个简单的“VLOOKUP”开始的,但有些却有一些变化。 为了简化,我们应该命名范围“A”和“B”。 您可以通过select属于“A”的所有单元格,然后在地址栏中input一个名称(屏幕左上angular)。 我们称之为“RangeA”。 同样,select属于区域B的所有单元格(第一列到第八列;确保不包含标题),并将其称为RangeB。 现在我们可以开始了:

“对于A中的每个值,在B中find相应的值,然后向右返回值2”:

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

=VLOOKUP(A1, RangeB, 3, FALSE) 

说明:在名为RangeB的范围内查找单元格A1中的值。 find完全匹配(这是“FALSE”)。 返回第3列中的相应值(右边两个)。 一直向下拖动公式(快捷方式:当它被选中时,双击单元格右下angular的小方块)。

我希望它查看文档B中find的每个匹配值的右边三个值,如果该值为“时间”,则将文本A的列A中值的右边的字母“T”放在两个单元格中。

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

 =IF(VLOOKUP(A1, RangeB, 4, FALSE) = "time", "T", "") 

解释:像以前一样查找(但是第4列,即“右三”)。 testingfind的值。 如果是“时间”,则在该单元格中input“T” 否则,input“”(即没有)。

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

find匹配,采取比例。 使用MATCH函数执行查找会更快(在表单的隐藏列中),所以我们有一个对行号(我们需要它三次)的引用,但这不是必需的。 除非你的工作表有成千上万的行,否则你不会注意到性能的差异。 根据这个线程 ,在公式中没有“快速的方法”来实现这一点。

 =if(VLOOKUP(A1, RangeB, 5, FALSE) > 5, VLOOKUP(A1, RangeB, 7, FALSE)/VLOOKUP(A1, RangeB, 8, FALSE), "") 

在那里,你有它。 请注意, INDEX(MATCH... (@ user2140261的首选方法)可以实现与VLOOKUP相同的function,但它涉及两个function,但是如果您决定创build一个带有MATCHfunction的隐藏列,则可以使用INDEX函数来实现所有其他的事情 – 这将是最有效的,因为您只使用一个MATCH(而不是为每列重新计算一次或多次)。

我希望你能从这里弄清楚。

 =INDEX(B!$C$1:$C$15,MATCH(A!A1,B!$A$1:$A$15,0)) 

在工作表A B1 ,或者one cell to the right of the value任何one cell to the right of the value然后向下拖动

 =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))) 

进入工作表C1或任意two cells to the right of the value然后向下拖动。

* 注意:*如果matched value found in document Bmatched value found in document 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或者three cells to the right of the value然后向下拖动

* 注意:*如果matched value found in document B is 不是 > 5那么你没有指定你想要的值,所以我只是使用单元格中的值。

这是如果您正在查找的值在工作表A中的Column A中,并且您正在返回工作sheet B中列C:E中的值

首先,我的英语不好。 抱歉。 但我会尽力帮助,因为我明白了。

文档包含以下信息。

名称
Sakir
哈桑
希拉尔

B文件中有以下信息。
姓名索引年龄性别列5列6列7列8
Sakir 8 33男1 1 10 2
希拉尔6 20女1 1 8 4
努雷4 22女1 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") 

尊重。