- ベストアンサー
EXCEL(VBA)における次行遷移
- EXCELのVBAにて、EXCELの明細行の各項目のデータにより、メールを作成・表示して確認後に手作業でメールを送っています。
- マクロを実行する毎に該当する行・項目のデータで、次の行の処理待ちとするようにカーソルを遷移させています。
- しかし、フィルターを掛けた場合でも、遷移される行にフィルターの影響を受けないため、望む結果を得ることができません。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
こんばんは。 フィルタは「オートフィルタ」ですか、それとも「フィルタオプション」ですか? 「オートフィルタ」だと思って回答します。 以下のコードはシートの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
その他の回答 (1)
- imogasi
- ベストアンサー率27% (4737/17069)
初歩的なことを、なぜ聞くの判らない。質問を誤解しているかもしれないが。 >### 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 ーー >次行遷移 と言う放言も大げさ。「次の行の処理に移る」で良い。
補足
私の説明不足で、質問の意図が十ニ分に伝わらなかったようです。 質問に対する回答でなく、私にとって難解なアドバイスを頂き、 大変に申し訳有りません。
お礼
ありがとうございます。 私がやりたいのは、都度、フィルターを掛けても、 次の行への移動を有効にするやり方なのです。 お分かりでしょうか?