我有一张包含数千行的工作表,其中包含一个唯一 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
好的,虽然费了点脑筋,但我明白了:
列O
,P
& ,Q
如您所见,标题为Brand
,Product
& 。使用-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
我会首先优化您的O
、P
和Q
公式。您目前有
=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", "")
好的,现在我将使O
、P
和Q
公式稍微复杂一些:
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 的前一行包含无效品牌错误,则显示该值。
这会产生以下效果:将O
、P
和Q
值拖到每个 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 的第一行。