今日はVBAについてになります。
最終的に欲しい結果を記載します。
■欲しい結果
掲題の件の通り、フィルタリング後、I列の1行目(見出し)から一つ下セルに移動して、
そのセルから、最終行まで選択して削除するVBAを作成すること。です。
■できているところ
I列から一つ下のセルを選択する箇所以外
■できていないところ
0. 上記記載のI1セルを選択する
VBA
1range("I1").select, range("A1").offset(0,8).select 2```など 30. その下のセルを選択する箇所 4色々調べていくうちに、.entireRow.HiddenやxlcelltypeVisibleなどが使えるようですが、よく分かりませんでした。 5 6VBAはまだ中級いくかいかないか、そんな程度です。 7 8■最後に、今のコードを記載いたします。 9フィルタ条件が"<1999/12/31"になっているのは、1900年代の値をプログラムが抽出するためです。この値が必要ないため、VBAでここを削除するつもりでいます。 10 11※下記の箇所がわからないところです。 12その下の、ForNextや他にもDoUntil,Whileなどももっと良い処理があればご教示いただけますと幸いです。 13ちなみに、範囲は固定ではありませんので、ループ処理を行っています。 14つまり、データ範囲は可変で、最終行がさらに大きくなる可能性があることを考えての処理に現在しています。 15 16よろしくお願いいたします。 17```VBA 18' ################ 19' ここから 20' ################ 21Range("A1").Activate 22Range("A1").Offset(0, 8).Select 23' ################ 24' ここまで 25' ################
```VBA Option Explicit Dim MaxRow As Long Dim MaxColumn As Integer Public Sub フィルターで1900年代の値は削除する() ' ' 1900年代の値は、更新日、公開日ではないため、削除する。 MaxRow = Range("A1").SpecialCells(xlLastCell).Row MaxColumn = Range("A1").SpecialCells(xlLastCell).Column 'フィルターが既に設定されている場合、解除をして処理を抜ける。 If ActiveSheet.AutoFilterMode = True Then Selection.AutoFilter Exit Sub End If ' フィルターが設定されていない場合の処理 If ActiveSheet.AutoFilterMode = False Then Range("A1").Select Selection.AutoFilter '"I9"列の値<1999/12/31より前の日付でフィルターを掛ける。 Range("A1").CurrentRegion.AutoFilter field:=9, Criteria1:="<1999/12/31", Operator:=xlAnd ' ################ ' ここから ' ################ Range("A1").Activate Range("A1").Offset(0, 8).Select ' ################ ' ここまで ' ################ Dim i As Long For i = 1 To MaxRow Step 1 If Cells(i, 9).EntireRow.Hidden = False Then Exit For End If i = i + 1 Next i ActiveCell.Select End If Range(Selection, Selection.End(xlDown)).Select ' 選択範囲をクリア Selection.ClearContents Selection.AutoFilter Range("A1").Select End Sub

回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/03/02 05:36