Excel 函数 VLOOKUP 问题
Excel issue with Function VLOOKUP
我知道这可能不是提出纯粹 excel 问题的最佳场所,但是。我有一个 table,其中 headers:数字、日期、姓名。在另一个文件中,我需要 link 数字和名称。它并不总是以相同的顺序排列,因此使用了 VLOOKUP 公式。这是下面的数据。
1 15-Nov Allen 15-Nov
10 15-Nov Allen 15-Nov
19 15-Nov Allen 15-Nov
6 5-Mar Avalon 5-Mar
15 5-Mar Avalon 5-Mar
24 5-Mar Avalon 5-Mar
9 15-Nov Burg 15-Nov
18 15-Nov Burg 15-Nov
27 15-Nov Burg 15-Nov
8 1-Sep Fischer 1-Sep
17 1-Sep Fischer 1-Sep
26 1-Sep Fischer 1-Sep
3 14-Oct Kiser 14-Oct
12 14-Oct Kiser 14-Oct
21 14-Oct Kiser 14-Oct
2 15-Oct Remmert 15-Oct
11 15-Oct Remmert 15-Oct
20 15-Oct Remmert 15-Oct
4 1-Sep Roos 1-Sep
13 1-Sep Roos 1-Sep
22 1-Sep Roos 1-Sep
7 6-Feb Tomo 6-Feb
16 6-Feb Tomo 6-Feb
25 6-Feb Tomo 6-Feb
5 1-Jan Wash 1-Jan
14 1-Jan Wash 1-Jan
23 1-Jan Wash 1-Jan
假设它的标题为 A、B、C、D 列。因此在新文件中,为了从数字中获取名称,我使用了以下公式:
=VLOOKUP(A1,[Workbook1]Sheet1!$A:$D,3,FALSE)
Workbook1 和 Sheet1 是数据所在的位置。接下来,我需要通过 linking 到名称来从文件中获取日期。我知道我可以 link 它的数量,但它是工作的事情,它们的排列方式是从最旧到最新的不同日期,与这个不同。 excel 中的 Date 函数在我看来非常愚蠢。所以我使用了公式
=VLOOKUP(B1,[Workbook1]Sheet1!$A:$D,1,FALSE)
及其迭代,将 1 替换为 4。它不断返回 N/A。即使我将 Date 的格式更改为 General,它仍然 returns 什么都没有。我不明白我在这里做错了什么。
您需要使用以下格式格式化日期:
这是我为解决问题所做的总体工作。
我假设 B1 保存了此人的姓名。在这种情况下,您需要调整查找范围 table,使其从名称所在的列开始,即
=VLOOKUP(B1,[Workbook1]Sheet1!$C:$D,2,FALSE)
已编辑:将列更改为 2 以获取日期
VLOOKUP 语法:
VLOOKUP(lookup_value , table_array, col_index_num, (optional) [range_lookup])
VLOOKUP function总是在table_array[=76的第一列查找lookup_value =].然后它尝试 return col_index_num 中相应行的值 table_array。 range_lookup 告诉 VLOOKUP 是查找精确匹配还是近似匹配。在您的情况下,您将寻找完全匹配。
VLOOKUP return table_array 中列左侧的值无法匹配 lookup_value。 lookup_value 总是 在第一列中查找,VLOOKUP return 是右侧列中的值。
根据 A 列中的 ID 号查找姓名的公式非常适用于此。
=VLOOKUP(A1, [Workbook1]Sheet1!$A:$D, 3, FALSE)
在A1中用8,上面的公式returns Fischer在B1中
当您查看 return 日期时,VLOOKUP 将适用于工作表 1 的 D 列中名称右侧的日期,但它不能 return 工作表 1 的 B 列中的日期名称上的 lookup_value。为此,您需要一个 INDEX/MATCH 函数对。此外,使用 INDEX/MATCH 检索与名称匹配的第二个和第三个日期集比使用 VLOOKUP 更容易。
INDEX 和 MATCH 语法:
INDEX(array, row_num, column_num)
MATCH(lookup_value, lookup_array, (optional) [match_type])
如果您要使用刚刚从 Sheet1 的 C 列中检索到的名称来查找 return Sheet1 的 B 列中的日期,则必须使用 INDEX/MATCH 对。由于我们在一个日期使用它,因此很容易将它用于另一个日期,尽管严格来说,VLOOKUP 可以 用于此。
在C1和D1中使用这两个公式。
=INDEX([Workbook1]Sheet1!B:B, MATCH(B1, [Workbook1]Sheet1!C:C, 0))
=INDEX([Workbook1]Sheet1!D:D, MATCH(B1, [Workbook1]Sheet1!C:C, 0))
将单元格格式化为 d-mmm 的自定义数字格式。您的结果应类似于以下内容。
如果您想要 return Sheet1 中与 B 列中的名称匹配的第二个和第三个日期,请将目标工作表的 C1 和 D1 更改为这些使用 SMALL function togewther with the ROW function and COUNTIF function 生成的公式额外的日期。
对 B1 中的公式进行微调,以便可以将其填写下来,然后为 C1 和 D1 提供接下来的两个公式。
=VLOOKUP(A, [Workbook1]Sheet1!$A:$D, 3, FALSE)
=IFERROR(INDEX([Workbook1]Sheet1!B:B9, SMALL(INDEX(ROW(:9)+([Workbook1]Sheet1!C:C9<>B)*1E+99, , ), COUNTIF(B:B1, B1))), "")
=IFERROR(INDEX([Workbook1]Sheet1!B:B9, SMALL(INDEX(ROW(:9)+([Workbook1]Sheet1!C:C9<>B)*1E+99, , ), COUNTIF(B:B1, B1))), "")
向下填充 B1:D1 以捕获 Sheet1 中与您的原始 ID 查找中 return 名称相匹配的所有可能日期。你的结果应该是这样的,
您可能会注意到,为了演示该方法,我在 Sheet1 上对相同的日期进行了排序。 IFERROR function 用于在您 运行 超出值(如上例图像中的 C4 和 D4)时显示空字符串(例如“”)而不是错误消息。
总之,使用所求值右边的VLOOKUP function到return值;使用 INDEX/MATCH 函数对从匹配列的任一侧检索值。
我知道这可能不是提出纯粹 excel 问题的最佳场所,但是。我有一个 table,其中 headers:数字、日期、姓名。在另一个文件中,我需要 link 数字和名称。它并不总是以相同的顺序排列,因此使用了 VLOOKUP 公式。这是下面的数据。
1 15-Nov Allen 15-Nov
10 15-Nov Allen 15-Nov
19 15-Nov Allen 15-Nov
6 5-Mar Avalon 5-Mar
15 5-Mar Avalon 5-Mar
24 5-Mar Avalon 5-Mar
9 15-Nov Burg 15-Nov
18 15-Nov Burg 15-Nov
27 15-Nov Burg 15-Nov
8 1-Sep Fischer 1-Sep
17 1-Sep Fischer 1-Sep
26 1-Sep Fischer 1-Sep
3 14-Oct Kiser 14-Oct
12 14-Oct Kiser 14-Oct
21 14-Oct Kiser 14-Oct
2 15-Oct Remmert 15-Oct
11 15-Oct Remmert 15-Oct
20 15-Oct Remmert 15-Oct
4 1-Sep Roos 1-Sep
13 1-Sep Roos 1-Sep
22 1-Sep Roos 1-Sep
7 6-Feb Tomo 6-Feb
16 6-Feb Tomo 6-Feb
25 6-Feb Tomo 6-Feb
5 1-Jan Wash 1-Jan
14 1-Jan Wash 1-Jan
23 1-Jan Wash 1-Jan
假设它的标题为 A、B、C、D 列。因此在新文件中,为了从数字中获取名称,我使用了以下公式:
=VLOOKUP(A1,[Workbook1]Sheet1!$A:$D,3,FALSE)
Workbook1 和 Sheet1 是数据所在的位置。接下来,我需要通过 linking 到名称来从文件中获取日期。我知道我可以 link 它的数量,但它是工作的事情,它们的排列方式是从最旧到最新的不同日期,与这个不同。 excel 中的 Date 函数在我看来非常愚蠢。所以我使用了公式
=VLOOKUP(B1,[Workbook1]Sheet1!$A:$D,1,FALSE)
及其迭代,将 1 替换为 4。它不断返回 N/A。即使我将 Date 的格式更改为 General,它仍然 returns 什么都没有。我不明白我在这里做错了什么。
您需要使用以下格式格式化日期:
这是我为解决问题所做的总体工作。
我假设 B1 保存了此人的姓名。在这种情况下,您需要调整查找范围 table,使其从名称所在的列开始,即
=VLOOKUP(B1,[Workbook1]Sheet1!$C:$D,2,FALSE)
已编辑:将列更改为 2 以获取日期
VLOOKUP 语法:
VLOOKUP(lookup_value , table_array, col_index_num, (optional) [range_lookup])
VLOOKUP function总是在table_array[=76的第一列查找lookup_value =].然后它尝试 return col_index_num 中相应行的值 table_array。 range_lookup 告诉 VLOOKUP 是查找精确匹配还是近似匹配。在您的情况下,您将寻找完全匹配。
VLOOKUP return table_array 中列左侧的值无法匹配 lookup_value。 lookup_value 总是 在第一列中查找,VLOOKUP return 是右侧列中的值。
根据 A 列中的 ID 号查找姓名的公式非常适用于此。
=VLOOKUP(A1, [Workbook1]Sheet1!$A:$D, 3, FALSE)
在A1中用8,上面的公式returns Fischer在B1中
当您查看 return 日期时,VLOOKUP 将适用于工作表 1 的 D 列中名称右侧的日期,但它不能 return 工作表 1 的 B 列中的日期名称上的 lookup_value。为此,您需要一个 INDEX/MATCH 函数对。此外,使用 INDEX/MATCH 检索与名称匹配的第二个和第三个日期集比使用 VLOOKUP 更容易。
INDEX 和 MATCH 语法:
INDEX(array, row_num, column_num)
MATCH(lookup_value, lookup_array, (optional) [match_type])
如果您要使用刚刚从 Sheet1 的 C 列中检索到的名称来查找 return Sheet1 的 B 列中的日期,则必须使用 INDEX/MATCH 对。由于我们在一个日期使用它,因此很容易将它用于另一个日期,尽管严格来说,VLOOKUP 可以 用于此。
在C1和D1中使用这两个公式。
=INDEX([Workbook1]Sheet1!B:B, MATCH(B1, [Workbook1]Sheet1!C:C, 0))
=INDEX([Workbook1]Sheet1!D:D, MATCH(B1, [Workbook1]Sheet1!C:C, 0))
将单元格格式化为 d-mmm 的自定义数字格式。您的结果应类似于以下内容。
如果您想要 return Sheet1 中与 B 列中的名称匹配的第二个和第三个日期,请将目标工作表的 C1 和 D1 更改为这些使用 SMALL function togewther with the ROW function and COUNTIF function 生成的公式额外的日期。
对 B1 中的公式进行微调,以便可以将其填写下来,然后为 C1 和 D1 提供接下来的两个公式。
=VLOOKUP(A, [Workbook1]Sheet1!$A:$D, 3, FALSE)
=IFERROR(INDEX([Workbook1]Sheet1!B:B9, SMALL(INDEX(ROW(:9)+([Workbook1]Sheet1!C:C9<>B)*1E+99, , ), COUNTIF(B:B1, B1))), "")
=IFERROR(INDEX([Workbook1]Sheet1!B:B9, SMALL(INDEX(ROW(:9)+([Workbook1]Sheet1!C:C9<>B)*1E+99, , ), COUNTIF(B:B1, B1))), "")
向下填充 B1:D1 以捕获 Sheet1 中与您的原始 ID 查找中 return 名称相匹配的所有可能日期。你的结果应该是这样的,
您可能会注意到,为了演示该方法,我在 Sheet1 上对相同的日期进行了排序。 IFERROR function 用于在您 运行 超出值(如上例图像中的 C4 和 D4)时显示空字符串(例如“”)而不是错误消息。
总之,使用所求值右边的VLOOKUP function到return值;使用 INDEX/MATCH 函数对从匹配列的任一侧检索值。