以下のマクロの問題点を教えていただきたいのです。
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
No.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
No.2
- 回答日時:
自分の書いたコードの添削を求めているのだろうが
私がいつも使う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の解説書のコードを多数読んで経験をつむこと。
ご回答ありがとうございます。
>Selectの多用は初心者くさい。
ご指摘の通り、初心者です。
For Nextを使用したマクロはとても参考になります。
経験不足でなかなか発想が飛躍しないので、あのようなコードになってしまいます。
少しづつでも勉強していきたいと思います。
No.1
- 回答日時:
無限ループになっているのでは?
空白が見つかり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
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- Excel(エクセル) B列に文字がはいったらA列に数字が入るマクロードを完成させたい 4 2023/04/21 01:58
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Visual Basic(VBA) ExcelVBAのマクロについて。 9 2022/05/04 14:50
- Visual Basic(VBA) Excelで下記のようにマクロを作ったところ、一回目は実行できたのですが、二回目以降「実行時エラー1 1 2022/03/25 08:08
- Visual Basic(VBA) VBAが止まります。 3 2022/08/31 14:09
- Excel(エクセル) エクセルでの左のセルのコピー 3 2022/07/25 12:31
- Visual Basic(VBA) VBAでoutlook365が起動しません。 4 2022/08/25 13:31
- Visual Basic(VBA) エラーコード1004 6 2022/06/09 14:12
- Visual Basic(VBA) サブフォルダ(データ)にある複数の.xlsxファイルのSheet3のA2セルの値で01から左側をB2 2 2022/08/14 15:46
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
LINEのこの空白ってどんな意味...
-
INDEXとMATCH関数で#N/Aが出る...
-
Excel計算式が入ってるセルを空...
-
Word ○(まる)で表示される空白
-
Wordの差し込み印刷で空白行が...
-
空白行があると #DIV/0なる?...
-
bashでの空白と空文字の判断
-
latexで、行の先頭に空白を入れ...
-
リンク貼り付けで空白セルが0表...
-
「 - 」と「 _ 」 の違い
-
エクセル 関数 他のセルの0を引...
-
EXCELのIF関数で
-
空白セルを作りたい
-
条件クリアの式
-
空白の行のことを
-
PowerPointの表内のカンマ
-
【VBA】PDF出力に任意のファイ...
-
Excelのテーブル上のセルの保護...
-
エクセルでセル内改行の1行目...
-
エクセルで「-3E+06」と...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
LINEのこの空白ってどんな意味...
-
Wordの差し込み印刷で空白行が...
-
INDEXとMATCH関数で#N/Aが出る...
-
Word ○(まる)で表示される空白
-
Excel計算式が入ってるセルを空...
-
bashでの空白と空文字の判断
-
エクセルでフッターに空白を入れる
-
「 - 」と「 _ 」 の違い
-
VBA ""が認識されないのはなぜ...
-
アクセスのクエリで空白を0と...
-
マクロ 空白セルまで繰り返す
-
エクセルで1つでも×か空白があ...
-
空白行があると #DIV/0なる?...
-
IF関数について
-
Excel関数で90%から110%の間を◎...
-
メモ帳のスクロールバーを変更...
-
latexで、行の先頭に空白を入れ...
-
仕事で使う数式を自分で作成で...
-
Wordの文字数カウント機能のス...
-
リンク貼り付けで空白セルが0表...
おすすめ情報