如何从数组填充列?

时间:2018-12-19 22:53:53

标签: excel excel-vba

使用Excel VBA,我试图在新创建的工作表中填充一小组单元格。当我使用以下代码时:

Sub CreateFormulaDataSheet()
    Dim currentWs As Worksheet
    Dim formWs As Worksheet
    Dim titles As String
    Dim valuesArr As Variant

    If Not SheetExists("FormulaData") Then
    'create new sheet
    Set currentWs = ActiveWorkbook.ActiveSheet
    With ActiveWorkbook
        Set formWs = .Sheets.Add(After:=.Sheets(.Sheets.Count))
        formWs.Name = "FormulaData"

        formWs.Activate

        'populate with default values
        valuesArr = Array(1, 3, 6)

        Range(Cells(4, 1), Cells(6, 1)).Value = valuesArr

    End With
End Sub

我得到的是这样:

enter image description here

我想要的是这个

enter image description here

为什么Range函数仅填充数组中的第一个元素?

我知道这只是要更新的几个单元格,因此我可以轻松地分别设置每个单元格的值,但是我想了解为什么我的代码不起作用以及解决方案是什么,以便下次使用时有50个单元格要更新,我将不必有50个单独的单元格分配。 ;-)

2 个答案:

答案 0 :(得分:3)

您正在寻找转置方法:

Sub CreateFormulaDataSheet()
    Dim currentWs As Worksheet
    Dim formWs As Worksheet
    Dim titles As String
    Dim valuesArr As Variant

    If Not SheetExists("FormulaData") Then
    'create new sheet
    Set currentWs = ActiveWorkbook.ActiveSheet
    With ActiveWorkbook
        Set formWs = .Sheets.Add(After:=.Sheets(.Sheets.Count))
        formWs.Name = "FormulaData"

        formWs.Activate

        'populate with default values
        valuesArr = Array(1, 3, 6)

        Range("A4").Resize(UBound(valuesArr) + 1, 1).Value = Application.Transpose(valuesArr)

    End With
    End If
End Sub  

为简单起见,假设水平存储了1个三维数组。与工作表中的数据相同,如果要将其分配到垂直范围,则必须先对其进行转置。

我使用的第二件事是Resize()方法,它将根据您的数组大小方便地扩展目标范围。

答案 1 :(得分:1)

const ChildComponent = props => ( <div> {props.data && ( <div> <h3>{props.data.city}</h3> <h4>{props.data.main.temp_min}</h4> </div> )} </div> ); 是局限性的情况下,请在前面填充2D数组并直接转储到图纸上。

Transpose