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

¶×¥X_¦ý¤£­«ÂжץXªº¸ê®Æ

¶×¥X_¦ý¤£­«ÂжץXªº¸ê®Æ

Dear ¤j¤j

     ¤p§Ì¤S¨Óµo°Ý°ÝÃD¤F~ ¦ý¥ý¯¬¦U¦ì¤j¤j·s¦~§Ö¼Ö~ ¥H«á¦h·ÓÅU ^^
       ¤p§Ìªº°ÝÃD¦b©ó±N¿é¤J¦nªº¸ê®Æ¶×¥X«á,¦ý­n¥ý¤ñ¹ïData¤¤¬O§_¦³­«ÂÐ,¥HÁקK­«ÂЭpºâ

     1.¨Ï¥ÎªÌ·|¦bsheet[¿é¤J]¤¤,±N¸ê®Æ¿é¤J,¦AÂI¿ï{¶×¥X}
     2. ¶×¥X®É¬°ÁקK­«ÂЭpºâ,¨ä±ø¥ó[¤é´Á]and[CPO]and[²Õ§O]¤TªÌ¤£¥i¥H­«ÂÐ

     ¦pªþ¥ó¬°°ÝÃD¿@ÁYªº½d¨Ò   ¶×¥X_¦ý¤£­«ÂÐ.rar (7.09 KB)

¥»©«³Ì«á¥Ñ Andy2483 ©ó 2023-3-17 09:26 ½s¿è

¦^´_ 21# Andy2483


    ÁÂÁ½׾Â,ÁÂÁ¦U¦ì«e½ú
¤µ¤Ñ½Æ²ß¦¹©«µo²{«Ü¦h¯Êº|,­×¥¿«á¤ß±oµù¸Ñ¦p¤U,½Ð¦U«e½ú«ü±Ð

Option Explicit
Sub TEST_1()
If [¿é¤J!B65536].End(3).Row <= 5 Then Exit Sub
'¡ô¦pªG¿é¤JªíBÄæ³Ì«á¤@­Ó¦³¤º®eÀx¦s®æ¦C¸¹<=5!´Nµ²§ôµ{¦¡°õ¦æ
Dim A, B, V, Y, Z, C%, R&, i&, N&, T$, xR As Range
'¡ô«Å§iÅܼÆ:(A,B,V,Y,Z)¬O³q¥Î«¬ÅܼÆ,C¬Oµu¾ã¼ÆÅܼÆ,
'(R,i,N)¬Oªø¾ã¼ÆÅܼÆ,T¬O¦r¦êÅܼÆ,xR¬OÀx¦s®æÅܼÆ

Set Y = CreateObject("Scripting.Dictionary")
'¡ô¥OY³o³q¥Î«¬ÅܼƬO ¦r¨å
[Data!F:F].ClearContents
'¡ô¥ODataªíFÄæ²M°£¤º®e
Set xR = Range([Data!F4], [Data!B65536].End(3))
'¡ô¥OxR³oÀx¦s®æÅܼƬO Dataªí[F4]¨ìBÄæ³Ì«á¤@­Ó¦³¤º®eÀx¦s®æ
A = xR: B = Range([¿é¤J!H5], [¿é¤J!B65536].End(3))
'¡ô¥OA³o³q¥Î«¬ÅܼƬO ¤Gºû°}¦C,¥HxRÅܼƭÈ(Àx¦s®æ­È)±a¤J,
'¥OB³o³q¥Î«¬ÅܼƬO ¤Gºû°}¦C,¥H¿é¤Jªí[H5]¨ìBÄæ³Ì«á¦³¤º®eÀx¦s®æ,
'³o½d³òÀx¦s®æ­È±a¤JB°}¦C¤¤

ReDim V(UBound(B), 4): Z = Array(1, 2, 6, 7)
'¡ô«Å§iV³o³q¥Î«¬ÅܼƬO ¤Gºû°}¦C,Áa¦V½d³ò±q0¨ì B°}¦CÁa¦V³Ì¤j¦C¸¹,
'¾î¦V½d³ò±q0¨ì 4

'¥OZ³o³q¥Î«¬ÅܼƬO ¤@ºû°}¦C,¥H¼Æ¦r(1,2,6,7)¬°¨ä°}¦C­È
For i = 2 To UBound(A)
'¡ô³]¶¶°j°é!i±q2¨ì A°}¦CÁa¦V³Ì¤j¯Á¤Þ¦C¸¹
   T = Join(Array(A(i, 1), A(i, 2), A(i, 3)), "|")
   '¡ô¥OT³o¦r¦êÅܼƬO ¥H"|"³sµ²A°}¦C­Èªº·s¦r¦ê,
   'A°}¦C­È:i°j°é¦C(1,2,3)ÄæA°}¦C­È

   Y(T) = i: Y(T & "/c4") = A(i, 4)
   '¡ô¥O¥HTÅܼƬ°key,item¬O i°j°é¼Æ,¯Ç¤JY¦r¨å¸Ì
   '¥O¥HTÅܼƳsµ²"/c4"«áªº·s¦r¦ê¬°key,item¬O i°j°é¦C²Ä4ÄæA°}¦C­È,
   '¯Ç¤JY¦r¨å¸Ì

Next
For i = 1 To UBound(B)
'¡ô³]¶¶°j°é!i±q2¨ì B°}¦CÁa¦V³Ì¤j¯Á¤Þ¦C¸¹
   T = Join(Array(B(i, 1), B(i, 2), B(i, 6)), "|")
   '¡ô¥OT³o¦r¦êÅܼƬO ¥H"|"³sµ²B°}¦C­Èªº·s¦r¦ê,
   'B°}¦C­È:i°j°é¦C(1,2,6)ÄæB°}¦C­È

   If Y.Exists(T) Then
   '¡ô¦pªGY¦r¨å¸Ì¦³ TÅܼƳokey?
      N = Y(T)
      '¡ô¥ON³oªø¾ã¼ÆÅܼƬO ¥HTÅܼƬdY¦r¨å¦^¶Çªºitem­È
      If B(i, 7) <> Y(T & "/c4") And N <= UBound(A) Then
      '¡ô¦pªGi°j°é¦C²Ä7Äæ°}¦C­È¤£µ¥©ó ¥HTÅܼƳsµ²"/c4"ªºY item­È
      '¦Ó¥BNÅܼÆ<= A°}¦CÁa¦V³Ì¤j¯Á¤Þ¦C¸¹(¥Øªº:¹jÂ÷·s¼W)

         A(N, 5) = Date & "_" & A(N, 4) & "_­×§ï¬°_" & B(i, 7)
         '¡ô¥ONÅܼƦC²Ä5ÄæA°}¦C­È¬O ¤µ¤Ñ¤é´Á³s±µ"_",
         '¦A³s±µNÅܼƦC²Ä4ÄæA°}¦C­È,Äò³s±µ"_­×§ï¬°_",
         '³Ì«á³s±µi°j°é¦C²Ä7ÄæB°}¦C­È

         A(N, 4) = B(i, 7)
         '¡ô¥ONÅܼƦC²Ä4ÄæA°}¦C­È¬O i°j°é¦C²Ä7ÄæB°}¦C­È
      End If
      Else
         For C = 0 To 3: V(R, C) = B(i, Z(C)): Next
         '¡ô³]¶¶°j°éC±q0¨ì 3
         '¥OR³oªø¾ã¼ÆÅܼƦC²ÄCÅܼÆÄæV°}¦C­È¬O
         'i°j°é¦C²Ä(CÅܼƯÁ¤Þ¸¹Z°}¦C­È)Ä檺B°}¦C­È
         'RÅܼƪºªì©l­È¬O0,VÁa¦V¯Á¤Þ¸¹°_©l­È¤]¬O0,­n·f°t¤~¹ï±o·Ç

         V(R, 4) = "·s¼W"
         '¡ô¥ORÅܼƦC²Ä4ÄæV°}¦C­È¬O "·s¼W"¦r¦ê
         R = R + 1: Y(T) = i: Y(T & "/c4") = B(i, 7)
         '¡ô¥ORÅܼƲ֥[1:¥O¥HTÅܼƷíkey,item¬O i°j°é¼Æ,¯Ç¤JY¦r¨å¸Ì,
         '¥O¥HTÅܼƳsµ²"/c4"«áªº·s¦r¦ê¬°key,item¬O i°j°é¦C²Ä7ÄæB°}¦C­È,
         '¯Ç¤JY¦r¨å¸Ì

   End If
Next
xR = A
'¡ô¥OxRÅܼÆ(Àx¦s®æ)­È ¥HA°}¦C­È±a¤J
If R > 0 Then xR.Item(xR.Count + 1).Resize(R, 5) = V
'¡ô¦pªGRÅܼÆ>0 !
'´N¥OxRÅܼÆ(Àx¦s®æ)ªº¤U¤@­ÓÀx¦s®æ ÂX®i¦V¤URÅܼƦC,¦V¥kÂX®i5Äæ,
'³o½d³òÀx¦s®æ­È¥HV°}¦C­È±a¤J

Application.Goto [Data!A1]
'¡ô¥OÀx¦s®æ´å¼Ð¸õ¨ì [Data!A1]¦ì¸m
Set Y = Nothing: Erase A, B, V, Z
'¡ô¥OÄÀ©ñÅܼÆ
End Sub
¥Î¦æ°Ê¸Ë¸mÂsÄý½×¾Â¾Ç²ß«Ü¤è«K,ÁÂÁ½׾¸gÀç¹Î¶¤
½Ð¤j®a¤@°_¤W½×¾Â¨Ó¥æ¬y

TOP

ÁÂÁ½׾Â,ÁÂÁ¦U¦ì«e½ú
«á¾Ç¤µ¤ÑÂǦ¹©«½m²ß°}¦C»P¦r¨å,½Ð¦U¦ì«e½ú«ü±Ð
¶×¥X_¦ý¤£­«ÂÐ_20230316_4.zip (15.37 KB)

¸ê®Æªí:


­ìµ²ªGªí:


°õ¦æµ²ªG:


Option Explicit
Sub TEST_1()
Dim A, B, V, Y, Z, C%, R&, i&, N&, T$, xR
Set Y = CreateObject("Scripting.Dictionary")
[Data!F:F].ClearContents
Set xR = Range([Data!F5], [Data!B65536].End(3))
A = xR: B = Range([¿é¤J!H5], [¿é¤J!B65536].End(3))
ReDim V(UBound(B), 4): Z = Array(1, 2, 6, 7)
For i = 1 To UBound(A)
   T = Join(Array(A(i, 1), A(i, 2), A(i, 3)), "|")
   Y(T) = i: Y(T & "/c4") = A(i, 4)
Next
For i = 1 To UBound(B)
   T = Join(Array(B(i, 1), B(i, 2), B(i, 6)), "|")
   If Y.Exists(T) Then
      N = Y(T)
      If B(i, 7) <> Y(T & "/c4") And N <= UBound(A) Then
         A(N, 5) = Date & "_" & A(N, 4) & "_­×§ï¬°_" & B(i, 7)
         A(N, 4) = B(i, 7)
      End If
      Else
         For C = 0 To 3: V(R, C) = B(i, Z(C)): Next
         V(R, 4) = "·s¼W"
         R = R + 1: Y(T) = i: Y(T & "/c4") = B(i, 7)
   End If
Next
xR.Value = A
If R > 0 Then xR.Item(xR.Count + 1).Resize(R, 5) = V
Application.Goto [Data!A1]
Set Y = Nothing: Erase A, B, V
End Sub
¥Î¦æ°Ê¸Ë¸mÂsÄý½×¾Â¾Ç²ß«Ü¤è«K,ÁÂÁ½׾¸gÀç¹Î¶¤
½Ð¤j®a¤@°_¤W½×¾Â¨Ó¥æ¬y

TOP

¥»©«³Ì«á¥Ñ Andy2483 ©ó 2023-3-15 20:20 ½s¿è

¦^´_ 11# hugh0620
¦^´_ 16# Hsieh


    ÁÂÁ½׾Â,ÁÂÁ«e½ú
«á¾ÇÂǦ¹©«¾Ç²ß¨ì«Ü¦hª¾ÃÑ,¥H¤U¤ß±oµù¸Ñ,½Ð«e½ú¦A«ü¾É

Option Explicit
Sub TEST()
Dim Ay(), d, d1, ar, i, a, s, mystr1
'¡ô«Å§iÅܼÆ:Ay¬O°}¦C,¨ä¾l¬°³q¥Î«¬ÅܼÆ
Set d = CreateObject("Scripting.Dictionary")
'¡ô¥Od¬O ¦r¨å
Set d1 = CreateObject("Scripting.Dictionary")
'¡ô¥Od1¤]¬O ¦r¨å
With Sheet2
'¡ô¥H¤U¬OÃö©óSheet2¤u§@ªíªºµ{§Ç (Dataªí)
   .Unprotect "1234"
   '¡ô¥O¥H"1234"±K½X¨ú®ø«OÅ@¤u§@ªí
   ar = .Range(.[B5], .[B65536].End(xlUp).Offset(, 2))
   '¡ô¥OarÅܼƬO¤Gºû°}¦C,¥H[B5]¨ì(BÄæ³Ì«á¤@­Ó¦³¤º®eÀx¦s®æ,
   '¦A¦V¥k°¾²¾2Ä檺Àx¦s®æ),¦¹½d³òÀx¦s®æ­È±a¤Jar°}¦C¤¤

   For i = 1 To UBound(ar, 1)
   '¡ô³]¶¶°j°é!i±q1¨ì arÁa¦V³Ì¤j¯Á¤Þ¦C¸¹
      mystr1 = Join(Array(ar(i, 1), ar(i, 2), ar(i, 3)))
      '¡ô¥Omystr1ÅܼƬO¥H ªÅ¥Õ¦r¤¸³sµ²°}¦C¤l­Èªº·s¦r¦ê
      '°}¦C¤l­È:i°j°é¼Æªº(1,2,3)Äæar°}¦C­È

      d(mystr1) = d.Count
      '¡ô¥O¥Hmystr1ÅܼƷíkey,item¬O d¦r¨åkey¼Æ¶q(PS:°_©l­È¬O0),¯Ç¤Jd¦r¨å
   Next
   With Sheet1
   '¡ô¥H¤U¬OÃö©óSheet1¤u§@ªíªºµ{§Ç (¿é¤Jªí)
      ar = .Range(.[B5], .[B65536].End(xlUp).Offset(, 6))
      '¡ô¥OarÅܼƸ˷s¸ê®Æ:
      '¥Oar¬O¤Gºû°}¦C,¥H[B5]¨ì(BÄæ³Ì«á¤@­Ó¦³¤º®eÀx¦s®æ,
      '¦A¦V¥k°¾²¾6Ä檺Àx¦s®æ),¦¹½d³òÀx¦s®æ­È±a¤Jar°}¦C¤¤

      For i = 1 To UBound(ar, 1)
      '¡ô³]¶¶°j°é!i±q1¨ì arÁa¦V³Ì¤j¯Á¤Þ¦C¸¹
         mystr1 = Join(Array(ar(i, 1), ar(i, 2), ar(i, 6)))
         '¡ô¥Omystr1ÅܼƬO¥H ªÅ¥Õ¦r¤¸³sµ²°}¦C¤l­Èªº·s¦r¦ê
         '°}¦C¤l­È:i°j°é¼Æªº(1,2,6)Äæar°}¦C­È

         If d.exists(mystr1) = False Then
         '¡ô¦pªG¬dd¦r¨å¸Ì¨S¦³ mystr1ÅÜ¼Æ key
            ReDim Preserve Ay(s)
            '¡ô¥OAy°}¦CÂX¥R¦C¼Æ¨ì¯Á¤Þ¸¹s(PS:s°_©l­È¬O0)
            Ay(s) = Array(ar(i, 1), ar(i, 2), ar(i, 6), ar(i, 7))
            '¡ô¥OsÅܯÁ¤Þ¸¹Ay°}¦C­È¬O¤@ºû°}¦C,¥Hi°j°é¦Car°}¦C¤l­È(1,2,6,7)±a¤J
            s = s + 1
            '¡ô¥OsÅܼƲ֥[ 1
            Else
               d1(mystr1) = ar(i, 7)
               '¡ô§_«h¥O¥Hmystr1ÅܼƬ°key,item¬Oi°j°é¦C²Ä7Äæar°}¦C­È,¯Ç¤Jd1¦r¨å¤¤
         End If
      Next
   End With
   For Each a In .Range(.[B5], .[B65536].End(xlUp))
   '¡ô³]³v¶µ°j°é!¥Oa¬O (Dataªí[B5]¨ì BÄæ³Ì«á¤@­Ó¦³¤º®eÀx¦s®æ)³o½d³òÀx¦s®æ¤§¤@
      mystr1 = Join(Array(a, a.Offset(, 1), a.Offset(, 2)))
      '¡ô¥Omystr1ÅܼƬO¥H ªÅ¥Õ¦r¤¸³sµ²°}¦C¤l­Èªº·s¦r¦ê
      '°}¦C¤l­È:aÅܼƭÈ,aÅܼƩ¹¥k°¾²¾1®æªºÀx¦s®æ­È,aÅܼƩ¹¥k°¾²¾2®æªºÀx¦s®æ­È

      a.Offset(, 3) = d1(mystr1)
      '¡ô¥OaÅܼƩ¹¥k°¾²¾3®æªºÀx¦s®æ­È¬O ¥Hmystr1ÅܼƬdd1¦r¨åªºitem­È
   Next
   If s > 0 Then
   '¡ô¦pªGsÅܼƤj©ó 0?
      .[B65536].End(xlUp).Offset(1, 0).Resize(s, 4) = _
      Application.Transpose(Application.Transpose(Ay))
      '¡ô¥ODataªíBÄæ²Ä1ªÅ¥Õ®æÂX®i¦V¤Us1ÅܼƦC,¦V¥kÂX®i4Äæ,
      '³oÂX®i½d³òÀx¦s®æ­È¥HAy°}¦CÂà¸m¨â¦¸ªº­È±a¤J

   End If
   .Protect "1234"
   '¡ô¥O¥H"1234"±K½X«OÅ@Dataªí
End With
End Sub
¥Î¦æ°Ê¸Ë¸mÂsÄý½×¾Â¾Ç²ß«Ü¤è«K,ÁÂÁ½׾¸gÀç¹Î¶¤
½Ð¤j®a¤@°_¤W½×¾Â¨Ó¥æ¬y

TOP

¦^´_ 18# Hsieh

    ¤j¤j©úŲ
    Âмgªº³¡¥÷°w¹ïªº¬O[¦P¤@¤Ñ]¥B[¦P¤@­ÓCPO]¥B[¦P¤@²Õ]ªº±ø¥ó¤U¶i¦æÂмgDATA¦P¼Ëªº¸ê®Æ
   ­Y¬O[¤£¦P¤Ñ]©Î[¤£¦PCPO]©Î[¤£¦P²Õ]´N»Ý­n·s¼W¸ê®Æ¨ìDATA
¾Ç²ß¤~¯à´£¤É¦Û¤v

TOP

¦^´_ 17# hugh0620


    §A¤£¬O§Æ±æÂмg¶Ü?
·íµM¤ñ¹ï¨ì­«½Æªº´N³Q·sªº¨ú¥Nªü
¾Ç®üµL²P_¤£®¢¤U°Ý

TOP

¦^´_ 16# Hsieh


    ¤j¤j~ ¦]¬°¿é¤é¤¶­±·|¨C¤é¤@ª½¿é¤J~ ­Y¬O³o¼Ë
   ´ú¸Õ«áªºµ²ªG·|¦³¤@­Ó°ÝÃD~ ´N¬O¦pªG²Ä1¦¸(¨Ì¤é´Á:²Ä1¤Ñ)¿é¤J~ «ö¶×¥X«á~ DATA·|±a¥X¼Æ¶q~
    ¦ý¬O~ ²Ä2¦¸(¨Ì¤é´Á:²Ä2¤Ñ)¿é¤J~ «ö¶×¥X«á~ DATA·|±a¥X²Ä2¦¸¿é¤Jªº¼Æ¶q~ ¦ý¬O²Ä¤@¦¸¿é¤Jªº¼Æ¶q·|¤£¨£~>.<
¾Ç²ß¤~¯à´£¤É¦Û¤v

TOP

¦^´_ 15# hugh0620
  1. Private Sub CommandButton1_Click()
  2. Dim Ay()
  3. Set d = CreateObject("Scripting.Dictionary")
  4. Set d1 = CreateObject("Scripting.Dictionary")
  5. With Sheet2
  6. .Unprotect "1234"
  7.     ar = .Range(.[B5], .[B65536].End(xlUp).Offset(, 2))
  8.         For i = 1 To UBound(ar, 1)
  9.             mystr1 = Join(Array(ar(i, 1), ar(i, 2), ar(i, 3)))
  10.             d(mystr1) = d.Count
  11.         Next
  12.     With Sheet1
  13.         ar = .Range(.[B5], .[B65536].End(xlUp).Offset(, 6))
  14.         For i = 1 To UBound(ar, 1)
  15.             mystr1 = Join(Array(ar(i, 1), ar(i, 2), ar(i, 6)))
  16.             If d.exists(mystr1) = False Then
  17.                 ReDim Preserve Ay(s)
  18.                 Ay(s) = Array(ar(i, 1), ar(i, 2), ar(i, 6), ar(i, 7))
  19.                 s = s + 1
  20.                 Else
  21.                 d1(mystr1) = ar(i, 7)
  22.             End If
  23.         Next
  24.     End With
  25.     For Each a In .Range(.[B5], .[B65536].End(xlUp))
  26.       mystr1 = Join(Array(a, a.Offset(, 1), a.Offset(, 2)))
  27.       a.Offset(, 3) = d1(mystr1)
  28.     Next
  29.     If s > 0 Then .[B65536].End(xlUp).Offset(1, 0).Resize(s, 4) = Application.Transpose(Application.Transpose(Ay))
  30.     .Protect "1234"
  31. End With
  32. End Sub
½Æ»s¥N½X
¾Ç®üµL²P_¤£®¢¤U°Ý

TOP

¦^´_ 13# Hsieh


     Dear ¤j¤j

         ­Y¬O­«ÂЪº¸ê®Æ,¦³¸ê®Æ¬OKEY IN¿ù»~,¦ý¬O¤w¸g«ö¤F¶×¥X¸ê®Æ,
             »Ý­n±N¨Ì¶×¥Xªº±ø¥óUPDATE¿ù°Èªº¦a¤è,½Ð¤j¤j«ü±Ð¤@¤U


          ªþ¥ó¬°°ÝÃD¤§½d¥» ¶×¥X_¦ý¤£­«ÂÐ_©µ¦ùÃD5 (­«Âиê®Æ§ó·s).rar (12.45 KB)
¾Ç²ß¤~¯à´£¤É¦Û¤v

TOP

¦^´_ 13# Hsieh


    Dear ¤j¤j~ ·P®¦~ ­ì¨Ó¥u­n§â¨º¦æµ{¦¡½X§ï¦¨arrayªº¤è¦¡´N¥i¥H¸Ñ¨M
         ¯uªº«Ü·PÁ§A~
¾Ç²ß¤~¯à´£¤É¦Û¤v

TOP

        ÀR«ä¦Û¦b : ¦³¤ß´N¦³ºÖ¡A¦³Ä@´N¦³¤O¡A¦Û³yºÖ¥Ð¡A¦Û±oºÖ½t¡C
ªð¦^¦Cªí ¤W¤@¥DÃD