
==标题==
|------------------------|
| 在VB.net中一维数组,与VBA有什么区别 |
==正文==
(一)在VB.net中的一维数组,初始化与赋值,举例说明
以下是VB.net中一维数组的初始化与赋值方法及示例说明,结合不同场景提供具体代码:
一、声明时直接初始化
语法:`Dim数组名()As数据类型={值1,值2,...}`
特点:声明同时赋值,无需指定长度(编译器自动推断)
示例:
makefile
' 初始化字符串数组 Dim fruits() As String = {"Apple", "Banana", "Orange"} ' 初始化整数数组 Dim numbers() As Integer = {1, 2, 3, 4, 5}
>此时`fruits`长度为3,`numbers`长度为5,索引从0开始。
二、先声明后赋值
场景:数组大小或初始值需动态确定
方法:分两步操作(声明+单独赋值)
'1.声明数组但不初始化
sql
' 1. 声明数组但不初始化 Dim temperatures(3) As Single ' 声明长度为4的数组(索引0-3)' 2. 逐个元素赋值 temperatures(0) = 23.5 temperatures(1) = 18.2 temperatures(2) = 21.7 temperatures(3) = 25.0
' 或使用索引变量批量赋值 Dim values(4) As Integer For i As Integer = 0 To 4 values(i) = i * 10 ' 结果:[0, 10, 20, 30, 40]Next
>注意:声明时`Dimarr(n)`表示索引范围0到n,总长度为n+1。
三、使用`New`关键字初始化
语法:`Dim数组名()As数据类型=New数据类型(){值1,值2,...}`
特点:显式调用构造函数,可结合匿名类型
示例:
makefile
' 显式初始化 Dim colors() As String = New String() {"Red", "Green", "Blue"}' 初始化对象数组 Dim persons() As Object = New Object() {"Alice", 30, True}
>此方式与直接初始化等效,但语法更明确
四、动态调整数组大小(`ReDim`)
场景:需在运行时修改数组长度
方法:`ReDim[Preserve]数组名(新上界)`
示例:
powershell
Dim scores() As Integer = {85, 90} ' 初始长度2 ' 扩展为长度5(原数据丢失)ReDim scores(4) ' 结果:[0, 0, 0, 0, 0]
' 保留原数据扩展 Dim data() As String = {"A", "B"}ReDim Preserve data(3) ' 结果:["A", "B", Nothing, Nothing]data(2) = "C" ' 赋值新元素
>关键:`Preserve`保留原有数据;无`Preserve`则重置所有元素为默认值
注意事项
1.索引范围:默认从0开始,可用`OptionBase1`改为从1开始(不推荐,易混淆)
2.类型安全:数组元素必须为同一数据类型(`Object`数组除外)
3.性能:频繁`ReDimPreserve`影响效率,建议改用`List(OfT)`动态集合
>完整示例可参考VB.net官方文档
(二)与VBA中的一维数组有什么区别
1. 1.索引默认起始值不同
- VB.NET:
数组索引严格从 0 开始(如Dim arr(5) As Integer
包含索引 0~5 共6个元素)。Option Base
语句已被废弃,无法修改起始索引。 - VBA:
索引默认从 0 开始,但可通过Option Base 1
改为从 1 开始。从 Excel 对象(如 Range)赋值的数组默认索引为 1 (如arr = Range("A1:A10")
的索引为 1~10)。
🧩 2. 数据类型与灵活性差异
-
-
强类型数组(如
Integer()
、String()
),元素必须统一类型(Object
数组除外)。 -
支持匿名类型数组(
New With {.Name = "Alice"}
)。
-
-
VBA:
-
-
常用
Variant
类型数组,可混合存储不同类型数据(如字符串、数字、对象)。 -
从 Excel 获取的数组默认为二维结构(即使单列)。
-
⚙️ 3. 初始化与赋值语法

💡 VBA 的 Array()
函数返回索引从 0 开始的数组,而 Excel 赋值返回索引从 1 开始的数组
🔄 4. 动态数组调整(ReDim)
- VB.NET:使用
ReDim Preserve arr(新上界)
保留数据,但频繁操作性能低,推荐改用List(Of T)
- VBA:
ReDim Preserve 更常见,但同样有性能损耗;无内置集合类替代
🧠 5. 底层实现与功能扩展
-
-
数组继承自
System.Array
,支持高级方法(如Length
、Copy
) -
完全面向对象,可结合 LINQ 查询。
-
-
VBA:
-
-
基于 COM,功能较基础,无内置迭代器或集合扩展方法。
-
依赖 Excel 对象模型处理数据。
-
⚠️ 关键注意事项
- 索引陷阱:
VBA 中从 Excel 获取的数组索引可能从 1 开始,而Array()
生成的从 0 开始,易引发越界错误。 - 类型安全:
VB.NET 的强类型减少运行时错误,VBA 的Variant
数组更灵活但需手动校验类型。 - 性能场景:
VB.NET 中大型数组操作优先选List
或集合;VBA 中避免频繁ReDim Preserve。
💎 总结建议
- 迁移 VBA 到 VB.NET:
注意索引重置为 0,用List(Of T)
替代动态数组,强类型化数据。 - VBA 优化:
明确索引起点(用LBound
/UBound
检测),复杂数据处理时借用 Excel 函数
==The end==

==合集==
|-----------------------------------------------------------------------------------------------------------------------------------------------------|
| VB.NET学习系列汇总 |
====若有用,请转发免费学习===
关注看更多文章