Excel VBA输出数组至工作表时未正常显示的技术问询
问题描述
运行以下VBA代码:
Sub Array_testing() Dim TestArray As Variant Dim OutputArray As Variant Dim OutputX As Variant Dim OutputY As Variant Dim InputX As Variant Dim InputY As Variant OutputX = 1 OutputY = 1 InputX = 1 InputY = 2 ReDim OutputArray(3, 5) TestArray = Range("a1:e3").Value Range("a6:e8").Value = TestArray Range("g1").Value = TestArray(2, 4) While InputX <> 4 Debug.Print "output (" & OutputX & "," & OutputY & ") - input (" & InputX & "," & InputY & ")" OutputArray(OutputX, OutputY) = TestArray(InputX, InputY) Debug.Print OutputArray(OutputX, OutputY) OutputY = OutputY + 1 InputY = InputY + 1 If OutputY = 6 Then OutputX = OutputX + 1 OutputY = 1 InputX = InputX + 1 End If If InputY = 6 Then InputY = 1 End If Wend Range("a10:e12").Value = OutputArray Range("g2").Value = OutputArray(2, 1) End Sub
输入数组:
执行Range("a10:e12").Value = OutputArray后,实际输出:
预期输出:
已确认OutputArray的元素赋值正确(单独调用如OutputArray(1,2)能得到预期值),且TestArray可正常写入工作表,但OutputArray无法正常显示,求原因。
原因及解决办法
- 问题核心:VBA默认数组下标从0开始(除非模块顶部声明
Option Base 1),你用ReDim OutputArray(3,5)创建的是包含0-3行、0-5列的数组,但你只给1-3行、1-5列的位置赋值了数据。当把这个数组写入单元格区域时,Excel会按数组的下标顺序填充,导致0行0列的空值占据了目标区域的第一行第一列,你赋值的有效数据被整体偏移,看起来显示异常。 - 验证操作:在代码中添加
Debug.Print LBound(OutputArray,1), UBound(OutputArray,1),运行后会看到控制台输出0 3,证明数组包含下标为0的行。 - 解决方式二选一:
- 在模块最顶部添加
Option Base 1,强制所有数组默认下标从1开始; - 显式指定数组的上下标:将
ReDim OutputArray(3, 5)改为ReDim OutputArray(1 To 3, 1 To 5),让数组的行列范围直接对应目标单元格区域的1-3行、1-5列,赋值后即可正常显示预期结果。
- 在模块最顶部添加
内容的提问来源于stack exchange,提问作者Shlemkevich
相关产品推荐
相关产品推荐

