2017-08-08 115 views
0

我仍然从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 

有什么建议吗?因为你说你要复制仅在非空白单元格

乔纳森

+0

这失败了吗?显示什么错误? – Luuklag

+0

错误是在这行代码With Worksheets(CopierColler).Array(arrCandidatures).Columns(iCol)我无法管理选择我想要列1到6的表选择 – Jonathan

+0

它是一个Excel表或只是一组细胞? – Luuklag

回答

0

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

Private Sub CopyPasteRange() 

    Dim Rng As Range 
    Dim Arr As Variant 

    With Range("Candidatures") 
     Set Rng = .Range(.Cells(0, 1), .Cells(.Rows.Count - 1, 6)) 
    End With 

    Debug.Print Rng.Address, Rng.Rows.Count, Rng.Columns.Count 
    Arr = Rng.Value 
    Debug.Print Lbound(Arr,1), Lbound(Arr, 2), Ubound(Arr,1), Ubound(Arr,2) 
    Debug.Print Worksheets("RawData").Cells(2, 1).Resize(UBound(Arr, 1), UBound(Arr, 2)).Address 
    Worksheets("RawData").Cells(2, 1).Resize(UBound(Arr, 1), UBound(Arr, 2)).Value = Arr 
End Sub 

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

当您在“RawData”中遍历新行时,请记住从下到上这样做,以便您可以删除不符合要求的行。

注意:我对代码.Range(.Cells(0, 1), .Cells(.Rows.Count - 1, 6))感到惊讶。 Cells(0, 1)这通常会引发错误。它在这种情况下不是因为它引用了一个命名范围。我测试过,它能正常工作。但是,你说你有一张桌子。我对表格不熟悉,因为我在学习Excel之前就学会了Excel。无论如何,如果这行代码给你任何问题,这将是因为Excel中没有第0行。构建这行代码的“正常”方式是.Range(.Cells(1, 1), .Cells(.Rows.Count, 6)),但是当我尝试这样做时,它给了我错误的范围。零时,它从指定的范围中选取正确的数据。

+0

我明白你的意思,我希望我的代码要做的是复制已填充的单元格直到找到空单元格为止,因为在我的特定情况下,空单元格表示数据的结束(但我将“候选”表格定义为较大,因此在填充的单元格下包含大量空行将需要删除)。 我试过这个,但我得到一个错误'9'的消息,代码的最后一行显然是问题。 – Jonathan

+0

为什么你需要“候选人”成为一张桌子?一旦你使用VBA,工作表是主要单位。表格中的每个地址都必须转换为表格中的等价物。因此,如果您可以将该表格作为表格使用,那么您的问题可能会更小。 – Variatus

+0

在最后一行中,源和目标范围的大小必须相同。 'Rng'是源代码,并且“RawData”上调整大小的单元格是目标。我已经将代码添加到上述解决方案来检查这两个范围。您可以检查'Rng'是否选择复制数据的正确区域以及两个范围的大小有何不同。 'Debug.Print'的输出是VB编辑器的即时窗口。 – Variatus

相关问题