2017-06-12 8 views
1

私はこのコードを持っています。 DataSetはバリアントとして設定されます。列を配列に割り当てるVBA

DataSet = Selection.Value 

うまく動作しますが、私はちょうど列A、特にA2からA502に変更できる方法はありますか? Iveは範囲として設定しようとしましたが動作しません。また、すべてのセルに内容があるわけではないため、空白を無視する必要があります。私はエントリがその特定の範囲にのみあるため、セルを強調表示する必要性を排除しようとしています。

+0

あなたがいずれかであなたが範囲1を反復処理する必要があります。空白を無視しに追加するには...これまで – ManishChristian

+0

を試してみました何ショー空でない場合は配列すべてを1つの 'Dataset = Range(" A2:A502 ")にする。Value' –

答えて

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