Board logo

標題: [發問] 如何把三個儲存格內容整合成一個並對齊 [打印本頁]

作者: olisun    時間: 2022-3-31 00:18     標題: 如何把三個儲存格內容整合成一個並對齊

本帖最後由 olisun 於 2022-3-31 00:21 編輯

請問如何把三個儲存格內容整合成一個並對齊[attach]34744[/attach]
作者: quickfixer    時間: 2022-3-31 01:23

回復 1# olisun


    E2=IF(AND(A2<>"",B2<>"",C2<>""),(A2&REPT("  ",MAX(LEN($A$2:$A$1000))-LEN(A2)) &"+" & B2 & "  " &  REPT("  ",MAX(LEN($B$2:$B$1000))-LEN(B2)) & C2),"")
我只會這種比較長的陣列公式(ctrl+shift+enter)
作者: olisun    時間: 2022-3-31 01:31

回復  olisun
請問如果戶別是S1,這樣要怎麼處理?

    E2=IF(AND(A2"",B2"",C2""),(A2&REPT("  ",MAX(LEN($A$2A$1000))-LEN(A2)) &"+"  ...
quickfixer 發表於 2022-3-31 01:23
[attach]34745[/attach]
作者: olisun    時間: 2022-3-31 12:50

回復 2# quickfixer

謝謝,明白了
作者: hcm19522    時間: 2022-3-31 13:17

https://blog.xuite.net/hcm19522/twblog/590319096
作者: 准提部林    時間: 2022-3-31 18:57

D2//陣列公式(三鍵輸入)
=A2&REPT(" ",MAX(LEN(A$2:A$4))-LEN(A2))&"+"&B2&REPT(" ",MAX(LEN(B$2:B$4))-LEN(B2)+1)&C2
作者: quickfixer    時間: 2022-3-31 19:20

回復 3# olisun


    [attach]34746[/attach]

e2=IF(AND(A2<>"",C2<>""),(A2&REPT(" ",MAX(LEN($A$2:$A$1000))-LEN(A2)) &"+" & B2 & REPT(" ",MAX(LEN($B$2:$B$1000))-LEN(B2)+1) & C2),"")
陣列公式

只在乎對齊,不管中文字型
欄位e,新版excel字型用   Courier New     ,舊版excel用    terminal
作者: olisun    時間: 2022-3-31 23:03

回復 5# hcm19522


    謝謝
作者: olisun    時間: 2022-3-31 23:03

回復 6# 准提部林


    謝謝指導
作者: olisun    時間: 2022-3-31 23:11

回復 7# quickfixer


    請問,如果沒有車位會出現+0
例如A1/2F沒購車位會出現A1/2F +0  吳大頭,
怎麼當無購買車位出現       A1/2F        吳大頭
作者: quickfixer    時間: 2022-3-31 23:28

回復 10# olisun

陣列公式
e2    =IF(AND(A2<>"",C2<>""),(A2&REPT(" ",MAX(LEN($A$2:$A$1000))-LEN(A2)) & IF(B2=""," ","+") & B2 & REPT(" ",MAX(LEN($B$2:$B$1000))-LEN(B2)+1) & C2),"")

[attach]34747[/attach]
作者: Andy2483    時間: 2022-12-28 15:16

本帖最後由 Andy2483 於 2022-12-28 15:30 編輯

回復 1# olisun


    謝謝前輩發表此主題與範例,謝謝各位前輩指導
後學藉此帖習得很多知識與經驗,用布林變數整合迴圈,認識Rept()運算式.....
以下執行過程與心得註解請各位前輩指導

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

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

Option Explicit
Sub TEST_20221228_2()
Dim Arr, i&, j&, S&, A&(3), B$(3), T As Boolean
'↑宣告變數:Arr是通用型變數,(i,j,S)是長整數變數,(A,B)是一維陣列,T是布林變數
Arr = Range([C2], [A65536].End(3))
'↑令Arr是二維陣列!以[C2]到A欄最後有內容儲存格值倒入
Head:
S = IIf(T, 1, 3)
'↑令S這長整數變數依 IIf()判斷T變數是Ture:S=1,T變數是False:S=3
For i = 1 To S
'↑設順迴圈!i從1到S變數
   For j = 1 To UBound(Arr)
   '↑設順迴圈!j從1到Arr陣列縱向最大列索引號
      If T Then
      '↑如果T變數是 Ture     PS:T是 布林變數,其初始值是False
         B(1) = Arr(j, 1) & Application.Rept(" ", A(1) - Len(Arr(j, 1)))
         '↑令索引號1的B陣列值是 j迴圈列第1欄Arr陣列值連接 數個" "空白字元,
         '數個?:以Rept()運算式複製(索引號1的A陣列值- j迴圈列第1欄Arr陣列值的字數)個" "空白字元
         'https://learn.microsoft.com/zh-tw/office/vba/api/excel.worksheetfunction.rept

         B(2) = Arr(j, 2) & Application.Rept(" ", A(2) - Len(Arr(j, 2)))
         '↑類推
         Arr(j, i) = B(1) & "+" & B(2) & " " & Arr(j, 3)
         '↑令j迴圈列i迴圈欄Arr陣列值是 三個B陣列值連接"+"和" "符號的字串
         ElseIf A(i) < Len(Arr(j, i)) Then
         '↑否則如果i迴圈A陣列值 < j迴圈列i迴圈欄Arr陣列值裡的字數??
            A(i) = Len(Arr(j, i))
            '↑令i迴圈A陣列值是 j迴圈列i迴圈欄Arr陣列值裡的字數
            '(求最大字數)
      End If
   Next
Next
If T = False Then T = True: GoTo Head
'↑如果T變數是 False,就讓T變數是 True,程序跳到 Head標示處繼續執行
[H2].Resize(UBound(Arr), 1) = Arr
'↑令[H2]擴展向下Arr陣列縱向最大列索引號數,向右不擴展,這欄儲存格值以Arr陣列值倒入
Set Arr = Nothing
Erase A, B
End Sub
作者: Andy2483    時間: 2022-12-29 15:00

本帖最後由 Andy2483 於 2022-12-29 15:11 編輯

回復 12# Andy2483


    練習改為自訂函數,請各位前輩指導,謝謝
[I2]儲存格輸入:    =三欄合併以字符連接並對齊("="," ",A2:C2,A:C)
[attach]35698[/attach]

I2下拉至I6:
[attach]35699[/attach]

Option Explicit
Function 三欄合併以字符連接並對齊(X As String, Y As String, Z As Range, Area As Range)
'↑自訂函數:三欄合併以字符連接並對齊(第一個連接字符,第二個連接字符,連接儲存格,對齊參照儲存格)
Dim Arr, i&, j&, S&, A&(2), B$(2), T As Boolean
Arr = Area
Head:
S = IIf(T, 1, 2)
For i = 1 To S
   For j = 1 To UBound(Arr)
      If Arr(j, 1) = "" Then Exit For
      If T Then
         B(1) = Arr(j, 1) & Application.Rept(" ", A(1) - Len(Arr(j, 1)))
         B(2) = Arr(j, 2) & Application.Rept(" ", A(2) - Len(Arr(j, 2)))
         Arr(j, i) = B(1) & "+" & B(2) & " " & Arr(j, 3)
         ElseIf A(i) < Len(Arr(j, i)) Then
            A(i) = Len(Arr(j, i))
      End If
   Next
Next
If T = False Then T = True: GoTo Head
三欄合併以字符連接並對齊 = Arr(Z.Row, 1)
Set Arr = Nothing
Erase A, B
End Function




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