返回列表 上一主題 發帖

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

回復 18# Andy2483

感謝Andy2483前輩的指導
讓小弟我可以有多多學習的機會!
非常感謝!

待後續小弟理解後
若有問題再跟您提出
到時候再麻煩您了!感謝您!

TOP

本帖最後由 Andy2483 於 2022-12-1 14:37 編輯

回復 20# 星空乂羽翼


    可以參考 : 請問vba的內外框線 主題
http://forum.twbts.com/thread-9862-1-1.html
一起學習!

TOP

回復 22# Andy2483

好的
感謝您提供的參考網頁!
讓後學花點時間理解一下,再進行變化。
感謝!

TOP

用工作表事件觸發合併月份//
Xl0000314-1.rar (22.06 KB)

TOP

回復 24# 准提部林

感謝版主准提部林的回覆
不好意思
目前後學積分還差ㄧ些
待我再努力一下
便可下載您的檔案來學習

感謝您!

TOP

本帖最後由 Andy2483 於 2022-12-19 08:52 編輯

回復 24# 准提部林


    謝謝前輩指導
這帖學到很多知識,後學沒有天才的天分,只能靠勤學習勤練習
學習結果與心得註解如下,請同學可藉此帖再提出不同看法或疑問,
請前輩們再指導
過程:


結果:


工作表模組:
Private Sub Worksheet_Change(ByVal Target As Range)
With Target
'↑以下是關於觸發(儲存格值編輯)後的程序
     If .Address <> "$E$5" Then Exit Sub
     '↑如果觸發格的位址不是 "$E$5",就結束程式執行
     If IsDate(.Value) Then Call 合併月份
     'https://learn.microsoft.com/zh-tw/office/vba/language/reference/user-interface-help/isdate-function
     'IsDate()如果運算式是日期或是可辨識為有效的日期或時間,會傳回 True,否則會傳回 True 。否則,它會傳回 False。
     'if的條件成立!就執行 合併月份 副程式
     '觸發[E5]可以帶起連鎖反應,公式更新,月份也更新了

End With
End Sub

Module1:
Sub 合併月份()
Dim xR As Range, xA As Range, m$, m1$, m2$
'↑宣告變數(xR,xA)是儲存格變數,(m,m1,m2)是字串變數
Application.ScreenUpdating = False
'↑螢幕畫面暫不跟著程序變化執行結果
With Range("e4", Cells(5, Columns.Count).End(xlToLeft)(0))
'↑以下是關於儲存格[E4]到第5列最右邊有內容欄位儲存格的程序
     .UnMerge:  .ClearContents
     '↑取消合併儲存格 :清除儲存格內容
     For Each xR In .Cells
     '↑設順迴圈!令xR 是這些儲存格之一,從前面輪到後面(左至右)
         m1 = Format(xR(2), "m")
         '↑令m1是迴圈xR 下方1格儲存格變化為字串(規則是:取日期的不補0月份)
         '同m1 = Format(xR.ITEM(2, 1), "m")
'https://learn.microsoft.com/zh-tw/office/vba/language/reference/user-interface-help/format-function-visual-basic-for-applications

         m2 = Format(xR(2, 2), "m")
         '↑令m2是迴圈xR 下方1列左方1欄儲存格變化為字串(規則是:取日期的不補0月份)
         '同m2 = Format(xR.ITEM(2, 2), "m")

         If m1 <> m Then
         '↑如果m1<>m ,m字串變數的初始值是"",這樣的判斷式在第一格時條件就會成立!
         '這是後學要學習的方法!既然都知道要宣告m字串,為什麼又不會讓m跟m1比就會得到結果!!
         '需要跳脫字串變數一定要給一個字串才拿來做邏輯判斷的想法!
         '勤學習勤練習看看可否跳脫,謝謝前輩指導

            m = m1:  Set xA = xR
            '↑if條件成立!就令m=m1 ,令xA儲存格變數是 xR
            xR = Application.Text(xR(2), "[DBNum1]m月")
            '↑令xR儲存格變數值是 迴圈xR下方1格儲存格變化為小寫月份字串
            'Text()會傳回指定之物件的格式化文字。 唯讀的 String
            '[DBNum1]:中文小寫
            '[DBNum2]:中文大寫

         End If
         If m2 <> m Then Range(xR, xA).Merge
         '↑如果m2 <> m,就讓儲存格(xR尾格, xA頭格)之間的儲存格合併
     Next
    .Borders.LineStyle = 1
     '令整個儲存格集範圍格線是細實線
End With
End Sub
'↑螢幕畫面在執行結束後自動顯示最後結果
用行動裝置瀏覽論壇學習很方便,謝謝論壇經營團隊
請大家一起上論壇來交流

TOP

回復 26# Andy2483

  謝謝前輩自行學習時也將註解放上來
讓後學可以更好理解學習
非常感謝!

TOP

        靜思自在 : 【做人的開始】每一天都是故人的開始,每一個時刻都是自己的警惕。
返回列表 上一主題