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

[­ì³Ð] ¨Ì¦Û­q²M³æÃ­©w±Æ§Ç¼Ò²Õ

[­ì³Ð] ¨Ì¦Û­q²M³æÃ­©w±Æ§Ç¼Ò²Õ

¥»©«³Ì«á¥Ñ linyancheng ©ó 2026-2-21 16:42 ½s¿è

¤À¨É­ì³Ð¥N½X¡]¤£³ß¤¤¤å¥N½X¡A½Ð¦Û¦æÂন­^¤å¡^
----------------------------------------------------------
S_¨Ì¦Û­q²M³æÃ­©w±Æ§Ç¼Ò²Õ_01a.bas
----------------------------------------------------------
Option Explicit

Public Sub S_¤@ºû°}¦C¨Ì¦Û­q²M³æÃ­©w±Æ§Ç_01(ByRef ­ì©l¤@ºû°}¦C As Variant, Optional ByVal °_­­ As Variant, Optional ByVal ¨´­­ As Variant, Optional ByVal ¦Û­q²M³æ°}¦C As Variant)

    On Error Resume Next
   
    If IsMissing(°_­­) Or Not IsNumeric(°_­­) Then
        °_­­ = LBound(­ì©l¤@ºû°}¦C)
    Else
        °_­­ = Fix(°_­­)
        
        If °_­­ < LBound(­ì©l¤@ºû°}¦C) Then
            °_­­ = LBound(­ì©l¤@ºû°}¦C)
        End If
    End If
   
    If IsMissing(¨´­­) Or Not IsNumeric(¨´­­) Then
        ¨´­­ = UBound(­ì©l¤@ºû°}¦C)
    Else
        ¨´­­ = Fix(¨´­­)
        
        If ¨´­­ > UBound(­ì©l¤@ºû°}¦C) Then
            ¨´­­ = UBound(­ì©l¤@ºû°}¦C)
        End If
    End If
   
    If °_­­ >= ¨´­­ Then
        Exit Sub
    End If
   
    '------------------------------------------------------
   
    Dim X As Long
   
    Dim ¯Á¤Þ°}¦C() As Long
   
    '------------------------------------------------------
   
    ReDim ¯Á¤Þ°}¦C(°_­­ To ¨´­­) As Long
   
    '------------------------------------------------------
   
    ¤@ºû°}¦C¨Ì¦Û­q²M³æÃ­©w±Æ§Ç ­ì©l¤@ºû°}¦C, ¯Á¤Þ°}¦C, °_­­, ¨´­­, ¦Û­q²M³æ°}¦C
   
    '------------------------------------------------------
   
    Dim ­ì©l¤@ºû°}¦C°Æ¥» As Variant
   
    ­ì©l¤@ºû°}¦C°Æ¥» = ­ì©l¤@ºû°}¦C
   
    For X = °_­­ To ¨´­­
        ­ì©l¤@ºû°}¦C(X) = ­ì©l¤@ºû°}¦C°Æ¥»(¯Á¤Þ°}¦C(X))
    Next X

End Sub

Public Sub S_¤Gºû°}¦C¨Ì¦Û­q²M³æÃ­©w±Æ§Ç_01(ByRef ­ì©l¤Gºû°}¦C As Variant, ByVal ±Æ§Çºû«× As Long, ByVal ±Æ§ÇÁä­È As Long, Optional ByVal °_­­ As Variant, Optional ByVal ¨´­­ As Variant, Optional ByVal ¦Û­q²M³æ°}¦C As Variant)

    On Error Resume Next
   
    If IsMissing(°_­­) Or Not IsNumeric(°_­­) Then
        °_­­ = LBound(­ì©l¤Gºû°}¦C, ±Æ§Çºû«×)
    Else
        °_­­ = Fix(°_­­)
        
        If °_­­ < LBound(­ì©l¤Gºû°}¦C, ±Æ§Çºû«×) Then
            °_­­ = LBound(­ì©l¤Gºû°}¦C, ±Æ§Çºû«×)
        End If
    End If
   
    If IsMissing(¨´­­) Or Not IsNumeric(¨´­­) Then
        ¨´­­ = UBound(­ì©l¤Gºû°}¦C, ±Æ§Çºû«×)
    Else
        ¨´­­ = Fix(¨´­­)
        
        If ¨´­­ > UBound(­ì©l¤Gºû°}¦C, ±Æ§Çºû«×) Then
            ¨´­­ = UBound(­ì©l¤Gºû°}¦C, ±Æ§Çºû«×)
        End If
    End If
   
    If °_­­ >= ¨´­­ Then
        Exit Sub
    End If
   
    '------------------------------------------------------
   
    Dim X As Long
    Dim Y As Long
   
    Dim Â^¨ú¦¨¤@ºû°}¦C As Variant
    Dim ¯Á¤Þ°}¦C() As Long
   
    '------------------------------------------------------
   
    ReDim Â^¨ú¦¨¤@ºû°}¦C(°_­­ To ¨´­­) As Variant
    ReDim ¯Á¤Þ°}¦C(°_­­ To ¨´­­) As Long
   
    If ±Æ§Çºû«× = 1 Then
        For X = °_­­ To ¨´­­
            Â^¨ú¦¨¤@ºû°}¦C(X) = ­ì©l¤Gºû°}¦C(X, ±Æ§ÇÁä­È)
        Next X
    Else
        For Y = °_­­ To ¨´­­
            Â^¨ú¦¨¤@ºû°}¦C(Y) = ­ì©l¤Gºû°}¦C(±Æ§ÇÁä­È, Y)
        Next Y
    End If
   
    '------------------------------------------------------
   
    ¤@ºû°}¦C¨Ì¦Û­q²M³æÃ­©w±Æ§Ç Â^¨ú¦¨¤@ºû°}¦C, ¯Á¤Þ°}¦C, °_­­, ¨´­­, ¦Û­q²M³æ°}¦C
   
    '------------------------------------------------------
   
    Dim ­ì©l¤Gºû°}¦C°Æ¥» As Variant
   
    ­ì©l¤Gºû°}¦C°Æ¥» = ­ì©l¤Gºû°}¦C
   
    If ±Æ§Çºû«× = 1 Then
        For X = °_­­ To ¨´­­
            For Y = LBound(­ì©l¤Gºû°}¦C, 2) To UBound(­ì©l¤Gºû°}¦C, 2)
                ­ì©l¤Gºû°}¦C(X, Y) = ­ì©l¤Gºû°}¦C°Æ¥»(¯Á¤Þ°}¦C(X), Y)
            Next Y
        Next X
    Else
        For Y = °_­­ To ¨´­­
            For X = LBound(­ì©l¤Gºû°}¦C, 1) To UBound(­ì©l¤Gºû°}¦C, 1)
                ­ì©l¤Gºû°}¦C(X, Y) = ­ì©l¤Gºû°}¦C°Æ¥»(X, ¯Á¤Þ°}¦C(Y))
            Next X
        Next Y
    End If

End Sub

Private Sub ¤@ºû°}¦C¨Ì¦Û­q²M³æÃ­©w±Æ§Ç(ByRef ­ì©l¤@ºû°}¦C As Variant, ByRef ¯Á¤Þ°}¦C() As Long, ByVal °_­­ As Long, ByVal ¨´­­ As Long, ByVal ¦Û­q²M³æ°}¦C As Variant)

    On Error Resume Next
   
    Dim X As Long
    Dim N As Long
   
    '------------------------------------------------------
   
    Dim ¤£­«½Æ¦Û­q²M³æ°}¦C() As Variant
    Dim ¦Û­q²M³æ¼Æ¶q¦r¨å As Object
   
    ReDim ¤£­«½Æ¦Û­q²M³æ°}¦C(0 To UBound(¦Û­q²M³æ°}¦C) - LBound(¦Û­q²M³æ°}¦C)) As Variant
   
    Set ¦Û­q²M³æ¼Æ¶q¦r¨å = CreateObject("Scripting.Dictionary")
   
    N = -1
    For X = LBound(¦Û­q²M³æ°}¦C) To UBound(¦Û­q²M³æ°}¦C)
        If Not ¦Û­q²M³æ¼Æ¶q¦r¨å.Exists(¦Û­q²M³æ°}¦C(X)) Then
            N = N + 1
            ¤£­«½Æ¦Û­q²M³æ°}¦C(N) = ¦Û­q²M³æ°}¦C(X)
            ¦Û­q²M³æ¼Æ¶q¦r¨å(¦Û­q²M³æ°}¦C(X)) = 0 '¼Æ¶qªì©l¤Æ
        End If
    Next X
   
    ReDim Preserve ¤£­«½Æ¦Û­q²M³æ°}¦C(0 To N) As Variant
   
    ¦Û­q²M³æ¼Æ¶q¦r¨å("Key_Not_Exist") = 0 '¼Æ¶qªì©l¤Æ
   
    '------------------------------------------------------
   
    For X = °_­­ To ¨´­­
        If ¦Û­q²M³æ¼Æ¶q¦r¨å.Exists(­ì©l¤@ºû°}¦C(X)) Then
            ¦Û­q²M³æ¼Æ¶q¦r¨å(­ì©l¤@ºû°}¦C(X)) = ¦Û­q²M³æ¼Æ¶q¦r¨å(­ì©l¤@ºû°}¦C(X)) + 1 '¬Û¦P¤¸¯Àªº¼Æ¶q
            ¯Á¤Þ°}¦C(X) = ¦Û­q²M³æ¼Æ¶q¦r¨å(­ì©l¤@ºû°}¦C(X)) '¬Û¦P¤¸¯Àªº¬Û¹ï¦¸§Ç
        Else
            ¦Û­q²M³æ¼Æ¶q¦r¨å("Key_Not_Exist") = ¦Û­q²M³æ¼Æ¶q¦r¨å("Key_Not_Exist") + 1 '¬Û¦P¤¸¯Àªº¼Æ¶q
            ¯Á¤Þ°}¦C(X) = ¦Û­q²M³æ¼Æ¶q¦r¨å("Key_Not_Exist") '¬Û¦P¤¸¯Àªº¬Û¹ï¦¸§Ç
        End If
    Next X
   
    '------------------------------------------------------
   
    Dim ¦Û­q²M³æ²Ö¿n¼Æ¶q¦r¨å As Object
   
    Set ¦Û­q²M³æ²Ö¿n¼Æ¶q¦r¨å = CreateObject("Scripting.Dictionary")
   
    ¦Û­q²M³æ²Ö¿n¼Æ¶q¦r¨å(¤£­«½Æ¦Û­q²M³æ°}¦C(0)) = 0
   
    For X = 1 To UBound(¤£­«½Æ¦Û­q²M³æ°}¦C)
        ¦Û­q²M³æ²Ö¿n¼Æ¶q¦r¨å(¤£­«½Æ¦Û­q²M³æ°}¦C(X)) = ¦Û­q²M³æ²Ö¿n¼Æ¶q¦r¨å(¤£­«½Æ¦Û­q²M³æ°}¦C(X - 1)) + ¦Û­q²M³æ¼Æ¶q¦r¨å(¤£­«½Æ¦Û­q²M³æ°}¦C(X - 1))
    Next X
   
    ¦Û­q²M³æ²Ö¿n¼Æ¶q¦r¨å("Key_Not_Exist") = ¦Û­q²M³æ²Ö¿n¼Æ¶q¦r¨å(¤£­«½Æ¦Û­q²M³æ°}¦C(UBound(¤£­«½Æ¦Û­q²M³æ°}¦C))) + ¦Û­q²M³æ¼Æ¶q¦r¨å(¤£­«½Æ¦Û­q²M³æ°}¦C(UBound(¤£­«½Æ¦Û­q²M³æ°}¦C)))
   
    '------------------------------------------------------
   
    For X = °_­­ To ¨´­­
        If ¦Û­q²M³æ¼Æ¶q¦r¨å.Exists(­ì©l¤@ºû°}¦C(X)) Then
            ¯Á¤Þ°}¦C(X) = °_­­ - 1 + ¦Û­q²M³æ²Ö¿n¼Æ¶q¦r¨å(­ì©l¤@ºû°}¦C(X)) + ¯Á¤Þ°}¦C(X) '¤¸¯Àªº°}¦C¦¸§Ç
        Else
            ¯Á¤Þ°}¦C(X) = °_­­ - 1 + ¦Û­q²M³æ²Ö¿n¼Æ¶q¦r¨å("Key_Not_Exist") + ¯Á¤Þ°}¦C(X) '¤¸¯Àªº°}¦C¦¸§Ç
        End If
    Next X
   
    '------------------------------------------------------
   
    Dim ¯Á¤Þ°}¦C°Æ¥» As Variant
   
    ¯Á¤Þ°}¦C°Æ¥» = ¯Á¤Þ°}¦C
   
    For X = °_­­ To ¨´­­
        ¯Á¤Þ°}¦C(¯Á¤Þ°}¦C°Æ¥»(X)) = X '¦¸§Ç½Õ´«
    Next X

End Sub
Word§e²{·¥­PªºÀRºA¤§¬ü¡AExcel®i²{·¥­Pªº°ÊºA¤§¬ü¡C

´ú¸ÕÀÉ®×

´ú¸Õ¨Ì¦Û­q²M³æ±Æ§Ç.zip (16.32 KB)

Word§e²{·¥­PªºÀRºA¤§¬ü¡AExcel®i²{·¥­Pªº°ÊºA¤§¬ü¡C

TOP

        ÀR«ä¦Û¦b : ­×¦æ­nô½t­×¤ß¡AÂǨƽm¤ß¡AÀH³B¾i¤ß¡C
ªð¦^¦Cªí ¤W¤@¥DÃD