【问题标题】:Skipping blank cells with an Index/Match formula使用索引/匹配公式跳过空白单元格
【发布时间】:2019-08-15 01:23:31
【问题描述】:

我有几个包含 100/1,000 行的数据库,其中的信息显示如下:

我需要将与每家公司相关的所有信息放在一行中;我无法进行简单的排序和筛选,因为几乎每家公司都有不同的详细程度,因此信息最终会出现在错误的行中。看起来最好的选择是索引/匹配公式,但我目前的公式

=INDEX(Sheet1!B:B,MATCH(Sheet2!$A2,Sheet1!$A:$A,0) 

对于第一个索引/匹配结果为空白的任何结果返回零:

如何编写公式以跳过空白单元格?我宁愿不必使用 VBA,但我们将非常感谢任何建议。

【问题讨论】:

  • 是否存在从 G 到 L 的任何一列始终有数据?
  • 是的,名字栏目

标签: excel excel-formula


【解决方案1】:

或者,

因为 match 总是返回它找到的第一个值。

所以在单元格 G2 中, =INDEX(Sheet1!G:G,MATCH(Sheet2!$A2,Sheet1!$A:$A,0)+COUNTA($G$1:G$1)-1)

或者通过匹配标题来偏移单元格。

【讨论】:

  • 谢谢凯文。我可以在我提供的模拟数据库上完成这项工作,但不能在任何全尺寸数据库上完成。匹配标题以偏移单元格是什么意思?
  • 假设每个公司的行数是固定的,并且模式是相同的。您可以使用列号偏移到第二/第三/第四行,这意味着第 1 列将在第一行,第 2 列将在第二行。所以,它看起来像这样, =INDEX(Sheet1!G:G,MATCH(Sheet2!$A2,Sheet1!$A:$A,0)+MATCH(Sheet2!G$1,Sheet1!$G$1:$L $1,0)-1)
  • 这是问题的一部分 - 每个公司的行数不固定。也许我需要想出一个公式来插入行,以便它们都有相同的数字 - 这可能吗?
  • 这可能看起来有点复杂,但它可能会起作用。使用公式 Cell M1 =MATCH("*",G2:L2,0)&A2 在 sheet1 中创建一个新列,然后在 sheet2 中使用下面的公式,所以它的作用是通过组合列号和公司。然后,基本上只是查找独特的文本。希望它有意义。 =INDEX(Sheet1!G:G,MATCH(MATCH(Sheet2!G$1,Sheet1!$G$1:$L$1,0)&$L3,Sheet1!$L:$L,0))
  • 感谢 Kevin,设法让 Sheet1 Match 公式工作,但不是 Sheet2 的第二个更长的公式 - 我收到 #N/A 回复。我所做的只是将公式添加到 Sheet1 和 Sheet2;有没有我遗漏的步骤?
【解决方案2】:

您可以将现有公式包装在 IF 函数中:

=IF(Sheet2!$A2<>"",INDEX(Sheet1!B:B,MATCH(Sheet2!$A2,Sheet1!$A:$A,0),"")

【讨论】:

  • 这仅适用于 G 列 - 从 H 列开始,该公司组中每一行的顶部有一个或多个空白,它返回零。
【解决方案3】:

我通常会为此使用“Go To Special”功能。

以下面的示例数据为例。

我将输入第一个公式'=IF(B2"",C3,"")'。复制该单元格 (Ctrl+C),然后选择从 C2 到 C7 的单元格并使用“转到特殊”在“编辑”>“查找和选择”>“转到特殊”中的“主页”选项卡下仅选择空白单元格。只需按 Ctrl+V 将公式粘贴到所有空白单元格即可。您将在第一行的一行中获得每个公司的所有信息。

希望这会有所帮助。

【讨论】:

  • 这样会将值B 放到不属于它的单元格C5 中。重新考虑这种方法。
  • 不,公式实际上并不是指下面的单元格。所以它将在 C5 中返回“E”
  • 正确,但是当缺少值时它会失败,例如没有电话号码。 OP 说细节水平各不相同。
  • 在这种情况下,您可以在 sheet2 上尝试以下公式,Cells G2 =INDEX(Sheet1!G:G,MATCH(Sheet2!$A2,Sheet1!$A:$A,0) +COUNTA($G$1:G$1)-1)
  • 因为匹配总是找到第一个匹配,所以需要想办法从它找到的单元格中偏移。
【解决方案4】:

第一步:

使用您的数据创建一个数据透视表,并在数据透视选项中为空白单元格选择 0。将所有字段复制到行区域...

第二步:

如下图所示应用条件格式来删除(空白)单元格。

注意:这不是一个强大的解决方案,但对我有用。

【讨论】:

  • 即使在转到数据透视表分析>数据透视表>选项>布局和格式>格式>对于空单元格显示:0。或者我误解了你的指示?
  • 编辑了我的答案..请检查!