Excel VBA質問箱 IV

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

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


165 / 13645 ツリー ←次へ | 前へ→

【81708】RoundUp関数の処理が重くなってしまう rau 21/4/1(木) 10:33 質問[未読]
【81711】Re:RoundUp関数の処理が重くなってしまう 山内 21/4/1(木) 17:47 回答[未読]
【81712】Re:RoundUp関数の処理が重くなってしまう 山内 21/4/1(木) 18:09 発言[未読]

【81708】RoundUp関数の処理が重くなってしまう
質問  rau  - 21/4/1(木) 10:33 -

引用なし
パスワード
   RoundUp関数を用いて、J列に並んでいる1,1,1,1, 1.222, 2,2,2,2,2…といった感じに整数の間にたまに小数まじりが出てくる数値の小数点を切り上げたいと考え、下記のマクロを作成しました。

’J列に並んでいる数値を小数点切り上げる
Dim m, o
For m = 2 To Worksheets("Sheet2").Cells(Rows.Count, 10).End(xlUp).Row
o = Cells(m, 10).Value
Cells(m, 10).Value = Application.WorksheetFunction.RoundUp(o, 0)
Next m

J列の最終行(=ⅿ)が大体50,000程度あり、PCのスペックが足りないのか処理落ちして固まってしまいます。

Ifの条件分岐で整数ならば何もしない、小数ならばRoundUpで整数に丸める、といった風に出来るのでしょうか?
何か良い案があれば教えて欲しいです。
宜しくお願い致します。

【81711】Re:RoundUp関数の処理が重くなってしまう
回答  山内  - 21/4/1(木) 17:47 -

引用なし
パスワード
   50000行ものセルをいちいち書き換えてたら条件付をしてもかなり重いです
配列を使いましょう

Sub Sample()
  Dim v As Variant
  Dim i As Long, r As Long
  With Worksheets("Sheet2")
    r = .Cells(Rows.Count, 10).End(xlUp).Row
    v = .Range("J2:J" & r)
  End With
  
  For i = 2 To UBound(v)
    If v(i, 1) - Int(v(i, 1)) > 0 Then
      v(i, 1) = Int(v(i, 1)) + 1
    End If
  Next
  
  Range("J2:J" & r) = v
  
End Sub

【81712】Re:RoundUp関数の処理が重くなってしまう
発言  山内  - 21/4/1(木) 18:09 -

引用なし
パスワード
   訂正
For i = 2 To UBound(v)

For i = 1 to UBound(v)

Range("J2:J" & r) = v

WorkSheets("Sheet2").Range("J2:J" & r) = v
に書き換えてください

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