Excel 如何设置数组';是否将s值作为工作表的第一行?

Excel 如何设置数组';是否将s值作为工作表的第一行?,excel,vba,while-loop,Excel,Vba,While Loop,我试图创建一个数组,其中值来自工作表的第一行,然后在另一张表中打印这些值 我尝试读取Sheet2的第一行,将每个值存储在数组中,直到找到一个空单元格,然后在Sheet3的第一行打印该数组 我在while循环中得到了一个应用程序定义的错误,我要确保行不等于Null Private Sub createFormatSheet() With Worksheets("Sheet2") Dim myTags() As Variant Dim tag As Var

我试图创建一个数组,其中值来自工作表的第一行,然后在另一张表中打印这些值

我尝试读取Sheet2的第一行,将每个值存储在数组中,直到找到一个空单元格,然后在Sheet3的第一行打印该数组

我在while循环中得到了一个应用程序定义的错误,我要确保行不等于Null

Private Sub createFormatSheet()

    With Worksheets("Sheet2")

        Dim myTags() As Variant
        Dim tag As Variant

        Dim rw As Range
        Dim i As Integer

        i = 1
        For Each rw In .Rows

            While rw(i, 1) <> Null
                myTags = Array(rw(i, 1))
                i = i + 1
            Wend

        Next rw

    End With

    With Worksheets("Sheet3")
        i = 1

        For Each tag In myTag
            .Cells(i, 1).Value = tag
        Next tag

    End With

End Sub
Private子createFormatSheet()
带工作表(“表2”)
Dim myTags()作为变量
作为变体的Dim标记
变暗rw As范围
作为整数的Dim i
i=1
对于行中的每个rw
而rw(i,1)为空
myTags=数组(rw(i,1))
i=i+1
温德
下一个rw
以
带工作表(“表3”)
i=1
对于myTag中的每个标记
.单元格(i,1).值=标记
下一个标签
以
端接头

以下是两种方法:

  • 使用数组(不需要循环遍历项
  • 直接使用范围,不涉及数组
  • 使用
    F8
    逐步浏览代码,查看发生了什么

    Private Sub createFormatSheet()
    
        Dim sourceSheet As Worksheet
        Dim targetSheet As Worksheet
    
        Dim startRow As Long
        Dim endRow As Long
    
        Dim values As Variant
    
        Set sourceSheet = ThisWorkbook.Worksheets("Sheet2")
        Set targetSheet = ThisWorkbook.Worksheets("Sheet3")
    
        ' Array approach (no need to loop) source = column 1
        startRow = 1
        endRow = sourceSheet.Cells(startRow, 1).End(xlDown).Row
    
        values = sourceSheet.Range(sourceSheet.Cells(startRow, 1), sourceSheet.Cells(endRow, 1)).Value
    
        ' Target = column 1
        targetSheet.Cells(startRow, 1).Resize(endRow, 1).Value = values
    
        ' Direct range target column 2
        targetSheet.Cells(startRow, 2).Resize(endRow, 1).Value = sourceSheet.Range(sourceSheet.Cells(startRow, 1), sourceSheet.Cells(endRow, 1)).Value
    
    End Sub
    

    让我知道它是否有效

    您似乎没有引用要循环通过的单元格。谢谢您,我感谢您的帮助!但是我确实认为我的问题措辞有点糟糕,因为我实际上只是试图阅读第一行,而不是第一列。我更改了您提供的代码,并将xlDown更改为xlToRight以阅读行1而不是列A
    startRow=1
    endRow=sourceSheet.Cells(startRow,1).End(xlToRight).column