Excel VBA質問箱 IV

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

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


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

【36759】繰り返し処理が多いと、どうしてフリーズしていまうのでしょうか? カド 06/4/12(水) 16:54 質問[未読]
【36761】Re:繰り返し処理が多いと、どうしてフリー... Jaka 06/4/12(水) 17:15 発言[未読]
【36766】Re:繰り返し処理が多いと、どうしてフリー... カド 06/4/12(水) 21:02 お礼[未読]
【36767】Re:繰り返し処理が多いと、どうしてフリー... Hirofumi 06/4/12(水) 21:58 発言[未読]
【36770】Re:繰り返し処理が多いと、どうしてフリー... カド 06/4/13(木) 6:10 お礼[未読]

【36759】繰り返し処理が多いと、どうしてフリーズ...
質問  カド  - 06/4/12(水) 16:54 -

引用なし
パスワード
   前回の質問では質問内容が2つあったため、一方の質問に回答が集中してしまい、こちらの回答が得られなかったので、繰り返しになりますが質問させてください。

下記のようなコードで繰り返しの処理を行うと、パソコンがフリーズしてしまいます。
最大5万回の処理を5万回繰り返すので、結局5万*5万回になります。
回数は多いにしても、処理そのものはひとつづつ順次に行われるものだと勝手に思っています。
このような場合、どうしてPCがフリーズしてしまうのですか?


Sub データ取得1個()
  Dim Count, aaa As Long
  
  
  Set ACELL = ActiveCell '検索元
  Set BCELL = ActiveCell.Offset(0, -3) '検索先
  
  aaa = 50000  ’←処理数が2000ならまったく問題ない。
  
  Count = 0
  Count1 = 0
  
  Do Until Count1 = aaa '検索元を100行実行
  
    Do Until Count = aaa 'データベース(検索先)を100行検索

      If ACELL = BCELL Then '見つかった場合
        ACELL.Offset(0, 1) = BCELL.Offset(0, 1) 'データの書き込み
       
        Count = 0 '検索先のデータ検索数
        Exit Do
      Else '見つからなかった場合
        Set BCELL = BCELL.Offset(1, 0) '検索先を次に変更
        Count = Count + 1 '検索先のデータ検索数
        
      End If
    Loop
    
    Set ACELL = ACELL.Offset(1, 0)
    Set BCELL = ActiveCell.Offset(0, -3)
   
   Count1 = Count1 + 1 '検索元のデータ検索数
   Count = 0
  Loop

MsgBox aaa & "個処理が終了しました。"
End Sub

【36761】Re:繰り返し処理が多いと、どうしてフリ...
発言  Jaka  - 06/4/12(水) 17:15 -

引用なし
パスワード
   こんにちは。
全内容を把握してませんが...。
オートフィルタは使えそうにないですか?
また、計算方式を手動にしてみたらどうでしょうか?
オートフィルタで関数が使ってある場合、かなり速度が違います。

【36766】Re:繰り返し処理が多いと、どうしてフリ...
お礼  カド  - 06/4/12(水) 21:02 -

引用なし
パスワード
   ▼Jaka さん こんにちは。回答ありがとうございます。
今回の質問はどうすれば回避出来るのでしょう? と言うものではなく、
どうしてフリーズするのでしょうか? と言うものです。

お分かりでしたら、教えてください。

【36767】Re:繰り返し処理が多いと、どうしてフリ...
発言  Hirofumi  - 06/4/12(水) 21:58 -

引用なし
パスワード
   ▼カド さん:
>▼Jaka さん こんにちは。回答ありがとうございます。
>今回の質問はどうすれば回避出来るのでしょう? と言うものではなく、
>どうしてフリーズするのでしょうか? と言うものです。
>
>お分かりでしたら、教えてください。

[XL2000] オートメーションでセルの値の取得やコピーを繰り返すと応答しない
http://support.microsoft.com/kb/414107/ja

此れかも?

【36770】Re:繰り返し処理が多いと、どうしてフリ...
お礼  カド  - 06/4/13(木) 6:10 -

引用なし
パスワード
   ▼Hirofumi さん こんにちは 回答ありがとうございます。
なるほど、教えていただいた現象とよく似ていますが、Windows 9X系の場合と
書かれてました。
私はXPなので該当しないと思われます。

回避方法として、最初に配列にデータを読み込むと良いとありました。
事実、私の場合もこの方法で回避できました。

これまでは、配列にデータを読み込むとメモリーを消費するので、速いかも知れないが、
逆にフリーズしやすいのではと思っていました。

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