Excelで自動フィルタを設定していて、1つの列のすべての可視データをVBAコードでループしたい場合、これを行う最も簡単な方法は何ですか?VBAでフィルタリングされたリストをループする最も簡単な方法は?
フィルタリングされた非表示の行はすべて含めてはいけません。したがって、上から下のプレーン範囲は役に立ちません。
いいアイデアはありますか?ありがとう。
Excelで自動フィルタを設定していて、1つの列のすべての可視データをVBAコードでループしたい場合、これを行う最も簡単な方法は何ですか?VBAでフィルタリングされたリストをループする最も簡単な方法は?
フィルタリングされた非表示の行はすべて含めてはいけません。したがって、上から下のプレーン範囲は役に立ちません。
いいアイデアはありますか?ありがとう。
A1
のセルにA2:A11
の数字が1つあり、autofilterが1であるとします。 5より大きい数値(つまり、6,7,8,9,10)のみを表示するようにフィルタを設定しました。
このコードはのみ可視セルを出力します:ちょうど見つけ
Sub SpecialLoop()
Dim cl As Range, rng As Range
Set rng = Range("A2:A11")
For Each cl In rng
If cl.EntireRow.Hidden = False Then //Use Hidden property to check if filtered or not
Debug.Print cl
End If
Next
End Sub
はおそらくSpecialCells
とのより良い方法があるが、上記エクセル2003年に私のために働いた
EDIT
より良い方法::
Sub SpecialLoop()
Dim cl As Range, rng As Range
Set rng = Range("A2:A11")
For Each cl In rng.SpecialCells(xlCellTypeVisible)
Debug.Print cl
Next cl
End Sub
A1のフィルタリングされたデータを下向きに仮定する1つの方法。
dim Rng as Range
set Rng = Range("A2", Range("A2").End(xlDown)).Cells.SpecialCells(xlCellTypeVisible)
...
for each cell in Rng
...
私はこの例
Option Explicit
Sub Sample()
Dim rRange As Range, filRange As Range, Rng as Range
'Remove any filters
ActiveSheet.AutoFilterMode = False
'~~> Set your range
Set rRange = Sheets("Sheet1").Range("A1:E10")
With rRange
'~~> Set your criteria and filter
.AutoFilter Field:=1, Criteria1:="=1"
'~~> Filter, offset(to exclude headers)
Set filRange = .Offset(1, 0).SpecialCells(xlCellTypeVisible).EntireRow
Debug.Print filRange.Address
For Each Rng In filRange
'~~> Your Code
Next
End With
'Remove any filters
ActiveSheet.AutoFilterMode = False
End Sub
これは問題を解決する良い方法です。私はあなたのアプローチが好きです。 –
良い溶液Sid。しかし、私は 'SpecialCells'を使用する際には非常に注意が必要です。私は最近Excelが(連続した外観に基づいて)これらのセルの '.Address'を送信する方法のために問題に直面しました。 –
@PankajJaju:申し訳ありませんが、私はあなたを取得していません。何を意味するのか説明していただけますか?おそらく例をもって? –
Call MyMacro()
ActiveCell.Offset(1, 0).Activate
Do Until Selection.EntireRow.Hidden = False
If Selection.EntireRow.Hidden = True Then
ActiveCell.Offset(1, 0).Activate
End If
Loop
です。コードが何をしているか説明しておくと便利です。 –
すべての答えてくれてありがとうを参照してください。ヘッダ行1であると仮定
Offset
を使用することをお勧めします!彼らは多かれ少なかれ同じものでした(SpecialCells(xlCellTypeVisible)を使って私が必要としていたキーでした)ので、どの答えが正しいかを選ぶのは難しいです。 – mattboy