返回列表 上一主題 發帖

[發問] 直式日期+星期公式之疑惑...

謝謝論壇,謝謝各位前輩
後學藉此帖練習VBA的方法,學習方案如下:

Option Explicit
Sub TEST_2()
Dim Brr, i&, Y%, M%, D1 As Date, D2 As Date, N%
Y = [AH1] + 1911: M = [AH2]: D1 = Y & "/" & M & "/" & "1"
Y = IIf(M = 12, Y + 1, Y): M = IIf(M = 12, 1, M + 1)
D2 = Y & "/" & M & "/" & "1": D2 = D2 - 1
With [A4:B65]
   .ClearContents: Brr = .Value: .FormatConditions.Delete: .Interior.ColorIndex = xlNone
   For i = 0 To (D2 - D1)
      Brr(i * 2 + 1, 1) = D1 + N: Brr(i * 2 + 1, 2) = Right(Format(D1 + N, "aaa"), 1)
      If InStr("六日", Brr(i * 2 + 1, 2)) Then Cells(i * 2 + 4, "B").Interior.ColorIndex = 38
      N = N + 1
   Next
   .Value = Brr
End With
End Sub
用行動裝置瀏覽論壇學習很方便,謝謝論壇經營團隊
請大家一起上論壇來交流

TOP

本帖最後由 Andy2483 於 2023-5-15 08:28 編輯

回復 9# cypd


    謝謝前輩回復,一起學習
後學今天複習這帖,方案學習心得註解如下,請前輩參考

Option Explicit
Sub TEST_2()
Dim Brr, i&, Y%, M%, D1 As Date, D2 As Date
'↑宣告變數
Y = [AH1] + 1911: M = [AH2]: D1 = Y & "/" & M & "/" & "1"
'↑令Y變數是 [AH1]儲存格值+1911,
'令M變數是 [AH2]儲存格值,
'令D1這日期變數是 西元年/月/1

Y = IIf(M = 12, Y + 1, Y): M = IIf(M = 12, 1, M + 1)
'如果月份是12,就令年分+1,
'如果月份是12,就令月份是 1月,否則就將月份+1,
'這是要處裡跨年辨認12月最後一天

D2 = Y & "/" & M & "/" & "1": D2 = D2 - 1
'↑令D2這日期變數是 西元年/月/1 (D2是下個月的第1天)
'↑令D2變數是自身日期的前一天(也就是上個月的最後一天)
With [A4:B65]
'↑以下是關於儲存格的程序
   .ClearContents: Brr = .Value
   '↑清除儲存格內容
   .FormatConditions.Delete
   '↑刪除格式化條件
   .Interior.ColorIndex = xlNone
   '↑令儲存格底色是 無色
   For i = 0 To (D2 - D1)
   '↑設順迴圈
      Brr(i * 2 + 1, 1) = D1 + i + 1: Brr(i * 2 + 1, 2) = Right(Format(D1 + i + 1, "aaa"), 1)
      '↑令日期與星期寫入Brr陣列裡
      If InStr("六日", Brr(i * 2 + 1, 2)) Then Cells(i * 2 + 4, "B").Interior.ColorIndex = 38
      '↑令即將是星期六日的儲存格底色先變為桃紅色
   Next
   .Value = Brr
   '↑令Brr陣列值寫入儲存格中
End With
End Sub
用行動裝置瀏覽論壇學習很方便,謝謝論壇經營團隊
請大家一起上論壇來交流

TOP

回復 11# cypd


    謝謝前輩
後學囫圇吞棗的學習想必困擾各位了,謝謝論壇的包容,謝謝各位前輩指教
後學訂正如下的學習方案心得註解,請前輩參考


Option Explicit
Sub TEST_2()
Dim Brr, i&, Y%, M%, D1 As Date, D2 As Date, N%
'↑宣告變數
Y = [AH1] + 1911: M = [AH2]: D1 = Y & "/" & M & "/" & "1"
'↑令Y變數是 [AH1]儲存格值+1911,
'令M變數是 [AH2]儲存格值,
'令D1這日期變數是 西元年/月/1

Y = IIf(M = 12, Y + 1, Y): M = IIf(M = 12, 1, M + 1)
'如果月份是12,就令年分+1,
'如果月份是12,就令月份是 1月,否則就將月份+1,
'這是要處裡跨年辨認12月最後一天

D2 = Y & "/" & M & "/" & "1": D2 = D2 - 1
'↑令D2這日期變數是 西元年/月/1 (D2是下個月的第1天)
With [A4:B65]
'↑以下是關於儲存格的程序
   .ClearContents: Brr = .Value
   '↑清除儲存格內容
   .FormatConditions.Delete
   '↑刪除格式化條件
   .Interior.ColorIndex = xlNone
   '↑令儲存格底色是 無色
   For i = 0 To (D2 - D1)
   '↑設順迴圈
      Brr(i * 2 + 1, 1) = D1 + N: Brr(i * 2 + 1, 2) = Right(Format(D1 + N, "aaa"), 1)
      '↑令日期與星期寫入Brr陣列裡
      If InStr("六日", Brr(i * 2 + 1, 2)) Then Cells(i * 2 + 4, "B").Interior.ColorIndex = 38
      '↑令即將是星期六日的儲存格底色先變為桃紅色
      N = N + 1
      '↑令N變數累加 1
   Next
   .Value = Brr
   '↑令Brr陣列值寫入儲存格中
End With
End Sub
用行動裝置瀏覽論壇學習很方便,謝謝論壇經營團隊
請大家一起上論壇來交流

TOP

本帖最後由 Andy2483 於 2023-5-22 07:52 編輯

回復 13# cypd


    謝謝前輩再回復
右鍵指定巨集:


輸入 TEST_2:


年份同樣的方式設定
用行動裝置瀏覽論壇學習很方便,謝謝論壇經營團隊
請大家一起上論壇來交流

TOP

        靜思自在 : 是非當教育,讚美作警惕。
返回列表 上一主題