返回列表 上一主題 發帖

[發問] 請問各位大神,有關 textjoin 根據條件合併後,並刪除重複值

[發問] 請問各位大神,有關 textjoin 根據條件合併後,並刪除重複值

請問各位大神,
我想寫一個能根據我的條件,來合併相關文字,並把有重複的文字,排除。
如下圖所示


我G3=TEXTJOIN(";",TRUE,REPT($C$2:$C$30,$B$2:$B$30=F3))   然後ctrl+shit+enter 根據 F3 去找到第1週的文字 然後就會合併成  :開工拜拜;基礎開挖;基礎開挖;一樓地坪施作

我希望能判斷把重複刪除之,變成:開工拜拜;基礎開挖;一樓地坪施作

我有爬文有能寫:=TEXTJOIN(";",TRUE,IF(B$2:$B$30=F3;MATCH($C$2:$C$30;$C$2:$C$30;0)=(ROW($C$2:$C$30)-ROW($C$1));$C$2:$C$30;"");"")) 再搭配 ctrl+shit+enter
我是按到他的邏輯寫的(原文在這https://stackoverflow.com/questions/55607951/removing-duplicate-values-in-textjoin-and-if-function) 但一直錯誤...就算把;改成,也沒用

後來參照https://techcommunity.microsoft.com/t5/excel/removing-duplicates-when-using-textjoin/m-p/188950
還是一樣寫不出來...........

不知道我哪裡卡住了 拜託各位大神了!感恩

供參考
TEST01.zip (9.37 KB)

本帖最後由 Andy2483 於 2023-12-1 15:56 編輯

謝謝論壇,謝謝各位前輩
後學藉此帖練習VBA,學習方案如下,請各位前輩指教
執行前:


執行結果:


Option Explicit
Sub TEST()
Dim Brr, Crr, i&, R&, N&, T$, T1$
'↑宣告變數
Brr = Range([C1], [B65536].End(xlUp))
'↑令Brr變數是裝入儲存格值的二維陣列
ReDim Crr(1 To 1000, 1 To 2)
'↑宣告Crr變數是二維空陣列,宣告其所引號範圍
For i = 2 To UBound(Brr)
'↑設順迴圈!i從2 到 Brr陣列縱向最大列號
   R = Val(Brr(i, 1)): T1 = Trim(Brr(i, 2))
   '↑令R變數是 迴圈列1欄陣列值轉成的數值(週數)
   '令T1變數是 迴圈列2欄陣列值去除前後空白字元後的新字串(內容)

   If R = 0 Or T1 = "" Then GoTo i01 Else Crr(R, 1) = R
   '↑如果序號或內容是空的 !就跳過,否則令結果陣列Crr第1欄週數列寫入週數
   If InStr(T & "/", "/" & T1 & "/") Then GoTo i01 Else N = IIf(N < R, R, N)
   '↑如果串接內容的字串裡有這 T1變數內容!就跳過,
   '否則令N變數記錄結果陣列需要用多少列

   Crr(R, 2) = IIf(Crr(R, 2) = "", T1, Crr(R, 2) & ":" & T1)
   '↑令結果陣列Crr第2欄內容列寫入沒有重複的內容
   T = T & "/" & T1
   '↑令T變數累串接T1變數(內容)
i01: Next
[H:I].ClearContents
'↑令舊的結果儲存格資料清除內容
If N = 0 Then Exit Sub
'↑如果N變數是0(沒有符合的資料)!就結束程式執行
[H3].Resize(N, 2) = Crr
'↑令所需要的結果儲存格區域寫入Crr陣列值
End Sub
用行動裝置瀏覽論壇學習很方便,謝謝論壇經營團隊
請大家一起上論壇來交流

TOP

G3 陣列公式下拉
  1. =TEXTJOIN(":",TRUE,IF(($B$2:$B$30=F3)*($C$2:$C$30<>"")*MATCH($B$2:$B$30&$C$2:$C$30&"<>",$B$2:$B$30&$C$2:$C$30&"<>",)=ROW($1:$29),$C$2:$C$30,""))
複製代碼
365  , F3 公式
  1. =UNIQUE(B2:B30)
複製代碼
365 ,  G3 公式下拉
  1. =TEXTJOIN(":",TRUE,UNIQUE(FILTER($C$2:$C$30,($C$2:$C$30<>"")*($B$2:$B$30=F3))),"")
複製代碼
300 字節以內
不支持自定義 Discuz! 代碼

TOP

google"EXCEL迷"  blog  或google網址:https://hcm19522.blogspot.com/

TOP

回復 10# 准提部林
感謝准大提供的方式!!

TOP

office版本沒有TEXTJOIN, 手寫試下:
陣列公式
=TEXTJOIN(":",TRUE,IF(ISNUMBER(0/(C$2:C$99<>"")/(MATCH(F3&C$2:C$99,B$2:B$99&C$2:C$99,)=ROW($2:$99)-1)),C$2:C$99,""))

TOP

真的感謝 quickfixer 大大提供的資訊,終於特別創造出來啦!!!
G3 = =TEXTJOIN(", ", TRUE, IFNA(IF(MATCH($C$2:$C$30, IF((F3=$B$2:$B$30)*($C$2:$C$30<>""), $C$2:$C$30, ""), 0)=MATCH(ROW($C$2:$C$30), ROW($C$2:$C$30)), $C$2:$C$30, ""),""))
這樣一來可以讓同條件下,相同的合併起來,而且空白的也會排除!!!


參考:https://www.get-digital-help.com/excel-udf-lookup-and-return-multiple-values-concatenated-into-one-cell/#searchdel

TOP

回復 7# quickfixer
原來如此啊!!還以為要自己建立好耶 不然我有100多個 會嚇死人 哈哈
另外你所體及的ifna 有什麼方式讓多餘符號刪除呢
;基礎開挖;;一樓地坪施作    變成     基礎開挖;一樓地坪施作   這樣

TOP

回復 5# edmondsforum


   
用建立複本,excel定義名稱會自動做新的

TOP

回復 5# edmondsforum
補充說明:G3=TEXTJOIN(":",TRUE,IF(($B$2:$B$30=F3)*($C$2:$C$30<>""),IF(MATCH($C$2:$C$30,$C$2:$C$30,0)=(ROW($C$2:$C$30)-ROW($C$1)),$C$2:$C$30,""),"")) 也會有同樣效果,
但就是會把相同文字排除..就算其他週也一樣~"~

TOP

        靜思自在 : 【時間成就一切】時間可以造就人格,可以成就事業,也可以儲積功德。
返回列表 上一主題