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

[­ì³Ð] §Ö³tí©w±Æ§Çªk´ú¸Õ

[­ì³Ð] §Ö³tí©w±Æ§Çªk´ú¸Õ

§Ö³tí©w±Æ§Çªk´ú¸Õ
£¼
¤@¯ëªº§Ö³t±Æ§Çºtºâªk¬°¤£Ã­©wªº±Æ§Çªk¡A
±N¤§§ï¨}¬°Ã­©wªº±Æ§Çªk¡A
©R¦W¬°¡u§Ö³tí©w±Æ§Çªk¡v¡C
¡]¤£Ã­©w¬O«ü¬Ûµ¥¤¸¯À·|³Q§ïÅܶ¶§Ç¡A¤Ï¤§¬Ûµ¥¤¸¯À·|«O«ù¬Û¹ï¦ì¸m¡C¡^
£¼
´ú¸Õµ²ªG¡G
¤@ºû°}¦C¡A10000µ§¼Æ¦r¡A
®ðªw±Æ§Çªk¬°14.299¬í
§Ö³tí©w±Æ§Çªk¬°0.082¬í
¡]®ðªw±Æ§Çªk¬°¤Jªùªº±Æ§Çªk¡A¥ç¬°¤£Ã­©wªº±Æ§Çªk¡C¡^
¤Gºû°}¦C¡A10000x2µ§¼Æ¦r
§Ö³tí©w±Æ§Çªk¬°0.198¬í¡]¬Ý³Ì¥k¤@¦æ¸ê®Æ»¼¼W¡Aªí¥Ü¬°Ã­©w±Æ§Ç¡C¡^
¡]¤£¦P¹q¸£©ÎExcelª©¥»¤U¡A·|¦³¤£¦Pµ²ªG¡F¦P¹q¸£©ÎExcelª©¥»¤U¡A¨C¦¸ºtºâ¤]·|¦³¨Ç·L®t¶Z¡C¡^
§Ö³tí©w±Æ§Çªk´ú¸Õ.png

¥»©«³Ì«á¥Ñ jackyq ©ó 2017-2-12 22:23 ½s¿è

10000x2  = 0.198¬í ºâºC¤F
±Æ§Ç¦pªG¥Î±o«Ü¥û
À³¸Ó­n¥Î VC «Ê¸Ë1¤U
·|¬O 0.198¬í ªº 10 ­¿³t

TOP

¥»©«³Ì«á¥Ñ linyancheng ©ó 2017-2-12 22:49 ½s¿è

§Ú¤w¸g°÷¥Î¤F
¦Ó¥B§Ú¨S¬ã¨s«Ê¸Ë
VBA¥Î¨º­Ó¤è«K¶Ü¡H

¦Ó¥B§A¦³´ú¸Õ¹L¶Ü¡H¯u¦³10­¿³t¡AÃhºÃ¡I

´ú¸Õ±ø¥ó¡G
°}¦C¥ÎVariant¸ê®Æ«¬ºA¡A¦]¥\¯à»Ý­n
¤Gºû°}¦C­n¯à³]©w±Æ§Çºû«×¡B±Æ§Çºû«×ªº¤¸¯À°_¨´½d³ò¡B¥t¤@ºû«×ªº¤¸¯À½d³ò(1­Ó)¡A¦]¥\¯à»Ý­n
±Æ§Ç«á¬Ûµ¥¤¸¯À­n«O«ù¬Û¹ï¦ì¸m¡A¤£¯à³Q½Õ´«¡C

TOP

º|±¼¤F¡A¦A¥[¤@­Ó±ø¥ó¡G
¤ñ¸û¼Ò¦¡¥Îoption compare text¡A¥\¯à»Ý­n

TOP

°÷¥Î´N¦n

¨C­Ó¤H CPU µ¥¯Å¤£¤@¼Ë
¥u¯à¦Û¤v©M¦Û¤v¤ñ
­pºâ¶q 720¸Uµ§
EXCEL + VBA  ¤£Ã­±Æ = 15.567 sec
EXCEL + VBA      Ã­±Æ = 18.398 sec
EXCEL + VC    ¤£Ã­±Æ   =   1.547 sec
EXCEL + VC        Ã­±Æ   =   1.603 sec

TOP

¥»©«³Ì«á¥Ñ linyancheng ©ó 2017-2-13 01:39 ½s¿è

¦^´_ 5# jackyq


©Ò¥H«Ê¸Ëªº¬O¬Û¦Pªº¥N½X¶Ü¡H
ÁÙ¬O¦³°µ»y¨¥ªº½Õ¾ã¡H

¯uªº®t¨º»ò¦h¡A
Ãø©ÇExcel¥»¨­ªº±Æ§Ç³t«×³o»ò§Ö¡I

¨ä¹ê§Úªº´ú¸Õ¬O¦]¬°¥»¨Ó¥Îªº®ðªw±Æ§Çªk¤ÓºC¡A¦Ó¥B¬O¤£Ã­©w±Æ§Ç¡A
©Ò¥H¤~¼g¤@­Ó§Ö³tí©w±Æ§Çªk¨Ó´ú¸Õ¬Ý¬Ý¡A
¨âªÌªº®t¶Z¹ï§Ú¤w¸g«Ü°÷¤F¡I

TOP

§Úªº¥N½X¡A¥iÀ°¦£Àu¤Æ¶Ü¡HÁÂÁ¡I

Option Explicit
Option Base 1
Option Compare Text

Public Sub S_¤Gºû°}¦C§Ö³tí©w»¼¼W±Æ§Ç_01(ByRef ­ì©l¤Gºû°}¦C As Variant, ByVal ±Æ§Çºû«× As Long, ByVal ±Æ§Ç¤¸¯À§Ç As Long, ByVal °_­­ As Long, ByVal ¨´­­ As Long)

    On Error Resume Next
   
    Dim N As Long
    Dim H As Long
    Dim K As Long
    Dim X As Long
    Dim Y As Long
   
    Dim °}¦C­­¼Æ As Long
    Dim °ò·Ç As Variant
    Dim ­ì©l¤Gºû°}¦C¼Æ As Long
    Dim °}¦C²Ö­p¼Æ As Long
   
    Dim °_°}¦C() As Variant
    Dim ¨´°}¦C() As Variant
    Dim °ò°}¦C() As Variant
   
    °}¦C­­¼Æ = ¨´­­ - °_­­ + 1
   
    If °}¦C­­¼Æ < 2 Then
        Exit Sub
    End If
   
    If ±Æ§Çºû«× = 1 Then
        °ò·Ç = ­ì©l¤Gºû°}¦C((°_­­ + ¨´­­) \ 2, ±Æ§Ç¤¸¯À§Ç)
        ­ì©l¤Gºû°}¦C¼Æ = UBound(­ì©l¤Gºû°}¦C, 2) - LBound(­ì©l¤Gºû°}¦C, 2) + 1
        
        ReDim °_°}¦C(°}¦C­­¼Æ - 1, ­ì©l¤Gºû°}¦C¼Æ) As Variant
        ReDim ¨´°}¦C(°}¦C­­¼Æ - 1, ­ì©l¤Gºû°}¦C¼Æ) As Variant
        ReDim °ò°}¦C(°}¦C­­¼Æ, ­ì©l¤Gºû°}¦C¼Æ) As Variant
        
        N = 0
        H = 0
        K = 0
        For X = °_­­ To ¨´­­
            If ­ì©l¤Gºû°}¦C(X, ±Æ§Ç¤¸¯À§Ç) < °ò·Ç Then
                N = N + 1
               
                For Y = LBound(­ì©l¤Gºû°}¦C, 2) To UBound(­ì©l¤Gºû°}¦C, 2)
                    °_°}¦C(N, Y) = ­ì©l¤Gºû°}¦C(X, Y)
                Next Y
            ElseIf ­ì©l¤Gºû°}¦C(X, ±Æ§Ç¤¸¯À§Ç) = °ò·Ç Then
                H = H + 1
               
                For Y = LBound(­ì©l¤Gºû°}¦C, 2) To UBound(­ì©l¤Gºû°}¦C, 2)
                    °ò°}¦C(H, Y) = ­ì©l¤Gºû°}¦C(X, Y)
                Next Y
            Else
                K = K + 1
               
                For Y = LBound(­ì©l¤Gºû°}¦C, 2) To UBound(­ì©l¤Gºû°}¦C, 2)
                    ¨´°}¦C(K, Y) = ­ì©l¤Gºû°}¦C(X, Y)
                Next Y
            End If
        Next X
        
        If N > 1 Then
            S_¤Gºû°}¦C§Ö³tí©w»¼¼W±Æ§Ç_01 °_°}¦C, 1, ±Æ§Ç¤¸¯À§Ç, 1, N
        End If
        
        If K > 1 Then
            S_¤Gºû°}¦C§Ö³tí©w»¼¼W±Æ§Ç_01 ¨´°}¦C, 1, ±Æ§Ç¤¸¯À§Ç, 1, K
        End If
        
        °}¦C²Ö­p¼Æ = 0
        For X = °_­­ To ¨´­­
            °}¦C²Ö­p¼Æ = °}¦C²Ö­p¼Æ + 1
            
            If °}¦C²Ö­p¼Æ <= N Then
                For Y = LBound(­ì©l¤Gºû°}¦C, 2) To UBound(­ì©l¤Gºû°}¦C, 2)
                    ­ì©l¤Gºû°}¦C(X, Y) = °_°}¦C(°}¦C²Ö­p¼Æ, Y)
                Next Y
            ElseIf °}¦C²Ö­p¼Æ <= (N + H) Then
                For Y = LBound(­ì©l¤Gºû°}¦C, 2) To UBound(­ì©l¤Gºû°}¦C, 2)
                    ­ì©l¤Gºû°}¦C(X, Y) = °ò°}¦C(°}¦C²Ö­p¼Æ - N, Y)
                Next Y
            Else
                For Y = LBound(­ì©l¤Gºû°}¦C, 2) To UBound(­ì©l¤Gºû°}¦C, 2)
                    ­ì©l¤Gºû°}¦C(X, Y) = ¨´°}¦C(°}¦C²Ö­p¼Æ - N - H, Y)
                Next Y
            End If
        Next X
    Else
        °ò·Ç = ­ì©l¤Gºû°}¦C(±Æ§Ç¤¸¯À§Ç, (°_­­ + ¨´­­) \ 2)
        ­ì©l¤Gºû°}¦C¼Æ = UBound(­ì©l¤Gºû°}¦C, 1) - LBound(­ì©l¤Gºû°}¦C, 1) + 1
        
        ReDim °_°}¦C(­ì©l¤Gºû°}¦C¼Æ, °}¦C­­¼Æ - 1) As Variant
        ReDim ¨´°}¦C(­ì©l¤Gºû°}¦C¼Æ, °}¦C­­¼Æ - 1) As Variant
        ReDim °ò°}¦C(­ì©l¤Gºû°}¦C¼Æ, °}¦C­­¼Æ) As Variant
        
        N = 0
        H = 0
        K = 0
        For Y = °_­­ To ¨´­­
            If ­ì©l¤Gºû°}¦C(±Æ§Ç¤¸¯À§Ç, Y) < °ò·Ç Then
                N = N + 1
               
                For X = LBound(­ì©l¤Gºû°}¦C, 1) To UBound(­ì©l¤Gºû°}¦C, 1)
                    °_°}¦C(X, N) = ­ì©l¤Gºû°}¦C(X, Y)
                Next X
            ElseIf ­ì©l¤Gºû°}¦C(±Æ§Ç¤¸¯À§Ç, Y) = °ò·Ç Then
                H = H + 1
               
                For X = LBound(­ì©l¤Gºû°}¦C, 1) To UBound(­ì©l¤Gºû°}¦C, 1)
                    °ò°}¦C(X, H) = ­ì©l¤Gºû°}¦C(X, Y)
                Next X
            Else
                K = K + 1
               
                For X = LBound(­ì©l¤Gºû°}¦C, 1) To UBound(­ì©l¤Gºû°}¦C, 1)
                    ¨´°}¦C(X, K) = ­ì©l¤Gºû°}¦C(X, Y)
                Next X
            End If
        Next Y
        
        If N > 1 Then
            S_¤Gºû°}¦C§Ö³tí©w»¼¼W±Æ§Ç_01 °_°}¦C, 2, ±Æ§Ç¤¸¯À§Ç, 1, N
        End If
        
        If K > 1 Then
            S_¤Gºû°}¦C§Ö³tí©w»¼¼W±Æ§Ç_01 ¨´°}¦C, 2, ±Æ§Ç¤¸¯À§Ç, 1, K
        End If
        
        °}¦C²Ö­p¼Æ = 0
        For Y = °_­­ To ¨´­­
            °}¦C²Ö­p¼Æ = °}¦C²Ö­p¼Æ + 1
            
            If °}¦C²Ö­p¼Æ <= N Then
                For X = LBound(­ì©l¤Gºû°}¦C, 1) To UBound(­ì©l¤Gºû°}¦C, 1)
                    ­ì©l¤Gºû°}¦C(X, Y) = °_°}¦C(X, °}¦C²Ö­p¼Æ)
                Next X
            ElseIf °}¦C²Ö­p¼Æ <= (N + H) Then
                For X = LBound(­ì©l¤Gºû°}¦C, 1) To UBound(­ì©l¤Gºû°}¦C, 1)
                    ­ì©l¤Gºû°}¦C(X, Y) = °ò°}¦C(X, °}¦C²Ö­p¼Æ - N)
                Next X
            Else
                For X = LBound(­ì©l¤Gºû°}¦C, 1) To UBound(­ì©l¤Gºû°}¦C, 1)
                    ­ì©l¤Gºû°}¦C(X, Y) = ¨´°}¦C(X, °}¦C²Ö­p¼Æ - N - H)
                Next X
            End If
        Next Y
    End If

End Sub

TOP

http://jackyq.pixnet.net/blog/post/103456672-2017_02_14

TOP

¦^´_ 8# jackyq


    ·PÁ¡A¯uªº¤Ó±j¤F¡A¥ý¥Í¬OŪ¸ê°T¬ì¨tªº¶Ü¡H

§Ú¬Ý¥X¥D­n§Q¥ÎIndex¡A¥u­n±Æ§Ç¤@ºû¡A¦A§Q¥ÎIndex§@¦hºû²¾°Ê¡A¦³®Ä´î¤Ö±Æ§Ç¹Lµ{¤¤¤£¥²­nªº¤ÏÂв¾°Ê¡Aºû«×¤¸¯À·U¦h¡A´£³t·U©úÅã¡AÁo©ú¡I

¥t¥~´X­Ó°ÝÃD½Ð±Ð¡G

¹³¡G
      Dim value
      For X = °_­­ To ¨´­­
             value = ­ì©l1ºû°}¦C(X)
          If value < °ò·Ç Then
             N = N + 1: °_°}¦C(N) = value: °_°}¦C_ID(N) = IndexAR(X)
¨Ï¥Î value ¤@©w¤ñ¸û§Ö¶Ü¡HÁöµM¤£¥Î¤ÏÂжi¦æ´£¨ú¡u­ì©l1ºû°}¦C(X)¡v¡A¦ý¦h¤@­Ó¡uvalue = ­ì©l1ºû°}¦C(X)¡vªº°Ê§@¡A¥H«e¤]·Q¹L³o­Ó°ÝÃD¡C

¹³¡G
ReDim Preserve °_°}¦C(0 To N), °_°}¦C_ID(0 To N)  'reduce ram consumption
®Ú¾Ú§Úªº¸gÅç¡AReDim Preserve«Ü¯Ó®É¡A¦¹¨Ò¥i¥H¤£¥Î¶Ü¡H·íµM¦¸¼Æ©Î³\¤£¦h¡A¦ý¤]¤£¤Ö¡C

TOP

¦^´_ 8# jackyq


    ¹³ UBound(­ì©l¤Gºû°}¦C, 2) ¤]¥ý¥N¤JÅܼơA¤§«á¦h¦¸«h¥HÅܼƤޥΡA¦p¦¹¬O§_¤]·|´£³t¡H

TOP

        ÀR«ä¦Û¦b : ¥ÌÄ@°µ¡BÅw³ß¨ü¡C
ªð¦^¦Cªí ¤W¤@¥DÃD