Excel VBA質問箱 IV

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

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


26620 / 76732 ←次へ | 前へ→

【55443】Re:Do Loop処理の負荷軽減策を教えてください
回答  Hirofumi  - 08/5/4(日) 16:16 -

引用なし
パスワード
   セルを1つづつ読み書きする事が非常に遅いので、こんな事をすると少しは速く成ると思います
全データを配列に取得し、其れを使って確保した結果出力用配列に処理を書き込みます
集計処理が終わったら結果用配列をシートに出力しています

Option Explicit

Sub ResetList2()

  Dim i As Long
  Dim lngRows As Long
  Dim rngList As Range
  Dim vntData As Variant
  Dim vntResult As Variant
  
  'データの先頭を基準とする
  Set rngList = Cells(1, 1)
  
  With rngList
    'データ行数を取得
    lngRows = .Offset(Rows.Count - .Row).End(xlUp).Row - .Row + 1
    If lngRows <= 1 And .Value = "" Then
      Set rngList = Nothing
      Exit Sub
    End If
    'データを配列に取得
    vntData = .Offset(, 2).Resize(lngRows + 1).Value
  End With
  
  '出力用配列を確保
  ReDim vntResult(1 To lngRows, 1 To 4)
  
  'データ全行に就いて繰り返し
  For i = 1 To lngRows
    vntResult(i, 1) = Left(vntData(i, 1), 1)
    vntResult(i, 2) = Mid(vntData(i, 1), 2, 1)
    vntResult(i, 3) = Mid(vntData(i, 1), 3, 1)
    vntResult(i, 4) = Right(vntData(i, 1), 1)
  Next i
        
  '集計結果を出力
  rngList.Offset(, 3).Resize(lngRows, 4).Value = vntResult
  
  Set rngList = Nothing
  
  MsgBox "リストのリセットが完了しました!!"
  
End Sub

1 hits

【55442】Do Loop処理の負荷軽減策を教えてください 新参者 08/5/4(日) 15:35 質問
【55443】Re:Do Loop処理の負荷軽減策を教えてくださ... Hirofumi 08/5/4(日) 16:16 回答
【55445】Re:Do Loop処理の負荷軽減策を教えてくださ... 新参者 08/5/4(日) 17:00 発言
【55447】Re:Do Loop処理の負荷軽減策を教えてくださ... Hirofumi 08/5/4(日) 17:35 発言
【55449】Re:Do Loop処理の負荷軽減策を教えてくださ... Hirofumi 08/5/4(日) 18:36 発言

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