返回列表 上一主題 發帖

[發問] excel 自動合併儲存格

回復 8# Andy2483

感謝Andy2483前輩大大的解說
讓對VBA這塊還是小白的我可以更好的理解
非常感謝!

TOP

回復  samwang

S大
以下為有問題的檔案
另外
日期的產生是
除了起始日期(第一天)是手動填入 ...
星空乂羽翼 發表於 2022-11-29 14:55


新增如下紅字部分,請再測試看看,謝謝

Sub test()
Dim Arr, xD, C%, T%, T1%
Application.DisplayAlerts = False
Set xD = CreateObject("Scripting.Dictionary")
C = Cells(5, Columns.Count).End(xlToLeft).Column
Range([e4], Cells(4, C)).UnMerge '解除第四列合併儲存格
Range([e4], Cells(4, C)).Clear   '清除資料

Arr = Range([e5], Cells(5, C))
For j = 1 To UBound(Arr, 2)
    T = Month(Arr(1, j))
...
...
...

TOP

回復 8# Andy2483

這個V= split用的真好,另外,請教一下xD(x)(1),為什麼(1)? 這是什麼意思? 謝謝

V = Split(",一,二,三,四,五,六,七,八,九,十,十一,十二", ",")
'↑令V是字串用 ","符號分割的一維陣列
For Each x In xD.Keys
   xD(x).UnMerge
   xD(x).Merge
   xD(x).HorizontalAlignment = xlCenter
   mm = Split(x, "/")(1)
    xD(x)(1) = V(mm) & "月"
   '↑xD字典裡迴圈Key對應的 儲存格集第一格填入文字:
    '文字是用mm數字抓取 V一維陣列裡對應的國字數字串,後面再加 "月"字
Next

TOP

回復 13# samwang


    謝謝前輩回復
5:00後家裡忙!明天再繼續討論!
謝謝

TOP

回復 13# samwang


    前輩早安
1.V = Split(",一,二,三,四,五,六,七,八,九,十,十一,十二", ",")是抄來的!學 准提部林前輩的範例稍做變通
http://forum.twbts.com/viewthrea ... eD2&ordertype=1
For j = 1 To 9 'i = 2 設迴圈將資料帶入Crr陣列第一列
        Crr(xD(T1), j) = Arr(i, Array(9, 10, 11, 12, 22, 23, 24, 8, 5)(j - 1))
        '↑當i = 2:一開始 Crr(xD(T1), j) = Crr(1, j) 因為 xD(T1)=1
        '  ,Array()指定放入的欄位,(j - 1)是因為Array的第一筆索引是0
        '↑當i >= 3:專特案號都是A2009001,所以在前方xD(T1)都有加1  xD(T1) = xD(T1) + 1
        '↑直到i = 50:專特案號變成A2104001,xD(T1)變成1
        '↑到i = 59:專特案號又變成A2009001,所以xD("A2009001") ITEM在前方已繼續加1
Next j

2.xD(x)(1),為什麼(1)? 這是什麼意思?  後學也不知道!亂猜的!矇到的
因為學習陣列與字典的熱情使然,能用陣列和字典的機會都不想放過,
陣列和字典遇到問題的方式就是:
1.把學習過註解過的帖子拿來運用
2.數字化的亂試!試成功了就更有動力
3.若不成功!查網路相關知識,繼續亂試
4.再不成功!就在論壇開新主題發問
5.平常就把前輩們的心血創作帖一字一行一陣列一字典一迴圈一帖的註解
5.1.確定自己的思考.邏輯是否正確!放上論壇請前輩們再指導,以後複習也方便
5.2.以前走馬看花!認為懂的都是矇懂!認為不懂的就帶過是後學不積極的學法
5.3.現在常不看題意!不想知道網友問什麼!直接開始註解 准提部林前輩程式碼!最後才知道題意
5.4.文字敘述的邏輯.口條也想繼續學習
6.三人行必有我師!最重要的是有伴!謝謝前輩
7.謝謝論壇!謝謝前輩們的指導!謝謝

TOP

回復 13# samwang


    經測試結果:
'xD(x)(1) = xD(x).Offset(0, 0)(1, 1)
'xD(x)(1) = xD(x).Offset(0, 0)(1)
'xD(x)(1) = xD(x).Offset(0, 0)

'xD(x)(1) = xD(x).Item(1, 1)(1, 1)
'xD(x)(1) = xD(x).Item(1, 1)(1)
'xD(x)(1) = xD(x).Item(1, 1)

'xD(x)(1) = xD(x).Cells(1, 1)(1, 1)(1, 1)
'xD(x)(1) = xD(x).Cells(1, 1)(1, 1)
'xD(x)(1) = xD(x).Cells(1, 1)(1)
'xD(x)(1) = xD(x).Cells(1, 1)

'xD(x)(1) = xD(x)(1, 1)
所以應該是儲存格集裡的位置!
可是這樣說也還不準,這帖的情境是要合併儲存格,所以儲存格集一定是連續的相連儲存格,
不知道跳格的儲存格集可不可以這樣用?? 待後學後續研究到結果再來此主題回復

TOP

回復 15# Andy2483

感謝您的解說,另外這個Split讓後學想到也可以改成Array,謝謝
V = Split(",一,二,三,四,五,六,七,八,九,十,十一,十二", ",")
V = Array("", "一", "二", "三", "四", "五", "六", "七", "八", "九", "十", "十一", "十二")

TOP

回復 13# samwang


    謝謝前輩一起研討 xD(x)(1)
經後學研究結果跟16樓差異很大! 請前輩複製下列程式碼測試就會知道了!
後學不知道該怎麼敘述他的邏輯

Option Explicit
Sub Union_test_1()
Dim xU As Range
Set xU = [A1:A2]
Set xU = Union(xU, [C1].Resize(2, 1))
Set xU = Union(xU, [E5].Resize(2, 1))
MsgBox xU(15).Address
End Sub
Sub Union_test_2()
Dim xU As Range
Set xU = [A1:A2]
Set xU = Union([C1].Resize(2, 1), xU)
Set xU = Union([E5].Resize(2, 1), xU)
MsgBox xU(15).Address
End Sub
Sub Union_test_3()
Dim xU As Range
Set xU = [A1:A2]
Set xU = Union(xU, [B1].Resize(2, 1))
Set xU = Union(xU, [E5].Resize(2, 1))
MsgBox xU(15).Address
End Sub
Sub Union_test_4()
Dim xU As Range
Set xU = [A1:A2]
Set xU = Union([B1].Resize(2, 1), xU)
Set xU = Union([E5].Resize(2, 1), xU)
MsgBox xU(15).Address
End Sub
Sub Union_test_5()
Dim xU As Range
Set xU = [A1:A2]
Set xU = Union([F5].Resize(2, 1), xU)
Set xU = Union([E5].Resize(2, 1), xU)
MsgBox xU(5).Address
End Sub
Sub Union_test_6()
Dim xU As Range
Set xU = [A1:A2]
Set xU = Union(xU, [C1].Resize(2, 1))
Set xU = Union(xU, [E5].Resize(2, 1))
MsgBox xU(15, 1).Address
End Sub
Sub Union_test_7()
Dim xU As Range
Set xU = [A1:A2]
Set xU = Union(xU, [C1].Resize(2, 1))
Set xU = Union(xU, [E5].Resize(2, 1))
MsgBox xU(1, 15).Address
End Sub
Sub Union_test_8()
Dim xU As Range
Set xU = [A1:A2]
Set xU = Union(xU, [C1].Resize(2, 1))
Set xU = Union(xU, [E5].Resize(2, 1))
MsgBox xU(15, 15).Address
End Sub

TOP

回復 18# Andy2483


經您的說明已了解,感謝

TOP

回復 12# samwang

感謝S大
已測試完成
功能正常!
非常感謝!

另外想再追ㄧ項功能
請問月份合併後能自動加入外框的格線嗎?

再麻煩了,感謝!

TOP

        靜思自在 : 【蒙蔽的自由】人常在什麼都可以自由自在的時候,卻被這種隨心所欲的自由蒙蔽,虛擲時光而毫無覺知。
返回列表 上一主題