如何将Excel中列中的所有非空单元格存储为从偏移量开始的一维数组?
示例:
我想将所有单元格作为单个项目存储在一维数组中
从Column B
开始,从偏移Row 3
开始。如果单元格为空,我不想存储它。
myArr = Range("B3:" & last_non_empty_cell_in_B).Value
答案 0 :(得分:1)
在B列上使用Autofilter
,然后将可见单元格复制到数组
Sub columnB()
Dim B As Range, cel As Range, i As Long, myArr
With Sheet1
Set B = .Range("B3", .Cells(.Rows.Count, "B").End(xlUp))
B.AutoFilter 1, "<>" ' <-- autofilter out blank cells
ReDim myArr(B.SpecialCells(xlCellTypeVisible).Count - 1) ' <-- size the array accordingly
For Each cel In B.SpecialCells(xlCellTypeVisible) ' <-- copy cells individually to array
myArr(i) = cel.Value2
i = i + 1
Next
.Cells.AutoFilter ' now remove the autofilter
End With
' now you have you array myArr
End Sub
使它成为一个返回字符串数组的函数:
Function GetNonEmptyFromColumn(col As String, headerRow As String) As String()
Dim B As Range, cel As Range, i As Long, myArr() As String
With Sheet1
Set B = .Range(col & headerRow, .Cells(.Rows.Count, col).End(xlUp))
B.AutoFilter 1, "<>" ' <-- autofilter out blank cells
ReDim myArr(B.SpecialCells(xlCellTypeVisible).Count - 1) As String ' <-- size the array accordingly
For Each cel In B.SpecialCells(xlCellTypeVisible) ' <-- copy cells individually to array
myArr(i) = cel.Value2
i = i + 1
Next
.Cells.AutoFilter ' now remove the autofilter
End With
GetNonEmptyFromColumn = myArr
' now you have you array myArr
End Function
Sub Test()
Dim s() As String
s = GetNonEmptyFromColumn("B", 4)
End Sub