VBAオートフィルタの影響を受ける可能性のあるアクションを「指示する」または実行しようとしない限り、オートフィルタは気にしません。
あなたの上記のコードは、「入力」シートだけでなく、どのシートでも機能します。ここで
は、それが見事に働く別の方法は、それが動作しない場合
'~~> Remove any filters
ActiveSheet.AutoFilterMode = False
'~~> Filter, offset(to exclude headers) and delete visible rows
With rRange
.AutoFilter Field:=1, Criteria1:=strCriteria
.Offset(1, 0).SpecialCells(xlCellTypeVisible).EntireRow.Delete
End With
'~~> Remove any filters
ActiveSheet.AutoFilterMode = False
そして、ここではシナリオです(実際には、私はそれをすべての時間を使用する)です。
グラフには、オートフィルタによってフィルタリングされたデータは表示されません。しかし、グラフには隠れた行にあるデータも表示されません。 これは、図表にデータを表示するVBAと非VBAの両方の方法に適用されます。
が、私はautofilerは、それが台無しに適用される特定の細胞への書き込みしようとした場合。
は、それはあなたがそれを書いている方法と場所によって異なります。
これは非常にうまく動作します。以下のコードでは、行はフィルタされて表示されていません。しかし、私たちはまだそれに書き込むことができます。
Option Explicit
Sub Sample()
Dim rng As Range
Set rng = Sheets("Sheet1").Range("A1")
rng.AutoFilter Field:=1, Criteria1:="<>1", Operator:=xlAnd
rng.Offset(1, 0).Value = "Sidd"
End Sub
今度は、別のケースを見てみましょう。 これは動作しません。 A2からA10(A1はヘッダー)の範囲が1から3までのさまざまな値を持つとしましょう。次に、A2:A10のすべての値を1000と置き換えます。このコードでは、オートフィルタがあります。それはすべての細胞を変更することはありません。
Option Explicit
Sub Sample()
Dim rng As Range
Set rng = Sheets("Sheet1").Range("A1:A10")
rng.AutoFilter Field:=1, Criteria1:="<>1", Operator:=xlAnd
rng.Value = "1000"
End Sub
"1"(つまり、除外された行)を持ち、残りの行に書き込むセルを無視するのはなぜですか?実際にはそれはヘッダーと同様につまずく???
それは非常に簡単です。オートフィルタを使用するというアイデアは、私たちの要件(現時点では、データが<> 1)に応じて関連するデータを取得します。rng
の範囲に書き込むと、その範囲内の見えるセル(ヘッダーを持つセルを含む)に書き込まれます。
この場合、私たちは何をしますか?
次の2つのオプション
1)オートフィルタを削除する必要があります - あなたがあなたの中で行ったように、バックフィルタを入れて
Sub Sample()
Dim rng As Range
Set rng = Sheets("Sheet1").Range("A1:A10")
'~~> Put Filter
rng.AutoFilter Field:=1, Criteria1:="<>1", Operator:=xlAnd
'~~> Remove Filter
ActiveSheet.AutoFilterMode = False
'~~> Write value to the cells (See how we ignore the header)
Sheets("Sheet1").Range("A2:A10").Value = "1000"
'~~> Put Filter back
rng.AutoFilter Field:=1, Criteria1:="<>1", Operator:=xlAnd
End Sub
2)ループ範囲 - 必要なアクションを実行します。を質問
Sub Sample()
Dim rng As Range, cl As Range
Set rng = Sheets("Sheet2").Range("A1:A10")
rng.AutoFilter Field:=1, Criteria1:="<>1", Operator:=xlAnd
For Each cl In rng
'~~> Ignoring the Header
If cl.Row <> 1 then _
cl.Value = "1000"
Next
End Sub
あなたは上記のコードを実行すると、ヘッダーを除くすべてのセルに書き込みます。
Excelの組み込みヘルプを読み、オートフィルタの実際の動作を理解することをお勧めします。そうすれば、オートフィルタがオンになっているシートの処理に役立ちます。
HTH
は同様にあなたがそれに取り組んでいる一方で、...「ケア」を定義する定義「台無し」... –
フィルター行は魔法のように消えません - あなたはthrought visibe細胞を反復処理したい場合は、 Googleの "vba可視セル"など...私は隠されたセルに書き込むことについてはわかりませんが、それが問題であれば、あなたもgoogle "vba clear autofilter"することができます... – Aprillion
私のクエリは基本的にユーザーはオートフィルタを使用して入力と出力のシートを隠すことができます(データを読みやすくするために彼はそれを行います)...しかし、私はvbaがオートフィルターを気にしないように、何も触れられていないかのように動作するはずです... –