[[20220119214104]] 『Do While 〜とLastRowを組み合わせて使いた』(疑問) >>BOT

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『Do While 〜とLastRowを組み合わせて使いたい』(疑問)

教えて下さい。
今のマクロは下記のように、
3列目の値が空欄でない所まで処理を続けるようにしていますが、

row = 2
Dim st As Worksheet
Do While st. Cells(row, 3).Value < > " "
  処理

     row = row + 1
Loop

3列目の途中に空欄があったりすると最後まで処理されないので、
Lastrowと組み合わせて、3列目に値が入っている最終行まで…のように書いて
試しているのですが、エラーになります。やはり、この書き方はおかしいでしょうか?

Do While st. Cells(Rows.count, 3).end(xlUp).row

例えば、変数にLastRowを取得して、
For i = 2 To LastRow
のように、For Next〜でやれば出来たのですが、なぜか時間がかかるので、
Do Whileで出来たらやりたいな…と思っているのですが。

まだまだ勉強し始めで手探りです。
宜しくお願いします。

< 使用 Excel:Excel2016、使用 OS:Windows10 >


 Whileの後は条件式です。

 Do While row <= LastRow

 です

 >For Next〜でやれば出来たのですが、なぜか時間がかかるので、
 ちゃんと動くようになってから速度比較してください。
 For Next と Do While で同じ処理をすれば、
 速度はほぼ変わらないか、わずかに For Nextの方が有利だとおもいます
(´・ω・`) 2022/01/19(水) 22:55

 おおざっぱですが

 エクセルが自動でカウントしてる物とそうでない物の違いでは?
 独自にカウントアップする処理を1つ入れただけでも違います。

 Sub tt1()
 st = Now()
 Do
    i = i + 1
 Loop Until i = 100000000
 MsgBox Format(Now() - st, "h:s:00")
 End Sub

 Sub tt2()
 st = Now()
 Do
    i = i + 1
    n = n + 1
 Loop Until i = 100000000
 MsgBox Format(Now() - st, "h:s:00")
 End Sub
(オアシス) 2022/01/19(水) 23:14

 これ書かないとだめだった?
 for 〜 next の方が速いです。

 >For Next〜でやれば出来たのですが、なぜか時間がかかるので

 なんかやってそうなので。
 途中で i とかの変数に横やり入れてませんかね?

(オアシス) 2022/01/19(水) 23:29


(´・ω・`)様、オアシス様
ありがとうございます。
条件式にしないとダメだったのですね。。

そして、For nextの方が早いのですね。

〉途中でiを横やりしていないか…
他の人が作ったマクロに、編集加えようとしています。
Callで入り組んでいる複雑なコードなので、その可能性大です。。

上記、試して検証してみます。
色々と参考情報ありがとうございました!非常に勉強になります。
(疑問) 2022/01/20(木) 05:52


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.