为什么我有问题分配一个数组到一个范围

为什么我的数组的第一个项目被分配到范围内的所有单元格?

Private Sub sample() Dim arr() As Double, rng As Range, i As Double ReDim arr(1 To 100) For i = 1 To 100 arr(i) = i * Rnd Next i Set rng = Range("A1:A100") rng.Value = arr End Sub 

基于本地窗口,我的数组已按预期填充: 在这里输入图像描述

但是,当数组被分配给范围,它将第一个值分配给所有单元格: 在这里输入图像说明

为了将数组分配给一个范围, 数组需要被声明为一个二维数组。 即使二维只有一个元素:

 ReDim arr(1 To 100, 1 To 1) 

工作示例如下所示:

 Private Sub sample() Dim arr() As Double, rng As Range, i As Double ReDim arr(1 To 100, 1 To 1) For i = 1 To 100 arr(i, 1) = i * Rnd Next i Set rng = Range("A1:A100") rng.Value = arr End Sub 

该数组是一个水平的1维数组,需要将其转换为垂直的1维数组:

 Private Sub sample() Dim arr() As Double, rng As Range, i As Double ReDim arr(1 To 100) For i = 1 To 100 arr(i) = i * Rnd Next i Set rng = Range("A1:A100") rng.Value = Application.Transpose(arr) End Sub 

在这里输入图像描述

唯一需要注意的是,如果有大约64,500个元素,那么需要用循环手动完成转置。

尝试这个:

 Sub sample() Dim arr() As Double, rng As Range, i As Double ReDim arr(1 To 100) Set rng = Range("A1:A100") For i = 1 To 100 arr(i) = i * Rnd rng.Cells(i, 1).Value = arr(i) Next i End Sub