首先需要数组A是一个动态数组,这样才能改变数组长度。 然后循环A,从头到尾,到了插入的地方就将该处的元素向后移动一个位置: ... IF 到了你要插入的位置 THEN A(I+1)=A(I) A(I)=B(L) L=L+1 END IF ...
SORRY 犯了一个错误,A要移动的是后面所有的元素,不只是一个 ... IF 到了你要插入的位置 THEN FOR M=I TO UBOUND(A) A(I+1)=A(I) NEXT A(I)=B(L) L=L+1 END IF ...
已知A(10)For i = 0 To 9 '模拟一组数 0-9的 a(i) = i Print a(i) & ","; Next i 然后写插入记录的代码该怎么写?
For i = 0 To 10If m < a(i) And n = 0 Then'M是要插入记录的位置,S是要插入的记录数 b(i) = S n = n + 1 Else b(i) = a(i - n) End If Next i If n = 0 Then b(i - 1) = m这段代码只能插入一个记录,我想插入多条记录,而插入记录时,是已知插入记录的位置,将数据插入进去的,这段代码该如何修改?
那就用最笨的方法 生成个新的数组 总可以了吧 Private Sub Command1_Click() Dim a(10) For i = 0 To 9 '创建数组a a(i) = i Next iFor i = 0 To 3 '提取出0-3 s = s & i & "," Next is = s & "5" & vbCrLf ' 后面加上5For i = 4 To 7 '提取4-7 s = s & i & "," Next is = s & "2" & "," '后面加上2For i = 8 To 9 '最后提取剩余 s = s & i & "," Next i b = Split(s, ",") '分割这个数据“ 0,1,2,3,5,4,5,6,7,2,8,9,”For i = 0 To UBound(a) '循环打印出 ss = ss & b(i) & vbCrLf Next iPrint ss End Sub
这类应用建议将数组改成Collection对象,Add方法可以指定插入位置。
Option Explicit '使用 API 快速插入数组元素:Private Declare Sub CopyMemory Lib "kernel32" _ Alias "RtlMoveMemory" (Destination As Any, _ Source As Any, ByVal Length As Long)Private Sub Command1_Click()'这里是数组的准备过程 Dim a() As Integer, b(0 To 1, 0 To 2) As Integer Dim i As Integer, n As Integer, j As Integern = 9 ReDim a(n) For i = 0 To n a(i) = i Next ib(0, 0) = 3 '数据要插入的位置,5 插在 3 后 b(1, 0) = 5 '第一个数据 b(0, 1) = 7 '数据要插入的位置,2 插在 7 后 b(1, 1) = 2 '第二个数据 b(0, 2) = 9 '数据要插入的位置,4 插在 9 后 b(1, 2) = 4 '第三个数据'插入过程 ReDim Preserve a(UBound(a) + UBound(b, 2) + 1)For i = 0 To UBound(b, 2) If b(0, i) < n Then CopyMemory a(b(0, i) + i + 2), a(b(0, i) + i + 1), (n + i - b(0, i)) * Len(a(0)) a(b(0, i) + i + 1) = b(1, i) Next i'打印结果 For i = 0 To UBound(a) Debug.Print a(i); Next i End Sub 0 1 2 3 5 4 5 6 7 2 8 9 4
然后循环A,从头到尾,到了插入的地方就将该处的元素向后移动一个位置:
...
IF 到了你要插入的位置 THEN
A(I+1)=A(I)
A(I)=B(L)
L=L+1
END IF
...
...
IF 到了你要插入的位置 THEN
FOR M=I TO UBOUND(A)
A(I+1)=A(I)
NEXT
A(I)=B(L)
L=L+1
END IF
...
a(i) = i
Print a(i) & ",";
Next i 然后写插入记录的代码该怎么写?
b(i) = S
n = n + 1
Else
b(i) = a(i - n)
End If
Next i
If n = 0 Then b(i - 1) = m这段代码只能插入一个记录,我想插入多条记录,而插入记录时,是已知插入记录的位置,将数据插入进去的,这段代码该如何修改?
对于B中每个要插入的值和位置,对A做一次改动
改动的经过是这样的:
先把A数组增大1 用 REDIM A(UBOUND(A)+1)
然后把插入位置处的值都往后移动,循环来做,移动完成后,把空下来的那个位置放插入的值.重复上面直到B中数全部被插入到A中
生成个新的数组 总可以了吧
Private Sub Command1_Click()
Dim a(10)
For i = 0 To 9 '创建数组a
a(i) = i
Next iFor i = 0 To 3 '提取出0-3
s = s & i & ","
Next is = s & "5" & vbCrLf ' 后面加上5For i = 4 To 7 '提取4-7
s = s & i & ","
Next is = s & "2" & "," '后面加上2For i = 8 To 9 '最后提取剩余
s = s & i & ","
Next i
b = Split(s, ",") '分割这个数据“ 0,1,2,3,5,4,5,6,7,2,8,9,”For i = 0 To UBound(a) '循环打印出
ss = ss & b(i) & vbCrLf
Next iPrint ss
End Sub
'使用 API 快速插入数组元素:Private Declare Sub CopyMemory Lib "kernel32" _
Alias "RtlMoveMemory" (Destination As Any, _
Source As Any, ByVal Length As Long)Private Sub Command1_Click()'这里是数组的准备过程
Dim a() As Integer, b(0 To 1, 0 To 2) As Integer
Dim i As Integer, n As Integer, j As Integern = 9
ReDim a(n)
For i = 0 To n
a(i) = i
Next ib(0, 0) = 3 '数据要插入的位置,5 插在 3 后
b(1, 0) = 5 '第一个数据
b(0, 1) = 7 '数据要插入的位置,2 插在 7 后
b(1, 1) = 2 '第二个数据
b(0, 2) = 9 '数据要插入的位置,4 插在 9 后
b(1, 2) = 4 '第三个数据'插入过程
ReDim Preserve a(UBound(a) + UBound(b, 2) + 1)For i = 0 To UBound(b, 2)
If b(0, i) < n Then CopyMemory a(b(0, i) + i + 2), a(b(0, i) + i + 1), (n + i - b(0, i)) * Len(a(0))
a(b(0, i) + i + 1) = b(1, i)
Next i'打印结果
For i = 0 To UBound(a)
Debug.Print a(i);
Next i
End Sub 0 1 2 3 5 4 5 6 7 2 8 9 4