0

このコードは、フィルター処理された範囲を通過し、表示されているセルのみを配列に挿入します(列Aが私の基準に従ってフィルター処理されたふりをします)。しかし、私が本当にやりたいのは、1列をシフトして、「A3」ではなく「B3」の内容を配列に挿入することです。コードをこれに変更するにはどうすればよいですか?

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

Array1(i)= Cells(cell.Row、cell.Column + 1).Valueのようなものを考えていました。

4

3 に答える 3

1
For Each cell In Range.SpecialCells(xlCellTypeVisible)
    Array1(i) = cell.Offset(ColumnOffset:=1).Value
    i = i + 1
Next c
于 2012-08-17T17:44:14.307 に答える
1
For Each cell In Range.SpecialCells(xlCellTypeVisible)
   Array1(i) = cell.Offset(0, 1).Value
   i = i + 1

Next c
于 2012-08-17T17:46:31.290 に答える
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 の予約語を使用しないことをお勧めします。範囲は予約語です。

于 2012-08-17T18:15:18.477 に答える