2017-06-12 84 views
1

我有这段代码。 DataSet被设置为一个变体。将列分配给数组VBA

DataSet = Selection.Value 

工作正常,但有没有办法我可以改变它只是列A,特别是细胞A2至A502?我曾尝试将其设置为范围,但它不起作用。它也需要忽略空格,因为不是所有的单元格都会有内容。我试图消除突出显示单元格的需要,因为条目只会在特定范围内显示。

+0

显示你尝试过什么到目前为止... – ManishChristian

+0

要通过一个不理你需要通过范围内的一个迭代的空白,并加入到该数组如果不是空白的。要做到这一点'数据集=范围(“A2:A502”)。值' –

回答

1

尝试以下2个版本:

Option Explicit 

Public Sub getNonemptyCol_ForLoop() 
    Dim dataSet As Variant, fullCol As Variant, i As Long, j As Long 
    Dim lrFull As Long, lrData As Long, colRng As Range 

    Set colRng = ThisWorkbook.Worksheets(1).Range("A2:A502") 
    fullCol = colRng 
    lrFull = UBound(fullCol) 
    lrData = lrFull - colRng.SpecialCells(xlCellTypeBlanks).Count 
    ReDim dataSet(1 To lrData, 1 To 1) 

    j = 1 
    For i = 1 To lrFull 
     If Len(fullCol(i, 1)) > 0 Then 
      dataSet(j, 1) = fullCol(i, 1) 
      j = j + 1 
     End If 
    Next 
End Sub 

Public Sub getNonemptyCol_CopyPaste() 'without using a For loop 
    Dim dataSet As Variant, ws As Worksheet 

    Application.ScreenUpdating = False 
    Set ws = ThisWorkbook.Worksheets(1) 
    With ws.UsedRange 
     ws.Activate 
     .Range("A2:A502").SpecialCells(xlCellTypeConstants).Copy 
     .Cells(1, (.Columns.Count + 1)).Activate 
     ActiveSheet.Paste 

     dataSet = ws.Columns(.Columns.Count + 1).SpecialCells(xlCellTypeConstants) 
     'dataSet now contains all non-blank values 

     ws.Columns(.Columns.Count + 1).EntireColumn.Delete 
     .Cells(1, 1).Activate 
    End With 
    Application.ScreenUpdating = True 
End Sub 
+1

谢谢!第一个解决方案为我工作! – Nick