excel vba中的数组

use*_*468 13 arrays excel vba excel-vba

我想在vba中有一个数组列表,因此我在excel vba中声明了一个变体,如:

Dim Students(10) as variant
Run Code Online (Sandbox Code Playgroud)

现在我想在学生列表中存储数字.数字不连续.有时像:

Students(2,7,14,54,33,45,55,59,62,66,69)
Run Code Online (Sandbox Code Playgroud)

我怎么能在vba中这样做?我怎样才能访问列表项?

Ton*_*ore 15

必须将学生声明为动态数组.也就是说,可以改变其边界的数组. Dim Students(10)给出一个数组,其边界不能更改,也不能从数组加载.

Dim Students() As Variant
Run Code Online (Sandbox Code Playgroud)

加载学生:

Students = Array(2,7,14,54,33,45,55,59,62,66,69)
Run Code Online (Sandbox Code Playgroud)

要访问元素:

Dim Inx As Long

For Inx = LBound(Students) to UBound(Students)
  Debug.Print Students(Inx)
Next
Run Code Online (Sandbox Code Playgroud)

LBound(下界)和UBound意味着for循环调整为学生中实际的元素数.


puz*_*e87 5

这对你来说太复杂了,你可能永远不会碰到你需要它的情况,但是:

我使用以下方法来形成更多内存有效的数组(因为Variant使用任何变量类型的大多数内存),同时仍然可以方便地在一行中声明数组内容.按照你的例子:

Dim Students() As Long
Dim Array2() As String

Array2() = Split("2,7,14,54,33,45,55,59,62,66,69", ",")

ReDim Array1(0) As Long
For Loop1 = LBound(Array2()) To UBound(Array2())
    ReDim Preserve Array1(0 To (UBound(Array1) + 1)) As String
    Array1(Loop1) = Array2(Loop1)
Next Loop1
ReDim Preserve Array1(0 To (UBound(Array1) - 1)) As Long

Erase Array2
Run Code Online (Sandbox Code Playgroud)

访问它的一个例子是:

For Loop1 = LBound(Students) to UBound(Students)
    Msgbox Students(Loop1)
Next Loop1
Run Code Online (Sandbox Code Playgroud)

我从这里学到了这些:http://www.vbforums.com/showthread.php? 669265-RESOLVED-VBA-Excel-Assigning-values-to-array-in-a-single-line& p= 4116778& viewfull=1#post4116778