将列中的列复制到另一个工作表

时间:2017-08-08 10:45:54

标签: excel vba excel-vba

我仍然开始使用VBA,并想知道如何将数据从特定数组中非空的单元格复制到另一个数组。所以我有这个名为“Candidatures”的表(它不会从第1行开始)我想只复制包含数据的单元格并将其复制到另一个工作表。这是我到目前为止所得到的:

Dim arrCandidatures() As Variant
arrCandidatures = Range("Candidatures").Value

Dim iCol As Long
Dim iRow As Long

   iMaxRow = 250

For iCol = 1 To 6 'these are the columns i want to copy from "Candidatures"
    For iRow = 1 To iMaxRow
        With Worksheets(CopierColler).Array(arrCandidatures).Columns(iCol)
            If .Value = "" Then
            Else: .Copy Destination:=Worksheets("RawData").Cells(D2, I10)
            End If
        End With

    Next iRow
Next iCol

有什么建议吗?

乔纳森

1 个答案:

答案 0 :(得分:0)

你的逻辑似乎有点缺陷,因为你说你只想复制那些不空白的单元格。通常,人们会复制不是空白但在所选行中包含空白单元格的行。因此,我建议采用这种方法:首先复制所有内容,然后删除您不想保留的行。以下代码将复制所有内容。

.Range(.Cells(0, 1), .Cells(.Rows.Count - 1, 6))

请注意,目标单元格(2,1)是A2,表示第2行第1列。这是要复制的整个范围的左上角单元格,您可以更改它以满足您的要求。

当您循环遍历" RawData"中的新行时请记住从下到上执行此操作,以便您可以删除不符合保留要求的行。

注意:我对代码Cells(0, 1)感到惊讶。通常会抛出错误的.Range(.Cells(1, 1), .Cells(.Rows.Count, 6))。在这种情况下它并不是因为它指的是命名范围。我测试过,它的工作正常。但是,你说你有一张桌子。我不熟悉表格,因为我在介绍之前学习了Excel。无论如何,如果这行代码给你带来任何问题,那将是因为Excel中没有第0行。 "正常"构造这行代码的方法是{{1}},但是当我尝试它时,它给了我错误的范围。使用零,它从命名范围中获取正确的数据。