| ©«¤l1517 ¥DÃD40 ºëµØ0 ¿n¤À1541 ÂI¦W0  §@·~¨t²ÎWindows  7 ³nÅ骩¥»Excel 2010 & 2016 ¾\ŪÅv100 ©Ê§O¨k ¨Ó¦Û¥xÆW µù¥U®É¶¡2020-7-15 ³Ì«áµn¿ý2025-10-31 
 | 
                
| ¥»©«³Ì«á¥Ñ Andy2483 ©ó 2022-12-8 10:20 ½s¿è 
 ¦^´_ 11# ¬PªÅÉ@¦ÐÁl
 
 
 ÁÂÁ«e½ú¦A¦^´_
 ¤À¨É«p¾Ç(«pÁy¥Ö¾Ç¥Í)ªº¤ß±o
 ¤ß±oµù¸Ñªº¹Lµ{¦A¦¸Àˬd¨ì«Ü¦h¯Êº|!
 ©ú¦~§À¦æ¬F°|µo¥¬ªº2024¦~¦æ¨Æ¾ä®æ¦¡¦pªG¨SÅÜ??À³¸Ó¥i¥HÄò¥Î
 
 ¬¡¤Æ¸£²ÓM,¦ÒÅç¦Û¤v«í¤ß@¤ßªº³Ì¨Î¿ï¾Ü ³Â»¶®a±Ú°Q½×ª©ª©
 ÁÂÁ½׾Â
 
 Option Explicit
 Sub ¤W¯Z¤é_°²¤é_¸É¯Z¤é()
 Dim Brr, Sh1, V, xA, xR, Z, P, W
 '¡ô«Å§i³o¨ÇÅܼƬO³q¥Î«¬ÅܼÆ
 Dim i&, n&, T&
 '¡ô«Å§i³o¨ÇÅܼƬOªø¾ã¼Æ
 Dim X&(4), Ch$, y%, ymd As Date
 '¡ô«Å§iX¬O¤@ºû°}¦C(0~4),(Ch)¬O¦r¦êÅܼÆ,(y)¬Oµu¾ã¼ÆÅܼÆ,(ymd)¬O¤é´ÁÅܼÆ
 Set W = CreateObject("Scripting.Dictionary")
 Set Z = CreateObject("Scripting.Dictionary")
 Set P = CreateObject("Scripting.Dictionary")
 '¡ô¥OW.Z.P¦U¬O¦r¨å
 Set Sh1 = Sheets("Sheet1")
 '¡ô¥OSh1 ¬O"Sheet1" ¤u§@ªí(ªí¤@)
 Set Brr = Range(Sh1.[A1], Sh1.UsedRange)
 '¡ô¥OBrr¬Oªí¤@[A1]¨ì ªí¤@¦³¨Ï¥ÎÀx¦s®æ¤§¶¡ ÂX®i¬°³Ì¤p¤è¥¿½d³òªºÀx¦s®æ¶°
 Sh1.[AA:AH].ClearContents
 '¡ô¥OÄæ¦ì²M°£Àx¦s®æ¤º®e
 V = Split(",¤@,¤G,¤T,¥|,¤,¤»,¤C,¤K,¤E,¤Q,¤Q¤@,¤Q¤G", ",")
 '¡ô¥OV¬O Âù¤Þ¸¹¸Ìªº¦r¦ê¥H ","²Å¸¹¤À³Î¦¨ªº¤@ºû¦r¦ê°}¦C(PS:²Ä¤@Ó¬O"",¯Á¤Þ¸¹¬O0)
 For i = 1 To 12
 '¡ô³]¶¶°j°é!i±q1¨ì12
 Z(V(i) & "¤ë") = i
 '¡ô¥OV¤@ºû°}¦Cªº°j°é¯Á¤Þ¸¹¦ì¸mªº¦r¦ê¬°key,item¬O°j°é¼Æ,˶i¦r¨å¸Ì
 Next
 For Each xR In Brr
 '¡ô³]¶¶°j°é!¥OxR¬O BrrÀx¦s®æ¶°¸Ìªº¤@®æ!¥Ñ¥ª¦Ü¥k/¤W¦Ü¤U¶]
 If xR Like "*¦è¤¸####¦~*" Then y = Mid(xR, InStr(xR, "¦è¤¸") + 2, 4)
 '¡ô¦pªGxRªºÈ ¸Ì±ªº¦r¤¸²Õ¦X¦³¥]§t "¦è¤¸" ³s±µ4ӼƦr ¦A³s±µ"¦~" ??
 '±ø¥ó¦¨¥ß!¥Oy¬O ¨úxRȪº "¦è¤¸"¦r¤¸¦ì¸m+2 ¶}©l,¨ú4Ó¦r¤¸ªºÈ  PS:2023
 Ch = xR & xR.Item(, 2) & xR.Item(, 3)
 '¡ô¥OCh¦r¦êÅܼƬO xRªºÈ³s±µ ¥kÃ䮿ªºÈ,¦A³s±µ¥k2®æªºÈ
 If Z.Exists(Ch) And xR.Item(, 3) <> "" Then
 '¡ô¦pªG¥HCh¦r¦êÅܼƬd¹îZ¦r¨å¬O¦³³okey,¦Ó¥BxR ¥k2®æªºÈ¤£¬OªÅ¦r¤¸ ??
 Set W(Ch) = xR.Item(1, -1).Resize(14, 7)
 '¡ô¥O¥OCh¦r¦êÅܼƷíkey,ITEM¬OxRÀx¦s®æ¥ª2Àx¦s®æ¶}©l,
 'ÂX®iÁa¦V¦V¤U14¦C(§t¦Û¨),¾î¦V7Äæ(§t¦Û¨)ªºÀx¦s®æ½d³ò
 'PS:item¥i¥H¬OÀx¦s®æ¶°!
 End If
 Next
 Z.Add "«D©P¥ð¤G¤é°²¤é", 1
 '¡ô¥O"«D©P¥ð¤G¤é°²¤é"¦r¦ê·íkey,item¬O¼Æ¦r 1,ˤJZ¦r¨å¸Ì
 Z.Add "©P¥ð¤G¤é", 3
 '¡ô¥O"©P¥ð¤G¤é"¦r¦ê·íkey,item¬O¼Æ¦r 3,ˤJZ¦r¨å¸Ì
 Z.Add "¤W¯Z¤é", 5
 '¡ô¥O"¤W¯Z¤é"¦r¦ê·íkey,item¬O¼Æ¦r 5,ˤJZ¦r¨å¸Ì
 Z.Add "¸É¯Z¤é", 7
 '¡ô¥O"¸É¯Z¤é"¦r¦ê·íkey,item¬O¼Æ¦r 7,ˤJZ¦r¨å¸Ì
 For Each xR In W.KEYS
 '¡ô³]¥~¶¶°j°é!¥OxR¬O W¦r¨å¸Ìkeysªº¤@Áä!¥Ñ«e¨ì«á¶]
 For Each xA In W(xR)
 '¡ô³]¤º¶¶°j°é!¥OxA¬O ¥HxR¦r¦ê¬d¹îW¦r¨å±o¨ìªºitemÀx¦s®æ¶°ªº¤@®æ,
 '¥Ñ¥ª¦Ü¥k/¤W¦Ü¤U¶]
 If IsNumeric(xA) And xA <> "" Then
 '¡ô¦pªG¥ÎIsNumeric()¨ç¼ÆÀˬdxAÀx¦s®æÈ¬O¼Æ¦r,¦Ó¥BxAÀx¦s®æÈ¤£¬OªÅ¦r¤¸ ??
 ymd = y & "/" & Z(xR) & "/" & xA
 '¡ô¥Oymd¤é´ÁÅܼƬO y³s±µ "/"²Å¸¹ ³s±µ¥HxR¦r¦ê¬d¹îZ¦r¨å±o¨ìªºitemÈ,
 '¦A³s±µ "/"²Å¸¹,Ä~Äò±µxAÀx¦s®æÈ ¦r¦ê¤§«á,Åܦ¨¤é´Á
 If xA.Interior.ColorIndex <> -4142 Then
 '¡ô¦pªGxAÀx¦s®æ©³¦â¤£¬O µL©³¦â ??
 If Format(ymd, "w") > 1 And Format(ymd, "w") < 7 Then
 '¡ô¦A¦pªGymd³o¤é´Á¦pªG¬O¬P´Á¤@¨ì¬P´Á¤¤§¶¡ªº¤é¤l ??
 P(ymd) = "«D©P¥ð¤G¤é°²¤é"
 '¡ôÂùIf±ø¥ó³£¦¨¥ß!´N¥H³oymd¤é´Á·íkey,item¬O "«D©P¥ð¤G¤é°²¤é"¦r¦ê,
 'ˤJP¦r¨å
 X(1) = X(1) + 1
 '¡ô¥OX°}¦C²Ä¤GÓÈ +1  PS:(¯Á¤Þ¸¹¬O1)
 W(ymd) = X(1)
 '¡ô¥O¥Hymd¤é´Á·íkey,item¬O X°}¦C²Ä¤GÓÈ  PS:X°}¦C²Ä¤@ÓȬO ""
 Else
 '¡ô¥H¤U §_«h ªºªº³¯z
 P(ymd) = "©P¥ð¤G¤é"
 '¡ô¥O¥H³oymd¤é´Á·íkey,item¬O "©P¥ð¤G¤é"¦r¦ê,ˤJP¦r¨å
 X(2) = X(2) + 1
 '¡ô¥OX°}¦C²Ä¤TÓÈ +1  PS:(¯Á¤Þ¸¹¬O2)
 W(ymd) = X(2)
 '¡ô¥O¥Hymd¤é´Á·íkey,item¬O X°}¦C²Ä¤TÓÈ
 End If
 ElseIf Format(ymd, "w") > 1 And Format(ymd, "w") < 7 Then
 '¡ô¦pªGxAÀx¦s®æ©³¦â¬O µL©³¦â! ¦A½T©wymd³o¤é´Á¦pªG¬O¬P´Á¤@¨ì¬P´Á¤¤§¶¡ªº¤é¤l ??
 P(ymd) = "¤W¯Z¤é"
 '¡ô¥O¥H³oymd¤é´Á·íkey,item¬O "¤W¯Z¤é"¦r¦ê,ˤJP¦r¨å
 X(3) = X(3) + 1
 '¡ô¥OX°}¦C²Ä¥|ÓÈ +1  PS:(¯Á¤Þ¸¹¬O3)
 W(ymd) = X(3)
 '¡ô¥O¥Hymd¤é´Á·íkey,item¬O X°}¦C²Ä¥|ÓÈ
 n = n + 1
 '¡ô¥On²Ö¥[ 1  PS:³o¬OnºâBrr°}¦C«Å§iÁa¦V½d³òªº¼Æ¶q
 Else
 '¡ô¦pªGxAÀx¦s®æ©³¦â¬O µL©³¦â! ¦A½T©wymd³o¤é´Á¦pªG¤£¬O¬P´Á¤@¨ì¬P´Á¤¤§¶¡ªº¤é¤l ??
 P(ymd) = "¸É¯Z¤é"
 '¡ô¥O¥H³oymd¤é´Á·íkey,item¬O "¸É¯Z¤é"¦r¦ê,ˤJP¦r¨å
 X(4) = X(4) + 1
 '¡ô¥OX°}¦C²Ä¤ÓÈ +1  PS:(¯Á¤Þ¸¹¬O4)
 W(ymd) = X(4)
 '¡ô¥O¥Hymd¤é´Á·íkey,item¬O X°}¦C²Ä¤ÓÈ
 End If
 End If
 Next
 Next
 For ymd = y & "/1/1" To y & "/12/31"
 '¡ô³]¤é´Á¶¶°j°é!±q¦~ªì¶]¨ì¦~§À
 If P.Exists(ymd) = Empty Then
 '¡ô¦pªG¥H°j°é¤é´Á¬d¹îP¦r¨å,¬O¨S¦³³oÓÁä PS:Empty¬Oªì©lÈ
 MsgBox "¯Ê¤Ö: " & ymd
 '¡ô¸õ¥X "¯Ê¤Ö: " ³s±µ°j°é¤é´Á¦r¦êªº´£¥Üµ¡
 GoTo 111
 '¡ô«ö¤F½T»{«á´N¸õ¨ì 111ªº¦ì¸mÄ~Äò°õ¦æ  PS:¯Ê¤é´Á´N¤£¶]¤F
 End If
 T = T + 1
 '¡ô¥OT¼Æ¦rÅܼƲ֥[ 1
 Next
 ReDim Brr(1 To n, 1 To 8)
 '¡ô§â쥻¬OÀx¦s®æ¶°ªºBrrÅܨ!«Å§i¦¨¬°¤Gºû°}¦C,
 'Áa¦V±q1¨ìnÅܼƦC,¾î¦V±q1¨ì8Äæ
 For Each xR In P.KEYS
 '¡ô³]¶¶°j°é!¥OxR¬O P¦r¨å¸Ìkeysªº¤@Áä!¥Ñ«e¨ì«á¶]
 ymd = xR
 '¡ô¥Oymd¤é´ÁÅܼƸËxRªºÈ  PS:¦pªG¨S°O¿ùªº¸Ü!P¦r¨åÀ³¸Ó¬O¸Ë ¦~ªì¨ì¦~§Àªº¤é´ÁÁä,¤é§Oitem
 Brr(W(ymd), Z(P(ymd))) = ymd
 '¡ô¥O(ymd¬d¹îW¦r¨å±o¨ìªºitemÈ)¬°¦C¸¹,(ymd¬d¹îZ¦r¨å±o¨ìªºitemÈ)¬°Ä渹ªºBrr°}¦CȬO ymd¤é´Á
 Brr(W(ymd), Z(P(ymd)) + 1) = Format(ymd, "aaaa")
 '¡ô¥O¥kÃä¾F©~Brr°}¦CȬO°ê¦r¬P´Á¼Æ
 Next
 Sh1.[AA1].Resize(1, 8) = [{"«D©P¥ð¤G¤é°²¤é","","©P¥ð¤G¤é","","¤W¯Z¤é","","¸É¯Z¤é",""}]
 '¡ô¥Oªí¤@[AA1]¦V¤UÂX®i1¦C(¦Û¨¦C),¦V¥kÂX®i8ÄæªºÀx¦s®æ,¥H¤@ºû°}¦CÈ˶i¥h
 Sh1.[AA2].Resize(n, 8) = Brr
 '¡ô¥Oªí¤@[AA2]¦V¤UÂX®in¦C(§t¦Û¨¦C),¦V¥kÂX®i8ÄæªºÀx¦s®æ,¥HBrr°}¦CÈ˶i¥h
 Sh1.[AA:AH].Columns.AutoFit
 '¡ô¥Oªí¤@[AA:AH]Äæ¼e¦Û°Ê½Õ¾ã
 Sh1.[AA1].CurrentRegion.Borders.LineStyle = 1
 '¡ô¥Oªí¤@[AA1]Àx¦s®æ¤K¤è¬Û¾F±µÀsªºÀx¦s®æÂX®iªº³Ì¤p¤è¥¿½d³òÀx¦s®æ,ªº®æ½u¬O²Ó¹ê½u
 MsgBox y & "¦~ ¦@¦³ " & T & " ¤Ñ" & vbLf & _
 "«D©P¥ð¤G¤é°²¤é ¦@: " & X(1) & " ¤Ñ" & vbLf & _
 "©P¥ð¤G¤é ¦@: " & X(2) & " ¤Ñ" & vbLf & _
 "¤W¯Z¤é ¦@: " & X(3) & " ¤Ñ" & vbLf & _
 "¸É¯Z¤é ¦@: " & X(4) & " ¤Ñ"
 '¡ô¸õ¥X´£¥Üµ¡!Åã¥Ü¦U¤é§O²Îp¤Ñ¼Æ
 
 111
 Set W = Nothing: Set Z = Nothing: Set P = Nothing: Set Brr = Nothing
 Erase V, X
 End Sub
 | 
 |