Do Untilは、条件がそろったらそれ以降は実行されないという性質があるため、A9セルが空欄の場合でもマクロが実行されてしまいます。対処法として、Do Untilの条件文にA9セルが空欄でないことを追加することで、マクロの実行を制御することができます。
前判断処理 Do untilの動作について
excel2010
前判断処理 Do Untilの処理について教えてください。
A7セル,A8セル…とデータが入っていて、そのセルのデータをA6セルにコピーしてマクロを実行します。
このマクロは、ピポットテーブルのグラフを作成し、A6セルに入った文字列にシート名称を
変更するという内容になっています。
詳細内容は省きます。
A7セルのデータをA6セルにコピーしマクロ実行
A8セルのデータをA6セルにコピーしマクロ実行
…
Anセルのデータが空欄であったらマクロ実行しない
という様にしたいのです。
Sub tsumiage2()
Dim 行番号 As Integer
行番号 = 7
Do Until Cells(行番号, 1).Value = ""
If Cells(行番号, 1).Value = "" Then Exit Do
Sheets("(5)人別積み上げ").Select
Range("A6") = Cells(行番号, 1).Value
macro41
行番号 = 行番号 + 1
Loop
End Sub
サンプルデータでA7セル,A8セルにデータが入っていて、A9セルが空欄の時、
A7セルをA6セルへコピーしてマクロ実行。
A8セルをA6セルへコピーしてマクロ実行。
A9セルをA6セルへコピーしマクロが実行されエラーのポップアップが出てしまいます。
Do Untilは、条件がそろったらそれ以降は実行されない
というのを調べたのですが、A9セルが空欄でマクロが実行されるのは何故でしょうか?
対処法についても教えていただきたく。
こんばんは!
憶測ですが・・・
A9セルは空白に見えても何らかのデータが入っている可能性はないでしょうか?
仮にスペースが入っているとか。
試しにデータ範囲を選択して↓のマクロを実行してみてください。
Sub Sample1()
Dim c As Range
For Each c In Selection
If c = "" Then Exit For
Next c
On Error Resume Next
MsgBox c.Address(False, False)
End Sub
※ A9セルも範囲指定できていてメッセージボックスに「A9」が表示されない場合は
何らかのデータが入っているコトになります。
※ 余計なお世話かもしれませんが、
>Do Until Cells(行番号, 1).Value = ""
としていますので、
>If Cells(行番号, 1).Value = "" Then Exit Do
は不要だと思います。m(_ _)m
質問者
お礼
補足を入力した後に、ふと気づきました。
A8セルをA6にコピーした後のmacro41の動作で新規シートが作成され、そのシート上でA9セルにデータが入っているのが原因でした。
macro41の前に
If Cells(6, 1).Value = "" Then Exit Do
でもよかったのですが、かっこ悪いので
Do Until Sheets("(5)人別積み上げ").Cells(行番号, 1).Value = ""
としました。
ヒントいただきありがとうございました(*^。^*)
質問者
補足
回答ありがとうございます。
A7:A8セルを選択してSample1実行→変化なし
A7:A9セルを選択してSample1実行→A9のポップアップメッセージが表示されます。
A9は空欄だと思います。
If Cells(行番号, 1).Value = "" Then Exit Do
は、空欄だったらマクロを実行しないのを徹底したかったのです。
※
tsumiage2マクロでmacro41をコメントにして実行すると、A6セルはA8の内容で終了します。
しかし、macro41を実行した場合、A6セルは空欄で終了します。
A9セルをA6セルへコピーしているからです。
不思議です?
macro41の前に
If Cells(6, 1).Value = "" Then Exit Do
を追加したらエラー出なくなったので、とりあえずこれで運用します。
お礼
補足を入力した後に、ふと気づきました。 A8セルをA6にコピーした後のmacro41の動作で新規シートが作成され、そのシート上でA9セルにデータが入っているのが原因でした。 macro41の前に If Cells(6, 1).Value = "" Then Exit Do でもよかったのですが、かっこ悪いので Do Until Sheets("(5)人別積み上げ").Cells(行番号, 1).Value = "" としました。 ヒントいただきありがとうございました(*^。^*)
補足
回答ありがとうございます。 A7:A8セルを選択してSample1実行→変化なし A7:A9セルを選択してSample1実行→A9のポップアップメッセージが表示されます。 A9は空欄だと思います。 If Cells(行番号, 1).Value = "" Then Exit Do は、空欄だったらマクロを実行しないのを徹底したかったのです。 ※ tsumiage2マクロでmacro41をコメントにして実行すると、A6セルはA8の内容で終了します。 しかし、macro41を実行した場合、A6セルは空欄で終了します。 A9セルをA6セルへコピーしているからです。 不思議です? macro41の前に If Cells(6, 1).Value = "" Then Exit Do を追加したらエラー出なくなったので、とりあえずこれで運用します。