返回列表 上一主題 發帖

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

回復 1# 星空乂羽翼

請測試看看,謝謝
Sub test()
Dim Arr, xD, C%, T%, T1%
Application.DisplayAlerts = False
Set xD = CreateObject("Scripting.Dictionary")
C = Cells(5, Columns.Count).End(xlToLeft).Column
Arr = Range([e5], Cells(5, C))
For j = 1 To UBound(Arr, 2)
    T = Month(Arr(1, j))
    T1 = Split(Arr(1, j), "/")(2)
    If T1 = 1 Then
        If T = 1 Then
            Cells(4, j + 4) = "一月"
        ElseIf T = 2 Then
            Cells(4, j + 4) = "二月"
        ElseIf T = 3 Then
            Cells(4, j + 4) = "三月"
        ElseIf T = 4 Then
            Cells(4, j + 4) = "四月"
        ElseIf T = 5 Then
            Cells(4, j + 4) = "五月"
        ElseIf T = 6 Then
            Cells(4, j + 4) = "六月"
        ElseIf T = 7 Then
            Cells(4, j + 4) = "七月"
        ElseIf T = 8 Then
            Cells(4, j + 4) = "八月"
        ElseIf T = 9 Then
            Cells(4, j + 4) = "九月"
        ElseIf T = 10 Then
            Cells(4, j + 4) = "十月"
        ElseIf T = 11 Then
            Cells(4, j + 4) = "十一月"
        ElseIf T = 12 Then
            Cells(4, j + 4) = "十二月"
        End If
    End If
    If xD.Exists(T) Then
        Set xD(T) = Union(xD(T), Cells(4, j + 4))
    Else
        Set xD(T) = Cells(4, j + 4)
    End If
Next
For Each ky In xD.keys
    xD(ky).Merge
Next
Application.DisplayAlerts = True
End Sub

TOP

回復 2# samwang

更新一下合併後置中如下,謝謝
For Each ky In xD.keys
    xD(ky).Merge
    xD(ky).HorizontalAlignment = xlCenter   '置中
Next

TOP

回復 4# 星空乂羽翼


處理過程大致如下:
1. 根據第5列資料,在第4列位置會自動填入月份,如一月、二月...
2. 合併同月份,根據第5列資料

TOP

回復  samwang

S大
目前測試下來,因專案啟始的日期會改變
測試後有一問題
月份合併會出現跨月的情況 ...
星空乂羽翼 發表於 2022-11-29 13:52


請提供有問題檔案,這樣比較容易測試,謝謝

若想依條件自動合併儲存格,單純的函數是否無法達成?這後學不知道,可以再看看其他大大

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

回復 15# Andy2483

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

TOP

回復 18# Andy2483


經您的說明已了解,感謝

TOP

        靜思自在 : 君子為目標,小人為目的。
返回列表 上一主題