Redim阵列
我想从两个数组中删除重复的x及其相关的y,但我收到了以下错误:   ;阵列已标注尺寸
什么';我的密码有问题吗
假设我有这些值,我想删除被复制的第三行[(X2)和Y(2)]:Dim x(0到3)作为Double,Y(0到三)作为doug 3)=0.12
Y(3)=0.86Private Sub Remove_Duplicate(X() as double,Y() as double )
Dim i As Long, elem As Variant
For Each elem In x
For i = elem.Index + 1 To UBound(x)
x(i - 1) = x(i)
ReDim Preserve x(i - 1)
y(i - 1) = y(i)
ReDim Preserve y(i - 1)
Next
Next elem
End Sub
您无法在多个阵列中重新定义第一个维度,只能重新定义第二个维度。以下是在删除重复后重新创建新阵列的方法:
'make sure you checked in Tools->Options->General->Error trapping->'Break on Unhandled Errors'
Sub TestRemove_Dupes()
Dim x(0 To 3) As Double, y(0 To 3) As Double
x(0) = 0.29
y(0) = 0.89
x(1) = 0.34
y(1) = 0.44
x(2) = 0.29
y(2) = 0.89
x(3) = 0.12
y(3) = 0.86
Dim coll As New Collection
Dim i, j
Dim itm(0 To 1)
For i = 0 To UBound(x)
itm(0) = x(i): itm(1) = y(i)
On Error Resume Next
coll.Add itm, CStr(x(i)) & CStr(y(i))
Next
ReDim ar(0 To coll.Count - 1, 0 To 1)
'colllection items starts from 1
For i = 1 To coll.Count
ar(i - 1, 0) = coll.item(i)(0): ar(i - 1, 1) = coll.item(i)(1)
Next
For i = 0 To UBound(ar)
Debug.Print ar(i, 0) & " | " & ar(i, 1)
Next
End Sub
嗨,Fixo。感谢您高效的解决方案。本人';不过,我很抱歉反应太晚。我有点忙,有一些事情要做
真诚的,罗伯特 祝你有愉快的一天 或者,您可以声明在主Sub中没有维度的向量(调用“Remove\u Duplicate”Sub的向量),并立即用初始已知维度重新命名它们(在此阶段不需要“Preserve”关键字)。然后用“重新命名”;保留“;移位值循环完成后,子对象内的关键字。如下所示Sub Main()
Dim X() As Double, Y() As Double
ReDim X(0 To 3)
ReDim Y(0 To 3)
X(0) = 0.29
Y(0) = 0.89
X(1) = 0.34
Y(1) = 0.44
X(2) = 0.29
Y(2) = 0.89
X(3) = 0.12
Y(3) = 0.86
Call Remove_Duplicate(X, Y, 2)
End Sub
Private Sub Remove_Duplicate(X() As Double, Y() As Double, MyIndex As Long)
Dim i As Long
Dim UbX As Integer
UbX = UBound(X) ' we'll assume the same dimension for Y()
For i = MyIndex + 1 To UbX
X(i - 1) = X(i)
Y(i - 1) = Y(i)
Next
ReDim Preserve Y(UbX - 1)
ReDim Preserve X(UbX - 1)
End Sub
它';肯定没有Fixo有趣;他的一条建议(他的知识总是让我惊讶)。和don#039;我不知道效率是否较低。另一方面,它是#039;它很短,这一直吸引着我。再见 好球,我喜欢 鼓掌;RICVBA,很好的技巧当然,我';我今晚会用的。谢谢,祝你愉快。。。
页:
[1]