- ©«¤l
- 231
- ¥DÃD
- 76
- ºëµØ
- 2
- ¿n¤À
- 339
- ÂI¦W
- 0
- §@·~¨t²Î
- Windows 10
- ³nÅ骩¥»
- Office 2000, 2019
- ¾\ŪÅv
- 100
- ©Ê§O
- ¨k
- ¨Ó¦Û
- ¹ü¤Æ¿¤
- µù¥U®É¶¡
- 2013-7-18
- ³Ì«áµn¿ý
- 2026-2-21
|
¥»©«³Ì«á¥Ñ 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 |
|