• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:[エクセル]VBA連続処理を途中でストップさせたい)

[エクセル]VBA連続処理を途中でストップさせたい

このQ&Aのポイント
  • エクセルのVBAで連続処理を途中で自動的にストップさせる方法を教えてください。
  • Aシートの指定行まで自動的に処理が進むVBAですが、B~Gのセルに数値が入っていない行で処理を停止させたいです。
  • 具体的な記述方法を教えてください。

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

  • ベストアンサー
  • piroin654
  • ベストアンサー率75% (692/917)
回答No.1

以下のようなこと? >If Range("B3").Offset(i, 0).Value = Empty Then GoTo Skip If Range("B3").Offset(i, 0).Value = Empty Then Exit For

その他の回答 (3)

  • imogasi
  • ベストアンサー率27% (4737/17070)
回答No.4

参考 上から1行ずつ全行処理していくのだと思うが、Offsetを使わずに質問の回答(掲出コード修正を希望)とは別に Sub test01() d = Range("B65536").End(xlUp).Row For i = 3 To d For j = 2 To 7 'B列からG列まで x = Worksheets("Sheet1").Cells(i, j) If x <> "" And IsNumeric(x) Then Else MsgBox i & "行以下処理せず 終了" Exit Sub End If Next j MsgBox i & "行を処理" 'ここに1行分の処理を入れる Next i End Sub のようなのを勉強したら。 ほとんどの場合、この方式で処理できる。 ーー >B~Gのセルに数値が入っていなかった場合 ・B-G列のすべての列が空白の場合なのか ・1つの列のセルでも空白なのか 質問ではっきりしない。 こういうことをはっきり表現できる思考と表現になれないとだめです。 すべての列の空白を条件にするなら(途中でストップにしてないが) Sub test02() d = Range("B65536").End(xlUp).Row For i = 3 To d With Range(Cells(i, 2), Cells(i, 7)) If WorksheetFunction.CountBlank(.Cells) = .Count Then MsgBox i & "行は全て空白です" Else MsgBox i & "行を処理" End If End With Next i End Sub のような方法もある。 http://park11.wakwak.com/~miko/Excel_Note/15-04_celldata.htm#15-04-64 ーーー 以前の回答の方法は難しい方を選んでいるように思う。自分との相性や自分の力に左右されるものだが。 課題にVBAで当たるには、もう少し勉強してからでないと、質問が続き。回答も質問者に誤解されかれない恐れがある状態のようだ。

Cuty_Cat
質問者

お礼

ご回答ありがとうございます。 私にはVBAの知識がないため、自分で記述をする事ができないレベルです。 「B~Gのセルに数値が入っていなかった場合」についてですが、これはB~Gの一部のセルにも空白だった場合と言う事でした。 単純にBのセルのみと言う事でも大丈夫です。 言葉足らずで申訳ありませんでした。 imogasi様が提案された記述の方が処理が早いでしょうか? 空白セルがあった場合の、メッセージボックスは出さなくても良いと思っています。 質問の記述にもありましたように、Aシートの数値を参考にして、Bシートで計算をして、Bシートの結果をAシートに自動に記載する。そして、また次の行も同様に処理していくといった感じです。 より処理速度が早くなる記述があれば、アドバイスを頂けると助かります。

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.3

追加のマクロでカンマが入っていました。次のように訂正します。 If WorksheetFunction.Count(Range(Cells(i,2),Cells(i,7)))=0 Then Exit For

Cuty_Cat
質問者

お礼

ご回答ありがとうございます。 ----------------------- Sub kaiseki() For i = 0 To 9 Sheets("Aシート").Select If WorksheetFunction.Count(Range(Cells(i,2),Cells(i,7)))=0 Then Exit For If Range("B3").Offset(i, 0).Value = Empty Then GoTo Skip Worksheets("Bシート").Range("B11:G11").Value = Worksheets("Aシート").Range("B3:G3").Offset(i, 0).Value ----------------------- または ----------------------- Sub kaiseki() For i = 0 To 9 Sheets("Aシート").Select If WorksheetFunction.Count(Range(Cells(i,2),Cells(i,7)))=0 Then Exit For Worksheets("Bシート").Range("B11:G11").Value = Worksheets("Aシート").Range("B3:G3").Offset(i, 0).Value ----------------------- と、上記のように両方試してみましたが、「アプリケーション定義またはオブジェクト定義~」などとエラー表示され動作しませんでした。 最初にアドバイスして頂いたように、下記のように記述したら空白セルの行で処理がストップしたのですが、No3の回答の記述と何が違うのでしょうか? 一応、下記の記述で途中で処理をストップさせる事ができたのですが、No3では違う記述を提案されているので、どちらが良いのかアドバイスを頂ければ助かります。 ----------------------- Sub kaiseki() For i = 0 To 9 Sheets("Aシート").Select If Range("B3").Offset(i, 0).Value = Empty Then Exit For Worksheets("Bシート").Range("B11:G11").Value = Worksheets("Aシート").Range("B3:G3").Offset(i, 0).Value -----------------------

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.2

次のように追加すればよいでしょう。 For i = 0 To 9 Sheets("Aシート").Select If WorksheetFunction.Count(Range(Cells(i,2),Cells(i,7)))=0,Then Exit For

関連するQ&A