如果值与列标题匹配,则在 Excel 中将值从一张表映射/复制到另一张表

如果值与列标题匹配,则在 Excel 中将值从一张表映射/复制到另一张表

这篇文章让我非常接近我需要的地方

如何根据 Excel 中的标题将一列从一张表复制到另一张表?

但是,如果我在公式开头添加 =if(isblank(Sheet1!A2),"",...,第一列始终显示为空白。

我只需要在单元格中确实有值时复制这些值

如果我使用原始公式,如果单元格为空白,它将返回零或“#N/A”

事实上,即使我加入了“if”语句,它仍然会对某些事情产生影响。我认为这是因为源数据有时是“空白的”,这意味着其中有一个空格或换行符,但这可能是我必须处理的事情

主要问题是,尽管源表中有匹配的数据,但第一列是空的

链接到我的文件:https://drive.google.com/open?id=1IZ1BpisMhHcSKJuBRLWnTU4RxpeZ2lCZ

答案1

测试表 A 列中的公式首先检查 Sheet1 上的 A 列是否为空。此测试中没有查找匹配标题的项。Test!A2 中的公式首先询问 Sheet1!A2 是否为空?在第一个中未找到正确的列标题IF

当 Sheet1 上的行具有非空姓氏时,如果您想用 Sheet1 上该行的所有值填充“Test”:

=IF(ISBLANK(HLOOKUP($B$1,Sheet1!$A:$ZZ,ROW(),FALSE)),"",HLOOKUP(C$1,Sheet1!$A:$ZZ,ROW(),FALSE))

(C 列公式)

这项测试表明:

  • HLOOKUP($B$1,Sheet1!$A:$ZZ,
    • 始终(绝对参考 $B$1)在 Sheet1 的标题列表中查找此测试表的 B 列标题。
    • 公式中的$B$1可以替换为“姓氏”(可能应该这样做)。
  • ROW(),FALSE
    • “false”表示找到完全匹配项。如果找到,则返回 Sheet1 中找到的列中的值 ( HLOOKUP)。由 指定的某一行的列中的值row()是此公式的测试表上的行(因此是 Sheet1 上的同一行)。
  • IF(ISBLANK(HLOOKUP
    • 如果通过 hookup 找到结果ISBLANK,则此公式单元格的值为“”
    • 如果ISBLANK由于此公式行的 Sheet1 上的姓氏列中有文本而返回 false,则执行 false 参数。
  • 如果测试,真 (“”),假 =HLOOKUP(C$1,Sheet1!$A:$ZZ
    • 与之前相同的 `HLOOKUP,但不是总是查看对 B 列的绝对引用,而是引用是相对/动态的。
    • 当公式被复制拖动时,非绝对引用会发生变化。因此,C$1当复制到右侧下一列时,公式的“C”将变为“D”(如果复制到左侧,则变为 B)。同样,这是因为没有“$”将引用锁定为绝对引用。由于列字母与公式的列相同,因此会在 Sheet1 上的标题中搜索公式的列标题。
  • 其余逻辑与第一个相同HLOOKUP

答案2

好吧,这就是我最终得到的:

=IFERROR(IF(HLOOKUP(A$1,Sheet1!$A:$ZZ,ROW(),FALSE)="","",HLOOKUP(A$1,Sheet1!$A:$ZZ,ROW(),FALSE)),"")

IFERROR 是为了摆脱所有的“#N/A”返回

如果源为空,则 IF 会使返回结果实际上为空,而不仅仅是零“0”

我原来的公式的问题是“IF”语句在“HOOKUP”之前运行,因此对于第一列,它返回了自己的空白答案

感谢@Ted D (https://superuser.com/users/994103/ted-d)感谢您帮助我理解程序如何逻辑处理我原始公式的顺序,以及 HLOOKUP 如何工作,以便我可以找到其余部分来添加到其中

相关内容