Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


7802 / 13644 ツリー ←次へ | 前へ→

【36768】For Eachの構文で逆方向から処理するには? カド 06/4/12(水) 22:54 質問[未読]
【36769】Re:For Eachの構文で逆方向から処理するに... Ned 06/4/13(木) 0:18 発言[未読]
【36784】Re:For Eachの構文で逆方向から処理するに... カド 06/4/13(木) 17:29 お礼[未読]

【36768】For Eachの構文で逆方向から処理するに...
質問  カド  - 06/4/12(水) 22:54 -

引用なし
パスワード
   以下のようなコードだと、offsetを使ってセルを一つ一つ移動していくより
高速に処理が出来ることを教わりましたが、ActiveCellからではなく
ActiveCell.End(xlDown)から処理を開始するにはどう書けばいいのですか?


  Set ACELL = Range(ActiveCell, ActiveCell.End(xlDown))
  
  For Each C In ACELL

【36769】Re:For Eachの構文で逆方向から処理する...
発言  Ned  - 06/4/13(木) 0:18 -

引用なし
パスワード
   こんにちは。
For Each...Nextでは無理だと思うのですが、
下記のような方法ではどうでしょう?

Dim ACELL As Range
Dim i As Long
Set ACELL = Range(ActiveCell, ActiveCell.End(xlDown))
For i = ACELL.Count To 1 Step -1
  Debug.Print ACELL.Cells(i).Address
Next i
Set ACELL = Nothing

処理内容にもよりますが、一旦配列にセットして、
セルへの書き出しを1回で済ますと高速化が図れますよ。
↓は、まだ試してもらってないかな?
http://www.vbalab.net/vbaqa/c-board.cgi?cmd=one;no=36764;id=excel

【36784】Re:For Eachの構文で逆方向から処理する...
お礼  カド  - 06/4/13(木) 17:29 -

引用なし
パスワード
   ▼Ned さん 回答ありがとうございます。
ただ今、高速化に取り組んでいたので、

>For i = ACELL.Count To 1 Step -1
のようなiを一つずつ変化させる処理は時間が掛かると思い込んでいましたが、
試してみると処理時間は変わりませんでした。

7802 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free