使用array vba将值/string赋值给单元格

我想使用数组赋值给列z,但我没有得到欲望的结果。 我正在testing分配单元格Z1 = A ,单元格Z2 = B ,单元格Z3 = C现在我的代码将所有3个单元格分配给C.我发布了我的愿望结果如下。

 Sub test() Dim ws1 As Worksheet Dim i, j As Long Dim v As Variant Set ws1 = Worksheets("Sheet1") With ws1 v = Array("A", "B", "C") For i = LBound(v) To UBound(v) For j = 1 To 3 Cells(j, 26).Value = v(i) Next j Next i End With End Sub 

在这里输入图像说明

尝试这个

 Sub test() Dim ws1 As Worksheet Dim i, j As Long Dim v As Variant Set ws1 = Worksheets("Sheet1") With ws1 v = Array("A", "B", "C") For i = LBound(v) To UBound(v) For j = 1 To 3 Cells(j, 26).Value = v(j - 1) Next j Next i End With End Sub 

您可以设置选项库1,以便在写入值时使用有效的行引用(如果数组绑定为0,您将无法使用.Cells(0,26)= v(0)作为工作表中的第0行。

Option Base :用于模块级声明数组下标的默认下限。 默认是基数0。

使用Base 1意味着可以访问所有的数组元素,并为表单和数组使用相同的增量variables,即只能使用一个长variablesi。

 Option Base 1 Sub test() Dim ws1 As Worksheet Dim i Long Dim v As Variant Set ws1 = Worksheets("Sheet1") v = Array("A", "B", "C") With ws1 For i = LBound(v) To UBound(v) .Cells(i, 26) = v(i) Next i End With End Sub 

要学习如何读写1D或2D VBA数组到单元格中,请查看下面的代码:

 Public Sub TestArrayReadAndWrite() Dim ws As Worksheet Set ws = Worksheets("Sheet1") ' Set a 1D array in VBA ' Write the array to cells Dim v() As Variant v = Array("A", "B", "C") ws.Range("A1").Resize(3, 1).Value = WorksheetFunction.Transpose(v) ws.Range("A5").Resize(1, 3).Value = v ' Set a 3×3 array in VBA ' Write the array to cells Dim a() As Variant ReDim a(1 To 3, 1 To 3) a(1, 1) = "A11": a(1, 2) = "A12": a(1, 3) = "A13" a(2, 1) = "A21": a(2, 2) = "A22": a(2, 3) = "A13" a(3, 1) = "A31": a(3, 2) = "A32": a(3, 3) = "A13" ws.Range("C1").Resize(3, 3).Value = a ' Read Array 100×1 array of cells ' Modify the array by doubling the values ' Write the array back to the next column over Dim b() As Variant, i As Long b = ws.Range("G1").Resize(100, 1).Value For i = 1 To 100 b(i, 1) = 2 * b(i, 1) Next i ws.Range("G1").Offset(0, 1).Resize(100, 1).Value = b End Sub 

结果是:

RES

通过赋值给Range().Resize(n,m).Value = x用一个命令编写完整的数组要快得多,简洁明了Range().Resize(n,m).Value = x然后循环遍历所有的值,并一次一个地设置它们。

那简单的代码呢?

 Private Sub cmdFill_Click() Dim i As Integer For i = 1 To 26 Cells(i, 26).Value = Chr(64 + i) Next i End Sub 

如果你只需要3,你可以调整26。