我正在尝试将所有过滤后的数据收集到一个范围变量中,但这不起作用。
当可见数据是连续的(行25至200)时,我没问题,但是当可见数据不连续(行25至27,然后43至47,然后60至92)时,它只能达到第一个范围(第25至27行)
这是我的代码:
datas = dataSheet.Range("A2:L" & dataSheet.
[A65000].End(xlUp).Row).SpecialCells(xlCellTypeVisible).Value
你有小费吗?
谢谢您的回答。
路易
答案 0 :(得分:1)
听起来您正在尝试填充名为datas
的数组变量,如果您的范围是连续的,则该变量成功,但仅在不连续的情况下才获取第一部分。而您正在寻找的是用不连续范围内的所有数据填充数组。
这是可能的,有两种方法。第一种是复制不连续的范围并将其粘贴到临时工作表中。粘贴的范围将是连续的,然后可以按照原始代码中所示正常将其加载到数组中。第二种是直接填充数组,但是您必须遍历每个可见的单元格才能做到这一点。
方法1(使用临时工作表):
Sub tgrTempWS()
Dim dataSheet As Worksheet
Dim tempSheet As Worksheet
Dim rData As Range
Dim datas As Variant
Set dataSheet = ActiveWorkbook.Sheets("Sheet1")
On Error Resume Next
Set rData = dataSheet.Range("A2:L" & dataSheet.[A65000].End(xlUp).Row).SpecialCells(xlCellTypeVisible)
On Error GoTo 0
If rData Is Nothing Then Exit Sub 'No data
Set tempSheet = dataSheet.Parent.Sheets.Add
rData.Copy tempSheet.Range("A1")
datas = tempSheet.Range("A1").CurrentRegion.Value
Application.DisplayAlerts = False
tempSheet.Delete
Application.DisplayAlerts = True
'do stuff with your datas array variable here
End Sub
方法2(遍历可见的单元格):
Sub tgrLoop()
Dim dataSheet As Worksheet
Dim rData As Range
Dim rCell As Range
Dim datas As Variant
Dim lRow As Long, lCol As Long
Dim i As Long, j As Long
Set dataSheet = ActiveWorkbook.Sheets("Sheet1")
On Error Resume Next
Set rData = dataSheet.Range("A2:L" & dataSheet.[A65000].End(xlUp).Row).SpecialCells(xlCellTypeVisible)
On Error GoTo 0
If rData Is Nothing Then Exit Sub 'No data
ReDim datas(1 To Intersect(rData, rData.Areas(1).Resize(, 1).EntireColumn).Cells.Count, 1 To rData.Columns.Count)
For Each rCell In rData.Cells
If lRow = 0 Then
lRow = rCell.Row
i = 1
ElseIf rCell.Row > lRow Then
i = i + 1
lRow = rCell.Row
End If
If lCol = 0 Or rCell.Column < lCol Then
lCol = rCell.Column
j = 1
ElseIf rCell.Column > lCol Then
j = j + 1
lCol = rCell.Column
End If
datas(i, j) = rCell.Value
Next rCell
'do stuff with your datas array variable here
End Sub
答案 1 :(得分:0)