標題:
[發問]
請問各位大神,有關 textjoin 根據條件合併後,並刪除重複值
[打印本頁]
作者:
edmondsforum
時間:
2020-6-23 00:00
標題:
請問各位大神,有關 textjoin 根據條件合併後,並刪除重複值
請問各位大神,
我想寫一個能根據我的條件,來合併相關文字,並把有重複的文字,排除。
如下圖所示
[attach]32196[/attach]
我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
還是一樣寫不出來...........
不知道我哪裡卡住了 拜託各位大神了!感恩
供參考
[attach]32198[/attach]
作者:
quickfixer
時間:
2020-6-23 05:01
本帖最後由 quickfixer 於 2020-6-23 05:15 編輯
我找到這篇教學,跟你一樣的格式,我照著做ok喔
https://dhexcel1.wordpress.com/2017/04/04/multiple-lookup-values-in-a-single-cell-withwithout-duplicates-using-only-excel-formulas-by-david-hager/
[attach]32199[/attach]
[attach]32200[/attach]
arange=紀錄!$B$2:$B$30
brange=紀錄!$C$2:$C$30
some_array=SMALL(IF(arange=紀錄!$F3,ROW(brange)-1,""), ROW(INDIRECT("1:"&COUNT(IF(arange=紀錄!$F3,ROW(brange),"")))))
carray=INDEX(brange,N(IF(1,some_array)))
countarray=COUNTA(carray)
rowarray=ROW(INDIRECT("1:"&countArray))
g3=TEXTJOIN(";",,IF(MATCH(carray,carray,0)=rowarray,carray,""))
(ctrl+shift+enter)
作者:
edmondsforum
時間:
2020-6-23 08:47
回復
2#
quickfixer
謝謝大大妳的分享,但我忘了述說一件事,如果我把部分內容都為空白,他會顯示#N/A..怎麼辦呢
[attach]32201[/attach]
作者:
quickfixer
時間:
2020-6-23 10:07
本帖最後由 quickfixer 於 2020-6-23 10:10 編輯
回復
3#
edmondsforum
#N/A 就用ifna處理就好了
=TEXTJOIN(";",,IFNA(IF(MATCH(carray,carray,0)=rowarray,carray,""),""))
(ctrl+shift+enter)
[attach]32202[/attach]
作者:
edmondsforum
時間:
2020-6-23 10:53
回復
4#
quickfixer
再度謝謝大大提供方法,但因考量符號因素和未來 some_array=SMALL(IF(arange=紀錄!$F3,ROW(brange)-1,""), ROW(INDIRECT("1:"&COUNT(IF(arange=紀錄!$F3,ROW(brange),"")))))
這個 紀錄!$F3 會根據工作表: 例如 第1週!F3 / 第2週!F3 ....依此類推
可能要創造100個名稱....
所以剛剛有找到另一個方式,只可惜沒辦法 讓其他週同時出現一樣的文字罷了...
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)-MIN(ROW($C$2:$C$30))+1),$C$2:$C$30,""),""))
[attach]32203[/attach]
目前是希望能讓第3週 能跑出 相同的文字
解決了空白和重複,卻造成其他週重複跑不出來 哈哈
再拜託各位大大協助了
[attach]32204[/attach]
作者:
edmondsforum
時間:
2020-6-23 11:05
回復
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,""),"")) 也會有同樣效果,
但就是會把相同文字排除..就算其他週也一樣~"~
作者:
quickfixer
時間:
2020-6-23 11:18
回復
5#
edmondsforum
[attach]32205[/attach]
用建立複本,excel定義名稱會自動做新的
作者:
edmondsforum
時間:
2020-6-23 11:25
回復
7#
quickfixer
原來如此啊!!還以為要自己建立好耶 不然我有100多個 會嚇死人 哈哈
另外你所體及的ifna 有什麼方式讓多餘符號刪除呢
;基礎開挖;;一樓地坪施作 變成 基礎開挖;一樓地坪施作 這樣
作者:
edmondsforum
時間:
2020-6-23 11:39
真的感謝 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
作者:
准提部林
時間:
2020-6-23 14:11
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,""))
作者:
edmondsforum
時間:
2020-6-23 21:42
回復
10#
准提部林
感謝准大提供的方式!!
作者:
hcm19522
時間:
2020-6-24 18:12
https://blog.xuite.net/hcm19522/twblog/589199759
作者:
zz5151353
時間:
2021-9-8 15:19
G3 陣列公式下拉
=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 公式
=UNIQUE(B2:B30)
複製代碼
365 , G3 公式下拉
=TEXTJOIN(":",TRUE,UNIQUE(FILTER($C$2:$C$30,($C$2:$C$30<>"")*($B$2:$B$30=F3))),"")
複製代碼
作者:
Andy2483
時間:
2023-12-1 09:46
本帖最後由 Andy2483 於 2023-12-1 15:56 編輯
謝謝論壇,謝謝各位前輩
後學藉此帖練習VBA,學習方案如下,請各位前輩指教
執行前:
[attach]37091[/attach]
執行結果:
[attach]37092[/attach]
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
歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)