有条件地跨行连接单元格内容

有条件地跨行连接单元格内容

我有一张包含数千行的工作表,其中包含一个唯一 IDA和 3 个不同的错误代码M。每个单独的 ID 可能有 1、2 或 3 个错误。它们将始终保持相同的顺序。

我已经手动输入了N所需的输出。我在 cols 中编写了一个类似这样的公式,其中O, P, Q包含错误文本:

=IF(IFERROR(SEARCH("Brand is not valid", M42), "") <> "", "Brand", "")

我尝试过类似的东西,R但由于显而易见的原因,它无法正常工作。有没有办法做到这一点,R看起来像N

=CONCATENATE(O42,"/", P42,"/",Q42)

如果无法使用 Excel 公式,是否有可以使用 VBA 的方法?

连接

答案1

好的,虽然费了点脑筋,但我明白了:

OP& ,Q如您所见,标题为BrandProduct& 。使用-OEM将整个内容变成表格(不是必需的,但很方便,我的列依赖于它,但如果您愿意,也可以使用列引用)CtrlTR

柱子R

=IF(LEN([Brand])>0,[Brand],IF(LEN([Product])>0,[Product],IF(LEN([OEM])>0,[OEM],"")))

柱子S

=IF(A2=A4,F2&"/"&F3&"/"&F4,IF(A2=A1,"",IF(A2=A3,F2&"/"&F3,F2)))

不幸的是,似乎使用表格引用来引用不同行的唯一方法是使用Offset,因此为了简单起见,我回到了单元格引用。这有点否定了将整个东西变成表格的酷炫/方便因素,但无论如何......

而且...它看起来就像这样:

在此处输入图片描述

答案2

我会首先优化您的OPQ公式。您目前有

=IF(IFERROR(SEARCH("Brand is not valid", M42), "") <> "", "Brand", "")

IFERROR是一个很棒的函数,用于显示可能是错误代码的计算值的净化版本;我经常使用它,并在超级用户的回答中推荐它。正如你可能知道的那样,

  • IFERROR(calculated_value, default_value)

是缩写

  • IF(ISERROR(calculated_value), default_value, calculated_value)

但使用IFERROR创建一些有价值的净化版本 然后测试该值以有条件地执行某些操作 是一种不必要的尴尬使用方式IFERROR。上述公式可以简化为

=IF(ISERROR(SEARCH("Brand is not valid", M42)), "", "Brand")

我相信你知道,SEARCH("Brand is not valid", M42) 测试看看M42 包含 Brand is not valid。但是,只要 ColumnM只能包含三个错误字符串,则可以将其缩短为

=IF(ISERROR(SEARCH("Brand", M42)), "", "Brand")

或简化为

=IF(M42 = "Brand is not valid", "Brand", "")

好的,现在我将使OPQ公式稍微复杂一些:

  • O42=IF($A42=$A41, O41, "") & IF(ISERROR(SEARCH("Brand", $M42)), "", "Brand")
  • P42=IF($A42=$A41, P41, "") & IF(ISERROR(SEARCH("Product", $M42)), "", "Product")
  • Q42=IF($A42=$A41, Q41, "") & IF(ISERROR(SEARCH("OEM", $M42)), "", "OEM")

公式O42表示,

如果这是此 ID 的第二行或第三行(列A),请查看此行上方的单元格(即O上一行的列单元格),看看我们是否已经确定此商品的品牌无效。此外,查看M此行的列,看看它是否Brand is not valid。然后连接结果。

由于唯一 ID 永远不会因相同的错误而列出两次(对吗?),这两个子结果永远不会同时为非空,因此这本质上是在做一个“或”:

Brand如果此行或此 ID 的前一行包含无效品牌错误,则显示该值。

这会产生以下效果:将OPQ值拖到每个 ID 的最后一行:

请注意,第 41、44、47 和 49 行分别显示了第 、 和 列中适用于其各自 ID 的所有错误的O简短P形式Q

R按照你的方式定义了 Column。请参阅生成以逗号分隔的单元格内容列表,不包括空白 寻找消除不需要的斜线的技术。

如果仅在第 41、44、47 和 49 行中具有所需的连接就足够了,那么您就完成了。否则,定义N42

=IF($A22=$A23, N23, R22)

或者

=IF($A22<>$A23, R22, N23)

O这几乎与我在列、P和中使用的技巧完全相同Q,但方向相反:

如果这是此 ID 的最后一行(即,如果这是第 41、44、47 或 49 行),则使用此行的值的连接(这是此 ID 的完整错误代码集合)。否则,查看此行下方的单元格(即N下一行的列单元格),其中将有正确答案。

换句话说,所需的值会渗透到每个 ID 的第一行。

相关内容