こんばんは。
フィルタは「オートフィルタ」ですか、それとも「フィルタオプション」ですか?
「オートフィルタ」だと思って回答します。
以下のコードはシートの1行目が項目行で、A列に0以上1以下のランダムな数値が入っており、
オートフィルタをかけて0.5より大きいものを取り出し、可視セル(フィルタで取り出された行)の
アドレスをイミディエイト・ウィンドウに表示するものです。
ご要望のことは、可視セルの取り出しと、For Eachで解決するものと思われます。
Option Explicit
Sub test()
Dim WS As Worksheet
Dim MyR As Range
Dim TargetRng As Range
Dim MyC As Range
Set WS = ActiveSheet
WS.AutoFilterMode = False
Set MyR = WS.Range("A1").CurrentRegion
MyR.AutoFilter Field:=1, Criteria1:=">0.5"
Set TargetRng = MyR.Resize(MyR.Rows.Count - 1, 1).Offset(1).SpecialCells(xlCellTypeVisible)
WS.AutoFilterMode = False
For Each MyC In TargetRng
Debug.Print MyC.Address
Next
End Sub
初歩的なことを、なぜ聞くの判らない。質問を誤解しているかもしれないが。
>### Outlookのオブジェクトを作成後、メールを新規作成する
の方がよほど高等な技術ではないかな。この点と質問のレベルがアンバランスだと思うので。これはエクセルVBAのVBE画面で出来ますが、エクセルVBAといえるものはないでしょう。どちらかと言えばOutlookのVBAでしょう。
WEBのOutlookで送信する記事を丸ごとコピーしたのかな。
ーーー
やり方として
データ最終行を察知し、そこまで各行でメイル文くみたてと送信処理を繰り返す。
そのとき>ある項目でフィルターを掛けて、をするためにIF文で除外文に当たるか聞いて、該当の文は何もしないで次に行けば仕舞い。
「フィルタをかけて」、と難しくする必要は無いでしょう。
もちろんフィルタをかけて、見えている行だけを対象に処理を繰り返すコードも書けるが。
Sub test01()
d = Range("A65536").End(xlUp).Row
MsgBox d
For i = 2 To d
If Cells(i, "C") = "xx" Then '条件はC列がxxの場合送信しないという例
'何もしない
Else
'メイル文作成、送信
MsgBox Cells(i, "A") 'テスト確認用
End If
Next i
End Sub
ーー
>次行遷移
と言う放言も大げさ。「次の行の処理に移る」で良い。
お礼
ありがとうございます。 私がやりたいのは、都度、フィルターを掛けても、 次の行への移動を有効にするやり方なのです。 お分かりでしょうか?