アプリ版:「スタンプのみでお礼する」機能のリリースについて

セルが空白になるまで処理を繰り返すのはDo Loop等で出来ることがわかったのですが、
セルの空白が3連続するまで処理を続行したい場合の構文がわかりません。
ご教授ください。

A 回答 (3件)

おはようございます。



どの様なコードか不明ですが、例えば下記の様に記載でしょうか?

Dim I As Long
Do 
処理
I=I+1
Loop Until Cells(I,1).value & Cells(I+1,1).value & Cells(I+2,1).value = ""

Cells(I,1).value & Cells(I+1,1).value & Cells(I+2,1).value = ""
→A列の値を3つ&で繋いで、全て何もない:"" なら、処理を終了とか。

下記が参考になるかと
https://www.limecode.jp/entry/difference/dowhile …

一応、WhileとUntilは、Doにも、Loopにも付けられます。
Doにつけると、条件によっては1回も処理しない事もあります。
Loopにつけると、必ず1回は、処理する事になります。(Do Loop内の処理)

Do While~Loop 又は、Do ~ Loop While
Do Until~Loop 又は、Do ~ Loop Until
    • good
    • 0
この回答へのお礼

教えて頂いた方法で解決致しました。ありがとうございました。

お礼日時:2021/11/26 11:59

こんにちは



>構文がわかりません。
Do ~ Loop をお使いならば、Loopを抜け出す条件式を設定していると思いますけれど、その条件を目的に沿った内容にしておけばよいです。
Whileを用いるか、Untilを用いるかで条件式の書き方が若干変わるのはご存じですよね?
どちらでも、書きやすい方で記述すれば宜しいとは思いますけれど。


仮に、行番号をrw、列番号をcolという変数で表すなら、ご質問の条件の場合は、「rw~rw+2のセルが空白の時」となりますので、3つぐらいの数であればベタに
Cells(rw, col) = "" And Cells(rw + 1, col) = "" And Cells(rw + 2, col) = ""
という条件にしておいても宜しいでしょう。
(↑ 既出の回答と、ほぼ同じ内容です)

3つではなく、数が多いような場合は、上記のように連続して書くのもかったるいので、シート関数を利用するなどの方法も考えられるでしょう。
例えば、
WorksheetFunction.CountBlank(Cells(rw, col).Resize(3)) = 3
などのような記述方法です。
(↑は「空白セルの数がが3だったら」という意味になります)

他にもいろいろ考えられると思いますが、「目的とする条件に合う条件式で判断する」という点では同じですね。
    • good
    • 1
この回答へのお礼

解決致しました。色々応用力を身につけていきたいと思います。
ありがとうございました。

お礼日時:2021/11/26 12:01

空白行をカウントする数字変数をあらかじめ設定(仮に”kuhakugyo"とします)したうえでLOOPの中で次の行をいれればいいと思います。



・セルが空白かどうか判定させて、空白行ならばkuhakugyoに1を加え、空白行でなければkuhakugyoをゼロにする

・LOOPの最後にkuhakugyoが3ならばループをぬける
    • good
    • 2
この回答へのお礼

Sub 繰り返し仮()

Dim i As Integer, kuhakugyo As Integer
i = 2
kuhakugyo = 0

Do While kuhakugyo = 3

処理内容
If Range("A" & i).Value = "" Then
kuhakugyo = kuhakugyo + 1
Else
kuhakugyo = 0

End If

i = i + 1

Loop

End Sub

上記で実行したところ、エラーはでないのですが処理が実行されませんでした。どのあたりが間違っているか自己解決できませんでした。

お礼日時:2021/11/26 11:57

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

このQ&Aを見た人はこんなQ&Aも見ています