2012-08-17 74 views
0

這段代碼將經過一個過濾的範圍,並只將可見單元插入到一個數組中(假裝列A已根據我的標準過濾)。但是,我真正想要做的是移動一列並將「B3」的內容插入我的數組而不是「A3」。我如何修改我的代碼?如何訪問Excel中過濾範圍之外的單元格內容?

For Each cell In Range.SpecialCells(xlCellTypeVisible) 
    Array1(i) = cell.Value 
    i = i + 1 
Next c 

我想是這樣數組1(I)=細胞(cell.Row,cell.Column + 1)。價值

回答

1
For Each cell In Range.SpecialCells(xlCellTypeVisible) 
    Array1(i) = cell.Offset(ColumnOffset:=1).Value 
    i = i + 1 
Next c 
+0

完全是我在找的,謝謝!偏移...必須記住那一個。 – phan 2012-08-17 18:37:53

1
For Each cell In Range.SpecialCells(xlCellTypeVisible) 
    Array1(i) = cell.Offset(0, 1).Value 
    i = i + 1 

Next c 
1

由於B列將是受與列A相同的過濾器,這裏是一個靈活的解決方案,允許您指定要使用的列:

Sub FilterColumn(ColumnNumber As Long) 
Dim LastRow As Long 
Dim rng As Range 
Dim rngVisible As Range 
Dim cell As Range 
Dim Array1() As Variant 
Dim i As Long 

With ActiveSheet 
    Set rng = .Columns(ColumnNumber) 
    LastRow = .Cells(.Rows.Count, ColumnNumber).End(xlUp).Row 
    On Error Resume Next 
    Set rngVisible = .Range(.Cells(2, ColumnNumber), .Cells(LastRow, ColumnNumber)).SpecialCells(xlCellTypeVisible) 
    On Error GoTo 0 
    If Not rngVisible Is Nothing Then 
     ReDim Preserve Array1(1 To rngVisible.Cells.Count) 
     i = 1 
     For Each cell In rngVisible 
      Array1(i) = cell.Value 
      i = i + 1 
     Next cell 
    End If 
End With 
End Sub 

對此列進行調用B:

FilterColumn 2 

作爲一個方面說明,我建議你不要使用Excel保留字作爲變量名。範圍是保留字。

+0

哎呀,我很欣賞爲我寫這篇文章的時間,但是Offset是我真正需要的。謝謝! – phan 2012-08-17 18:38:36

相關問題