こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

EXCEL(VBA)における次行遷移

いつもお世話になっています。

EXCELのVBAにて、
EXCELの明細行の各項目のデータにより、
メールを作成・表示して確認後に手作業でメールを送っています。
実際には、マクロを実行する毎に該当する行・項目のデータで、
作成したあとは、次の行の処理待ちとするようにカーソルを遷移させています。

ただ、ある項目でフィルターを掛けて、
該当のデータのみを次々とメールを送りたいのですが、
単純な次行遷移だと、
フィルターの掛かっていないデータ(行)を含めて、
遷移されますので、思いの通りとなりません。

どのようなVBAの修正をすれば可能なのでしょうか?
(メール作成の部分の詳細は割愛しています)

教えて下さい。
よろしくお願い致します。

***

Sub DISPLAY()

Dim i As Long
i = ActiveCell.Row

'### Outlookのオブジェクトを作成後、メールを新規作成する
:
:

'### メールを送信前表示
myDATA.DISPLAY

'### 次行へ遷移
Cells(i + 1, 1).Select

End Sub

***

投稿日時 - 2011-01-12 12:03:43

QNo.6442441

すぐに回答ほしいです

質問者が選んだベストアンサー

こんばんは。

フィルタは「オートフィルタ」ですか、それとも「フィルタオプション」ですか?
「オートフィルタ」だと思って回答します。

以下のコードはシートの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

投稿日時 - 2011-01-12 18:16:02

お礼

ありがとうございます。
私がやりたいのは、都度、フィルターを掛けても、
次の行への移動を有効にするやり方なのです。
お分かりでしょうか?

投稿日時 - 2011-01-18 09:44:17

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

初歩的なことを、なぜ聞くの判らない。質問を誤解しているかもしれないが。
>### 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
ーー
>次行遷移
と言う放言も大げさ。「次の行の処理に移る」で良い。

投稿日時 - 2011-01-12 19:54:03

補足

私の説明不足で、質問の意図が十ニ分に伝わらなかったようです。
質問に対する回答でなく、私にとって難解なアドバイスを頂き、
大変に申し訳有りません。

投稿日時 - 2011-01-18 09:43:00

あなたにオススメの質問