Board logo

標題: [發問] 四欄合併成一欄 [打印本頁]

作者: av8d    時間: 2023-2-14 15:13     標題: 四欄合併成一欄

本帖最後由 av8d 於 2023-2-14 15:28 編輯

[attach]35844[/attach]

因為四欄隨機會有空值,如果用最簡單的&","&做連結就會多出許多,
請問有類似的函數可以解決該問題嗎?謝謝前輩們。

補充:附件中的合併欄裡的 電話1234是方便填寫,實際是該列的電話數字。
作者: Andy2483    時間: 2023-2-14 16:39

回復 1# av8d


    謝謝前輩發表此主題與範例
後學也想學公式函數的方式,後學提供學習VBA的解決方案,請前輩試試看

執行前:
[attach]35845[/attach]

執行結果:
[attach]35846[/attach]

Option Explicit
Sub TEST()
Dim Arr, N&, i&, j&
Arr = Range([D1], Cells(ActiveSheet.UsedRange.Rows.Count, "A"))
For i = 2 To UBound(Arr)
   N = N + 1: Arr(N, 1) = ""
   For j = 1 To UBound(Arr, 2)
      If Trim(Arr(i, j)) <> "" Then
         If Arr(N, 1) = "" Then
            Arr(N, 1) = "'" & Trim(Arr(i, j))
            Else
               Arr(N, 1) = Arr(N, 1) & "," & Trim(Arr(i, j))
         End If
      End If
   Next
Next
[E2].Resize(N, 1) = Arr
Set Arr = Nothing
End Sub
作者: av8d    時間: 2023-2-14 17:56

回復 2# Andy2483

謝謝前輩透過VBA的字典實現這難解的任務,非常好用,受益良多。
作者: 准提部林    時間: 2023-2-14 19:21

回復 3# av8d


可以用 TEXTJOIN
若版本沒有TEXTJOIN, 只有四個欄位, 用 & 連接也可以
=SUBSTITUTE(TRIM(A2&" "&B2&" "&C2&" "&D2)," ",",")
作者: Andy2483    時間: 2023-2-15 07:38

回復 4# 准提部林


    謝謝前輩
此範例學習到 TRIM(),SUBSTITUTE()
1.TRIM()會將頭尾的空白字元除去
2.TRIM()會將字串內的連續空白字元收斂剩下一個空白字元
3.SUBSTITUTE()做字元的置換

[attach]35847[/attach]
作者: Andy2483    時間: 2023-2-15 08:08

本帖最後由 Andy2483 於 2023-2-15 08:11 編輯

回復 3# av8d


    謝謝前輩回復
後學今天複習了一下並作心得註解,請前輩參考

Option Explicit
Sub TEST()
Dim Arr, N&, i&, j&
'↑宣告變數:Arr是通用型變數,(N,i,j)是長整數變數
Arr = Range([D1], Cells(ActiveSheet.UsedRange.Rows.Count, "A"))
'↑令Arr這通用型變數是二維陣列,以現表[D1]到A欄/使用列儲存格,這方正範圍儲存格值倒入
'PS:使用列:已使用儲存格擴展為最小方正範圍儲存格的列數

For i = 2 To UBound(Arr)
'↑設順迴圈!i從2到 Arr陣列縱向最大索引列號數
   N = N + 1: Arr(N, 1) = ""
   '↑令N這長整數變數累加 1 :令N變數列第1欄Arr陣列值是空字元
   For j = 1 To UBound(Arr, 2)
   '↑設順迴圈!j從2到 Arr陣列橫向最大索引欄號數
      If Trim(Arr(i, j)) <> "" Then
      '↑如果i迴圈列第j迴圈欄Arr陣列值去頭尾空白字元後不是空字元 ??
         If Arr(N, 1) = "" Then
         '↑如果N變數列第1迴圈欄Arr陣列值是空字元??
            Arr(N, 1) = "'" & Trim(Arr(i, j))
            '↑令N變數列第1迴圈欄Arr陣列值是 單引號,
            '連接i迴圈列第j迴圈欄Arr陣列值去頭尾空白字元的新字串

            Else
               Arr(N, 1) = Arr(N, 1) & "," & Trim(Arr(i, j))
               '↑否則令N變數列第1迴圈欄Arr陣列值是 自身,
               '連接","符號,再連接i迴圈列第j迴圈欄Arr陣列值去頭尾空白字元的新字串

         End If
      End If
   Next
Next
[E2].Resize(N, 1) = Arr
'↑令[E2]擴展向下N變數列,向右不擴展的範圍儲存格值,以Arr陣列值帶入
Set Arr = Nothing
'↑令釋放變數
End Sub
作者: hcm19522    時間: 2023-2-16 11:50

https://blog.xuite.net/hcm19522/twblog/590724788




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)