Excel VBA質問箱 IV

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

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


24594 / 76732 ←次へ | 前へ→

【57486】特定の操作をすると処理速度が速くなる現象の原因の特定と対処方法を教えてください
質問  一子  - 08/8/27(水) 12:49 -

引用なし
パスワード
   はじめまして。一子と申します。
下記のような現象の原因が特定できず
今回、こちらに投稿させていただきました。
よろしくお願いします。

まったく同じ処理を、下記AとBの方法で実行した場合、
 A:Excelファイルを開いてからすぐに実行したとき
 B:任意のセルをダブルクリックしてから実行したとき
Bの方が処理速度が速くなるという現象が発生しています。

どうも、下記のような、セルの一文字ずつの書式を
判定する処理が入っているために
 .Characters(i, 1).Font.Underline
AとBで処理速度が変わってしまうということまでは分かったのですが、
これ以上の原因を特定することができません。

できれば、Aの場合でも、Bと同程度の速度で処理をさせたいため、
Bが速くなる(またはAが速くなる)原因と対処方法を
お教えいただけるとありがたいです。

【環境】
 XP、Excel 2000

【再現方法】
(1)1シートだけのExcelファイルを新規で作成します。

(2)シートのA1〜A5のセル一つずつに200文字程度の
  任意の文字列を入力します。

(3)同シート内にボタンを配置し、このボタンの
  クリック時イベントに下記の処理を記載します。
  ※実際の処理から現象の再現に必要な部分だけ抽出しています。

-----------------------------------------------------
Private Sub CommandButton1_Click()

  Dim startTime As Date
  Dim endTime As Date
  Dim i As Long
  Dim max_i As Long
  Dim startNum As Long
  Dim endNum As Long
  Dim targetCells As Range
  Dim rngTarget As Range
  Dim charUnderLine As Variant
  
  '処理の開始時間の取得
  startTime = Now()
  
  'シートの設定
  Dim sh As Worksheet
  Set sh = ThisWorkbook.Worksheets(1)
  
  '開始行番号の指定
  startNum = 1
  
  '終了行番号の指定
  endNum = 5
  
  '対象セル群の指定
  Set targetCells = sh.Range(sh.Cells(startNum, 1), sh.Cells(endNum, 1))

  For Each rngTarget In targetCells
  
    'セル内の文字数の取得
    max_i = Len(rngTarget)
    
    '一文字ずつ処理を行う
    For i = 1 To max_i

      '※この処理が処理速度に影響を与えているらしい
      charUnderLine = rngTarget.Characters(i, 1).Font.Underline
      
      'ステータスバーに処理行数と文字数を表示
      Application.StatusBar = rngTarget.Row & "/" & endNum & " 行目の " _
                  & i & "/" & max_i & "文字目を処理中です"
    Next i
    
  Next

  'ステータスバーの表示を初期化する
  Application.StatusBar = False
  
  '処理終了時間の取得
  endTime = Now()
  
  MsgBox ("処理終了!" & vbCrLf _
      & "処理にかかった時間:" & Format(endTime - startTime, "nn分ss秒"))
  
End Sub
-----------------------------------------------------

(4)作成したExcelファイルを保存し、一旦閉じます。
  他に開いているExcelファイルがあれば、それらも全て閉じます。
  (Excelのウィンドウも閉じてください)

(5)作成したExcelファイルを開き、ボタンをクリックします。
  私の環境では、処理が終了するまでに平均1分かかりました。

(6)次は、シートの任意のセルをダブルクリックして入力状態にします。
  特に何も入力せずセルの入力状態を解除します。
  この後にボタンをクリックします。
  (5)のときより処理速度が速くなっているかと思います。
  私の環境では、処理が終了するまでに平均12秒かかりました。

以上、何卒よろしくお願いします。

0 hits

【57486】特定の操作をすると処理速度が速くなる現象の原因の特定と対処方法を教えて... 一子 08/8/27(水) 12:49 質問
【57487】Re:特定の操作をすると処理速度が速くなる... mizunu 08/8/27(水) 14:55 回答
【57489】Re:特定の操作をすると処理速度が速くなる... 一子 08/8/27(水) 15:31 お礼
【57493】Re:特定の操作をすると処理速度が速くなる... mizunu 08/8/27(水) 19:10 回答
【57501】Re:特定の操作をすると処理速度が速くなる... 一子 08/8/28(木) 10:34 お礼

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