有條件地跨行連接單元格內容

有條件地跨行連接單元格內容

我有一個包含數千行的工作表,其中包含唯一的 IDA和 3 個不同的錯誤代碼M。每個 ID 可能有 1 個、2 個或 3 個錯誤。它們將始終處於相同的順序。

我已經手動輸入了N所需的輸出。我在列中寫了一個像這樣的公式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。將整個內容變成帶有Ctrl-的表格T(不是必需的,但很方便,我的專欄R依賴於它,但如果需要,您可以使用列引用)

柱子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)的第二行或第三行,請查看該 ID 上方的儲存格(即O前一行的列儲存格),看看我們是否已經確定該東西具有無效品牌。另外,請查看M該行的 Column 以查看它是否為Brand is not valid。然後連接結果。

由於唯一 ID 永遠不會出現兩次出現相同錯誤的情況(對嗎?),因此這兩個子結果永遠不會都非空,因此這本質上是在執行“OR”操作:

Brand如果此行或此 ID 的前一行包含無效品牌錯誤,則顯示值。

O這具有將每個 ID 的、PQ值向下拖曳到最後一行的效果:

請注意,第 41、44、47 和 49 行分別顯示了適用於 Columns OP、 和中各自 ID 的所有錯誤的簡寫形式Q

我以R與您相同的方式定義了列。看產生以逗號分隔的儲存格內容列表,不包括空格 了解消除不需要的斜線的技術。

如果僅在第 41、44、47 和 49 行中進行所需的串聯就足夠了,那麼您就完成了。否則,定義N42

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

或者

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

O這與我在 Columns 、P和中使用的技巧幾乎完全相同Q,但方向相反:

如果這是該 ID 的最後一行(即,如果這是行 41、44、47 或 49),則使用該行中的值的串聯(這是該 ID 的錯誤代碼的完整集合)。否則,請查看該單元格下方的單元格(即N下一行的列單元格),其中將包含正確的答案。

換句話說,所需的值會滲透到每個 ID 的第一行。

相關內容