ªð¦^¦Cªí ¤W¤@¥DÃD µo©«

[µo°Ý] excel ¦Û°Ê¦X¨ÖÀx¦s®æ

¥»©«³Ì«á¥Ñ Andy2483 ©ó 2022-11-29 14:00 ½s¿è

¦^´_ 1# ¬PªÅÉ@¦ÐÁl


    ÁÂÁ«e½úµoªí¦¹¥DÃD»P½d¨Ò
ÁÂÁ samwang«e½ú´£¨Ñ¸Ñ¨M¤èªk»P¸Ñ»¡,«á¾Ç¾Ç²ß«á¥Î¬Û¦P¤èªk,¤£¦Pªº³¯­z¤è¦¡½m²ß°}¦C»P¦r¨å
¤ß±oµù¸Ñ¦p¤U,½Ð¦U¦ì«e½ú¦A«ü¾É

Option Explicit
Sub TEST()
Application.DisplayAlerts = False
Dim Brr, C&, x, V, xD, Sh, Tym$, mm&
'¡ô«Å§iÅܼÆ
Set Sh = Sheets("P-012-02A-¹w©w¤u§@¶i«×ªí")
'¡ô¥OSh ¬O¤u§@ªí(¥H¤UºÙ:¶i«×ªí),¦WºÙ¬O "P-012-02A-¹w©w¤u§@¶i«×ªí"
Set xD = CreateObject("Scripting.Dictionary")
'¡ô¥OxD ¬O¦r¨å
C = Sh.UsedRange.EntireColumn.Columns.Count
'¡ô¥OC ¬O¦³¨Ï¥ÎÀx¦s®æ½d³òªº³Ì¤jÄæ¦ì¼Æ
Brr = Sh.Range(Sh.Cells(5, 1), Sh.Cells(5, C))
'¡ô¥OBrr ¬O¤Gºû°}¦C!­Ë¤J±q¶i«×ªí[A5]¨ì²Ä¤­¦C³Ì«á¤@ÄæÀx¦s®æ½d³òÀx¦s®æ­È
For x = 1 To UBound(Brr, 2)
'¡ô³]¶¶°j°é±q1¨ìBrr°}¦C¾î¦VÄæ¦ìªº³Ì¤jÄæ¦ì¼Æ
   If IsDate(Brr(1, x)) Then
   '¡ô¦pªG°j°é°}¦C­È¬O¤é´Á??
      Tym = Format(Brr(1, x), "yyyy/mm")
      '¡ô¦pªGIf±ø¥ó¦¨¥ß!¥OTym¦r¦êÅÜ¼Æ ¬O°j°é°}¦C­ÈÂà¤Æ¬° ¥|½X¦~¥[ "/" ²Å¸¹¥[ ¨â½X¤ëªº¦r¦ê
      If xD.Exists(Tym) = Empty Then
      '¡ô¦pªG¥Î Tym¦r¦êÅܼƬd¹î¦r¨å¸Ì¬Oªì©l­È
         Set xD(Tym) = Sh.Cells(4, x)
         '¡ô¥OTym¦r¦êÅܼƬO xD¦r¨å¸Ìªºkey,Item¬O¶i«×ªí²Ä4¦C.°j°éÄ檺Àx¦s®æ
         Else
         Set xD(Tym) = Union(xD(Tym), Sh.Cells(4, x))
         '¡ô¥OTym¦r¦êÅܼƬO xD¦r¨å¸Ìªºkey,
         'Item¬O­ì¥»Item¸ÌªºÀx¦s®æ¦A¥[¤J ¶i«×ªí²Ä4¦C.°j°éÄ檺Àx¦s®æªº Àx¦s®æ¶°

      End If
   End If
Next
V = Split(",¤@,¤G,¤T,¥|,¤­,¤»,¤C,¤K,¤E,¤Q,¤Q¤@,¤Q¤G", ",")
'¡ô¥OV¬O¦r¦ê¥Î ","²Å¸¹¤À³Îªº¤@ºû°}¦C
For Each x In xD.Keys
'¡ô³]¶¶°j°é!¥Ox¬O xD¦r¨åKeysªº¤@­û
   xD(x).UnMerge
   '¡ôxD¦r¨å¸Ì°j°éKey¹ïÀ³ªº Àx¦s®æ¶°¨ú®ø¦X¨ÖÀx¦s®æ
   xD(x).Merge
   '¡ôxD¦r¨å¸Ì°j°éKey¹ïÀ³ªº Àx¦s®æ¶°°õ¦æ¦X¨ÖÀx¦s®æ
   xD(x).HorizontalAlignment = xlCenter
   '¡ôxD¦r¨å¸Ì°j°éKey¹ïÀ³ªº Àx¦s®æ¶°¤å¦r¥ª¥k¸m¤¤
   mm = Split(x, "/")(1)
   '¡ô¥Omm&¼Æ¦rÅܼƬOx¥Î "/"²Å¸¹©î¸Ñªº¤@ºû°}¦C!¨ú²Ä 1­Ó¦r¦êÂন¼Æ¦r(¤ë¥÷)
   '¦]¬°¦¹¤@ºû°}¦C¤¸¯À¬O¦r¦ê,¦]«Å§i¬Omm¼Æ¦r!©Ò¥H¦r¦ê·|Åܦ¨¼Æ¦r
   'ps:¦¹¤@ºû°}¦Cªº²Ä0­Ó¦r¦ê¬O(¥|½X¦~¤À)
   xD(x)(1) = V(mm) & "¤ë"
   '¡ôxD¦r¨å¸Ì°j°éKey¹ïÀ³ªº Àx¦s®æ¶°²Ä¤@®æ¶ñ¤J¤å¦r:
   '¤å¦r¬O¥Îmm¼Æ¦r§ì¨ú V¤@ºû°}¦C¸Ì¹ïÀ³ªº°ê¦r¼Æ¦r¦ê,«á­±¦A¥[ "¤ë"¦r

Next
Set Brr = Nothing
Set xD = Nothing
End Sub

TOP

¦^´_ 13# samwang


    ÁÂÁ«e½ú¦^´_
5:00«á®a¸Ì¦£!©ú¤Ñ¦AÄ~Äò°Q½×!
ÁÂÁÂ

TOP

¦^´_ 13# samwang


    «e½ú¦­¦w
1.V = Split(",¤@,¤G,¤T,¥|,¤­,¤»,¤C,¤K,¤E,¤Q,¤Q¤@,¤Q¤G", ",")¬O§Û¨Óªº!¾Ç ­ã´£³¡ªL«e½úªº½d¨Òµy°µÅܳq
http://forum.twbts.com/viewthrea ... eD2&ordertype=1
For j = 1 To 9 'i = 2 ³]°j°é±N¸ê®Æ±a¤JCrr°}¦C²Ä¤@¦C
        Crr(xD(T1), j) = Arr(i, Array(9, 10, 11, 12, 22, 23, 24, 8, 5)(j - 1))
        '¡ô·íi = 2:¤@¶}©l Crr(xD(T1), j) = Crr(1, j) ¦]¬° xD(T1)=1
        '  ,Array()«ü©w©ñ¤JªºÄæ¦ì,(j - 1)¬O¦]¬°Arrayªº²Ä¤@µ§¯Á¤Þ¬O0
        '¡ô·íi >= 3:±M¯S®×¸¹³£¬OA2009001,©Ò¥H¦b«e¤èxD(T1)³£¦³¥[1  xD(T1) = xD(T1) + 1
        '¡ôª½¨ìi = 50:±M¯S®×¸¹Åܦ¨A2104001,xD(T1)Åܦ¨1
        '¡ô¨ìi = 59:±M¯S®×¸¹¤SÅܦ¨A2009001,©Ò¥HxD("A2009001") ITEM¦b«e¤è¤wÄ~Äò¥[1
Next j

2.xD(x)(1)¡A¬°¤°»ò(1)? ³o¬O¤°»ò·N«ä?  «á¾Ç¤]¤£ª¾¹D!¶Ã²qªº!é¨ìªº
¦]¬°¾Ç²ß°}¦C»P¦r¨åªº¼ö±¡¨ÏµM,¯à¥Î°}¦C©M¦r¨åªº¾÷·|³£¤£·Q©ñ¹L,
°}¦C©M¦r¨å¹J¨ì°ÝÃDªº¤è¦¡´N¬O:
1.§â¾Ç²ß¹Lµù¸Ñ¹Lªº©«¤l®³¨Ó¹B¥Î
2.¼Æ¦r¤Æªº¶Ã¸Õ!¸Õ¦¨¥\¤F´N§ó¦³°Ê¤O
3.­Y¤£¦¨¥\!¬dºô¸ô¬ÛÃöª¾ÃÑ,Ä~Äò¶Ã¸Õ
4.¦A¤£¦¨¥\!´N¦b½×¾Â¶}·s¥DÃDµo°Ý
5.¥­±`´N§â«e½ú­Ìªº¤ß¦å³Ð§@©«¤@¦r¤@¦æ¤@°}¦C¤@¦r¨å¤@°j°é¤@©«ªºµù¸Ñ
5.1.½T©w¦Û¤vªº«ä¦Ò.ÅÞ¿è¬O§_¥¿½T!©ñ¤W½×¾Â½Ð«e½ú­Ì¦A«ü¾É,¥H«á½Æ²ß¤]¤è«K
5.2.¥H«e¨«°¨¬Ýªá!»{¬°À´ªº³£¬OéÀ´!»{¬°¤£À´ªº´N±a¹L¬O«á¾Ç¤£¿n·¥ªº¾Çªk
5.3.²{¦b±`¤£¬ÝÃD·N!¤£·Qª¾¹Dºô¤Í°Ý¤°»ò!ª½±µ¶}©lµù¸Ñ ­ã´£³¡ªL«e½úµ{¦¡½X!³Ì«á¤~ª¾¹DÃD·N
5.4.¤å¦r±Ô­zªºÅÞ¿è.¤f±ø¤]·QÄ~Äò¾Ç²ß
6.¤T¤H¦æ¥²¦³§Ú®v!³Ì­«­nªº¬O¦³¦ñ!ÁÂÁ«e½ú
7.ÁÂÁ½׾Â!ÁÂÁ«e½ú­Ìªº«ü¾É!ÁÂÁÂ

TOP

¦^´_ 13# samwang


    ¸g´ú¸Õµ²ªG:
'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)
©Ò¥HÀ³¸Ó¬OÀx¦s®æ¶°¸Ìªº¦ì¸m!
¥i¬O³o¼Ë»¡¤]ÁÙ¤£·Ç,³o©«ªº±¡¹Ò¬O­n¦X¨ÖÀx¦s®æ,©Ò¥HÀx¦s®æ¶°¤@©w¬O³sÄòªº¬Û³sÀx¦s®æ,
¤£ª¾¹D¸õ®æªºÀx¦s®æ¶°¥i¤£¥i¥H³o¼Ë¥Î?? «Ý«á¾Ç«áÄò¬ã¨s¨ìµ²ªG¦A¨Ó¦¹¥DÃD¦^´_

TOP

¦^´_ 13# samwang


    ÁÂÁ«e½ú¤@°_¬ã°Q xD(x)(1)
¸g«á¾Ç¬ã¨sµ²ªG¸ò16¼Ó®t²§«Ü¤j! ½Ð«e½ú½Æ»s¤U¦Cµ{¦¡½X´ú¸Õ´N·|ª¾¹D¤F!
«á¾Ç¤£ª¾¹D¸Ó«ç»ò±Ô­z¥LªºÅÞ¿è

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

¥»©«³Ì«á¥Ñ Andy2483 ©ó 2022-12-1 14:37 ½s¿è

¦^´_ 20# ¬PªÅÉ@¦ÐÁl


    ¥i¥H°Ñ¦Ò : ½Ð°Ývbaªº¤º¥~®Ø½u ¥DÃD
http://forum.twbts.com/thread-9862-1-1.html
¤@°_¾Ç²ß!

TOP

¥»©«³Ì«á¥Ñ Andy2483 ©ó 2022-12-19 08:52 ½s¿è

¦^´_ 24# ­ã´£³¡ªL


    ÁÂÁ«e½ú«ü¾É
³o©«¾Ç¨ì«Ü¦hª¾ÃÑ,«á¾Ç¨S¦³¤Ñ¤~ªº¤Ñ¤À,¥u¯à¾a¶Ô¾Ç²ß¶Ô½m²ß
¾Ç²ßµ²ªG»P¤ß±oµù¸Ñ¦p¤U,½Ð¦P¾Ç¥iÂǦ¹©«¦A´£¥X¤£¦P¬Ýªk©ÎºÃ°Ý,
½Ð«e½ú­Ì¦A«ü¾É
¹Lµ{:


µ²ªG:


¤u§@ªí¼Ò²Õ:
Private Sub Worksheet_Change(ByVal Target As Range)
With Target
'¡ô¥H¤U¬OÃö©óIJµo(Àx¦s®æ­È½s¿è)«áªºµ{§Ç
     If .Address <> "$E$5" Then Exit Sub
     '¡ô¦pªGIJµo®æªº¦ì§}¤£¬O "$E$5",´Nµ²§ôµ{¦¡°õ¦æ
     If IsDate(.Value) Then Call ¦X¨Ö¤ë¥÷
     'https://learn.microsoft.com/zh-tw/office/vba/language/reference/user-interface-help/isdate-function
     'IsDate()¦pªG¹Bºâ¦¡¬O¤é´Á©Î¬O¥i¿ëÃѬ°¦³®Äªº¤é´Á©Î®É¶¡¡A·|¶Ç¦^ True¡A§_«h·|¶Ç¦^ True ¡C§_«h¡A¥¦·|¶Ç¦^ False¡C
     'ifªº±ø¥ó¦¨¥ß!´N°õ¦æ ¦X¨Ö¤ë¥÷ °Æµ{¦¡
     'IJµo[E5]¥i¥H±a°_³sÂê¤ÏÀ³,¤½¦¡§ó·s,¤ë¥÷¤]§ó·s¤F

End With
End Sub

Module1:
Sub ¦X¨Ö¤ë¥÷()
Dim xR As Range, xA As Range, m$, m1$, m2$
'¡ô«Å§iÅܼÆ(xR,xA)¬OÀx¦s®æÅܼÆ,(m,m1,m2)¬O¦r¦êÅܼÆ
Application.ScreenUpdating = False
'¡ô¿Ã¹õµe­±¼È¤£¸òµÛµ{§ÇÅܤưõ¦æµ²ªG
With Range("e4", Cells(5, Columns.Count).End(xlToLeft)(0))
'¡ô¥H¤U¬OÃö©óÀx¦s®æ[E4]¨ì²Ä5¦C³Ì¥kÃ䦳¤º®eÄæ¦ìÀx¦s®æªºµ{§Ç
     .UnMerge:  .ClearContents
     '¡ô¨ú®ø¦X¨ÖÀx¦s®æ :²M°£Àx¦s®æ¤º®e
     For Each xR In .Cells
     '¡ô³]¶¶°j°é!¥OxR ¬O³o¨ÇÀx¦s®æ¤§¤@,±q«e­±½ü¨ì«á­±(¥ª¦Ü¥k)
         m1 = Format(xR(2), "m")
         '¡ô¥Om1¬O°j°éxR ¤U¤è1®æÀx¦s®æÅܤƬ°¦r¦ê(³W«h¬O:¨ú¤é´Áªº¤£¸É0¤ë¥÷)
         '¦Pm1 = 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")
         '¡ô¥Om2¬O°j°éxR ¤U¤è1¦C¥ª¤è1ÄæÀx¦s®æÅܤƬ°¦r¦ê(³W«h¬O:¨ú¤é´Áªº¤£¸É0¤ë¥÷)
         '¦Pm2 = Format(xR.ITEM(2, 2), "m")

         If m1 <> m Then
         '¡ô¦pªGm1<>m ,m¦r¦êÅܼƪºªì©l­È¬O"",³o¼Ëªº§PÂ_¦¡¦b²Ä¤@®æ®É±ø¥ó´N·|¦¨¥ß!
         '³o¬O«á¾Ç­n¾Ç²ßªº¤èªk!¬JµM³£ª¾¹D­n«Å§im¦r¦ê,¬°¤°»ò¤S¤£·|Åým¸òm1¤ñ´N·|±o¨ìµ²ªG!!
         '»Ý­n¸õ²æ¦r¦êÅܼƤ@©w­nµ¹¤@­Ó¦r¦ê¤~®³¨Ó°µÅÞ¿è§PÂ_ªº·Qªk!
         '¶Ô¾Ç²ß¶Ô½m²ß¬Ý¬Ý¥i§_¸õ²æ,ÁÂÁ«e½ú«ü¾É

            m = m1:  Set xA = xR
            '¡ôif±ø¥ó¦¨¥ß!´N¥Om=m1 ,¥OxAÀx¦s®æÅܼƬO xR
            xR = Application.Text(xR(2), "[DBNum1]m¤ë")
            '¡ô¥OxRÀx¦s®æÅܼƭȬO °j°éxR¤U¤è1®æÀx¦s®æÅܤƬ°¤p¼g¤ë¥÷¦r¦ê
            'Text()·|¶Ç¦^«ü©w¤§ª«¥óªº®æ¦¡¤Æ¤å¦r¡C °ßŪªº String
            '[DBNum1]:¤¤¤å¤p¼g
            '[DBNum2]:¤¤¤å¤j¼g

         End If
         If m2 <> m Then Range(xR, xA).Merge
         '¡ô¦pªGm2 <> m,´NÅýÀx¦s®æ(xR§À®æ, xAÀY®æ)¤§¶¡ªºÀx¦s®æ¦X¨Ö
     Next
    .Borders.LineStyle = 1
     '¥O¾ã­ÓÀx¦s®æ¶°½d³ò®æ½u¬O²Ó¹ê½u
End With
End Sub
'¡ô¿Ã¹õµe­±¦b°õ¦æµ²§ô«á¦Û°ÊÅã¥Ü³Ì«áµ²ªG
¥Î¦æ°Ê¸Ë¸mÂsÄý½×¾Â¾Ç²ß«Ü¤è«K,ÁÂÁ½׾¸gÀç¹Î¶¤
½Ð¤j®a¤@°_¤W½×¾Â¨Ó¥æ¬y

TOP

        ÀR«ä¦Û¦b : ¤@¥y·Å·xªº¸Ü¡A´N¹³©¹§O¤H¨­¤WÅx­»¤ô¡A¦Û¤v·|ªg¨ì¨â¤Tºw¡C
ªð¦^¦Cªí ¤W¤@¥DÃD