vba中:如何将一个数组的一串元素复制给另外一个数组

例:
数组A:{1,2,3,4,5,6,7,8,9,10}
现在要将数组A中2~9这些元素一次性复制给数组B

Sub test()
Dim arrA() As Integer
Dim arrB() As Integer

For i = 1 To 10
arrA(i) = i
Next i
End Sub

不要循环复制,CopyMemory不会用,如可以实现请明示
我需要一次性复制过来,保证效率
问题的初衷是:
我想做个方法移除数组中的某个元素(像Java List 中的 Remove(Index)),因为是初学vba所以不是很了解,请帮忙

vb里面没有这样的函数,CopyMemory是可以的,看看下面的实例
vb6在我机子上用下面数据测试 时间差20倍左右,十万个数据就可以看出来了,我用的是一百万
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (pDst As Any, pSrc As Any, ByVal ByteLen As Long)
Private Declare Function GetTickCount Lib "kernel32" () As Long

Private Sub Command1_Click()
Dim arrA() As Long
Dim arrB() As Long

ReDim arrA(1 To 1000000)
ReDim arrB(2 To 1000000)

For i = 1 To 1000000
arrA(i) = i
Next i
'取得开机至今的毫秒数
T = GetTickCount

For i = 2 To 1000000
arrB(i) = arrA(i)
Next
MsgBox "用时" + Str$(GetTickCount - T) + "毫秒"
'我的机子用时200毫秒左右,机子老古董了比较慢不要见笑
ReDim arrB(2 To 1000000) '注意这行已经清空了上面的赋值
T = GetTickCount
CopyMemory arrB(2), arrA(2), LenB(arrA(1)) * 999999
MsgBox "用时" + Str$(GetTickCount - T) + "毫秒"
'我的机子用时10毫秒左右
'看看最后一个数据对不对
MsgBox arrB(1000000)
End Sub追问

您是个行家,能帮我看看这个问题能不能用别的方案解决,最好能保证效率
我想做个方法移除数组中的某个元素(像Java List 中的 Remove(Index)),因为是初学vba所以不是很了解,请帮忙

追答

写了一个函数,方法移除数组中的某个元素,注意类型匹配问题,要改成和你传过来统一类型,比如你的原数组是String的那么arr() As String ,arrT() As String

Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (pDst As Any, pSrc As Any, ByVal ByteLen As Long)

'注意arr和你传过来的类型要匹配,现在是integer,还有里面arrT也要和这个统一类型
'arr是要传过来的数组,说明既然你要删除数组arr的中一个,那么自然你传过来的的数组要是动态的。index是要删除的那项下标
Sub Remove(arr() As Integer, index As Long)
Dim k As Long, j As Long, L As Long, arrT() As Integer
k = LBound(arr): j = UBound(arr)
L = LenB(arr(LBound(arr)))
ReDim arrT(k To j - 1)

Select Case index
Case k
CopyMemory arrT(k), arr(k + 1), L * (j - k)
Case j
CopyMemory arrT(k), arr(k), L * (j - k)
Case Else
CopyMemory arrT(k), arr(k), L * (index - k)
CopyMemory arrT(index), arr(index + 1), L * (j - index)

End Select
For i = 2 To UBound(arr)
Debug.Print arr(i)
Next
ReDim arr(k To j - 1)
For i = 2 To UBound(arr)
Debug.Print arr(i)
Next
CopyMemory arr(k), arrT(k), L * (j - k)

End Sub

Private Sub Command2_Click()
Dim arrA() As Integer
ReDim arrA(2 To 6)
For i = 2 To 6
arrA(i) = i
Next
'arrA数组是下标从2开始的一个数组,删除下标4的
Remove arrA, 4

Debug.Print UBound(arrA)

For i = 2 To UBound(arrA)
Debug.Print arrA(i)
Next

End Sub

温馨提示:内容为网友见解,仅供参考
第1个回答  2011-08-08
好像没你说的功能,VB.NET就有了,可以用ArrayList实现。

vba中:如何将一个数组的一串元素复制给另外一个数组
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (pDst As Any, pSrc As Any, ByVal ByteLen As Long)Private Declare Function GetTickCount Lib "kernel32" () As Long Private Sub Command1_Click()Dim arrA() As Long Dim arrB() As Long ReDim arrA(1 To 1000000)...

如何用VBA编程实现将满足条件的数据填充到另一个指定的表格中?
看不出难度呀,单元格是一对一的复制,表1的B-F列右移一下到表2的C-G列,8节课在2-3、4-5之间添加一个空行,要求就是这样吗,解决此问题用公式最好,如果作为学VBA的例子,主要是练习数组使用、FOR循环使用。代码可以这样:dim arr1,arr2,i,j,t arr1=sheets("表1").range("a1:f10")...

vba数组一维数组怎么赋值给二维数组?
第一种方法是单元格区域装入二维数组,如:Arr=range("a1:b19")就可以把单元格区域的值装入数组arr 第二种就是通过循环装入,一个个数值装入。例:向二维数组写入数据和读取;Dim x As Integer, y As Integer Dim arr(1 To 5, 1 To 4)For x = 1 To 5 ...

excel vba中 我想要复制一个区域的内容到另外一张表上,但是复制区域的...
精简一点:Dim i As Integer i = 2 Range(Cells(1, 1), Cells(2, i)).Copy Sheets(2).Range("a1")如果要打开Sheets(2)工作表,在最后加上语句:Sheets(2).Activate 用以下语句也可以:Range("a1").Resize(2, i).Copy Sheets(2).Range("a1")说明:Range对象的Resize属性是用于调整指定...

Excel vba求助一个数组写入另一个数组
例如将Ar数组中的数据写入Br中 主要代码:for i=1 to ubound(ar)br(i-1)=ar(i-1)next i

VBA怎么按行来提取不重复数据,复制到另一个工作表?
以下是VBA按行提取不重复数据并将其复制到另一个工作表的代码示例:```Sub ExtractUniqueData()Dim wsSrc As Worksheet, wsDest As Worksheet Dim lastRow As Long Dim dict As Object, rng As Range, cell As Range '设置源工作表和目标工作表 Set wsSrc = ThisWorkbook.Worksheets("...

在VBA中如何用一个数组给另一个数组赋值?
1.首先在Excel电子表格中选择要分配数组的单元格。2.n、在界面中,点击“insert”和“formcontrol”中的“button”选项。3.在接口版本的表中生成按钮控件,修改控制的名字。4.接下来,在界面中,点击“查看代码”选项。5.在VBA接口中继续,并输入定义一维数组的语句。6.然后,在VBA接口中,输入一...

[Excel+VBA]如何查找某个表格里的数据并将相关数据复制到另一个表中...
第3列同理 VBA的要依次循环包含了 编号或 挖方的数据 或设置 步长 复制到 sheet1表 Sub 编号()Dim i, n n = 2 For i = 1 To Sheets("三角网原始数据").Range("a65536").End(xlUp).Row Step 6 n = n + 1 Cells(n, "a") = Sheets("三角网原始数据").Cells(i, "A")Cells...

Excel VBA 如何将一个区域的单元格载入二维数组
可以使用命名单元格区域,然后可以像数组一样使用了 例如:区域名为“dsds”,调用方法: range("dsds")(1,1) 表示第一行,第一列 如果只用一列:range("dsds")(1)

VBA如何在多个表单里查找某一个单元格内容并且复制所有查找结果同行的...
set rng=[A1:Z500].find("123")if not rng is nothing then a=rng.resize(1,10)先从指定区域查找123,找到的话就把找到的单元格右侧10个单元格内容放到数组a,你后面再把a的内容给到你的目标区域即可。

相似回答