dポイントプレゼントキャンペーン実施中!

以下のマクロの問題点を教えていただきたいのです。
A列を上から順番に調べて、値が10のときだけBに分岐して処理を行い(処理の内容は省略してあります)、またAに戻って、空白のセルが見つかったら処理をやめる、というマクロです。
ところが、これを実行すると空白のセルが見つかってもマクロが止まりません。何が問題でしょうか。

Sub A()
Cells(1, 1).Select

A:
Do Until ActiveCell.Value = ""
If ActiveCell.Value = 10 Then
GoTo B
End If
ActiveCell.Offset(1, 0).Select
Loop

B:
ActiveCell.Offset(1, 0).Select
GoTo A

End Sub

A 回答 (3件)

こんにちは。



古いスタイルというか、スクリプト式の書き方ですね。

サンプルを出しておきます。

Sub B()
Dim i As Long
i = 1
  Cells(i, 1).Select 'あってもなくてもよい。
  Do Until Cells(i, 1).Value = ""
    If Cells(i, 1).Value = 10 Then
     '処理
      Cells(i, 1).Font.ColorIndex = 3 'フォントの色を変える
    End If
    i = i + 1
  Loop

End Sub
    • good
    • 0
この回答へのお礼

ありがとうございます。
こういったマクロの書き方を見ていると自分の書いたマクロがとても野暮ったく感じます。

お礼日時:2009/05/09 22:08

自分の書いたコードの添削を求めているのだろうが


私がいつも使うFor Next(一本やり)の方法が、良い点もあり書いておく。
Sub testA()
d = Range("65536").End(xlUp).Row
A:
For i = 2 To d
If Cells(i, "A") = "" Then Exit Sub
If Cells(i, "A") = 10 Then
Cells(i, "A").Offset(1, 0) = "aaa"
Next
End Sub
私はForNEXt->While->Do(2,3種類あり)の
順で使う。
Selectの多用は初心者くさい。むだの場合が多い。<ーーマクロの記録からのくせ?
ーー
添削的にやってみると
Sub testb()
Cells(1, 1).Select
Do Until ActiveCell.Value = "" '空白ならループを抜けて終了
If ActiveCell.Value = 10 Then '10なら
ActiveCell.Offset(0, 1) = ActiveCell + 1 '小生の勝手な部分
Else
'10でないなら何もしない。
End If
'どちらの場合(10でも無いとき、10の場合)とも下行を指す
ActiveCell.Offset(1, 0).Select
Loop
MsgBox "終了"
End Sub
ーーーー
自分の我流のコードを質問に書くだけでなく、したいことを文章で書くべきだ。それでコードの正否・適否は判断しやすくなる。
例えば上記で私が入れたコメントを整理して質問に文章で書くよう
なこと。
正直なところ質問のコードは我流と思う。他人のやVBAの解説書のコードを多数読んで経験をつむこと。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

>Selectの多用は初心者くさい。
ご指摘の通り、初心者です。
For Nextを使用したマクロはとても参考になります。
経験不足でなかなか発想が飛躍しないので、あのようなコードになってしまいます。
少しづつでも勉強していきたいと思います。

お礼日時:2009/05/09 14:00

無限ループになっているのでは?



空白が見つかりLoopを抜ける→B:以下が実行されて、セルが下にOffsetされ、また、A:に戻って処理が続行されてしまう。

下記のようにすれば良いのでは

Sub A()
Cells(1, 1).Select

A:
Do Until ActiveCell.Value = ""
If ActiveCell.Value = 10 Then
call b
End If
ActiveCell.Offset(1, 0).Select
Loop
End Sub

Sub B()
ActiveCell.Offset(1, 0).Select
End Sub
    • good
    • 0
この回答へのお礼

早速のご回答ありがとうございました。
ご指摘の方法でうまくできそうです。

お礼日時:2009/05/09 12:21

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!