这篇文章让我非常接近我需要的地方
如何根据 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 上的同一行)。
- “false”表示找到完全匹配项。如果找到,则返回 Sheet1 中找到的列中的值 (
IF(ISBLANK(HLOOKUP
- 如果通过 hookup 找到结果
ISBLANK
,则此公式单元格的值为“” - 如果
ISBLANK
由于此公式行的 Sheet1 上的姓氏列中有文本而返回 false,则执行 false 参数。
- 如果通过 hookup 找到结果
- 如果测试,真 (“”),假 =
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 如何工作,以便我可以找到其余部分来添加到其中