• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エクセルの処理が遅いのはPCのせいなのでしょうか?)

エクセルの処理が遅いのはPCのせい?

このQ&Aのポイント
  • エクセルの処理が遅い原因について検証しています。PCの性能やプログラムの影響を考慮し、処理速度向上の方法を教えてほしいとの質問です。
  • エクセルのユーザーフォームでコンボボックスを使用してデータを転記するプログラムを作成したところ、処理が非常に遅いです。PCのスペックや新しいPCの購入を検討しているが、プログラムの影響によるものであれば、処理速度を向上させる方法を知りたいとの質問です。
  • エクセルの処理が遅い原因について検証中です。IBMのPC330で動かしているが、PCの性能によるものか、プログラムの効率性に原因があるのかを知りたいとの質問です。処理速度の向上方法を教えてほしいとのことです。

質問者が選んだベストアンサー

  • ベストアンサー
  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.4

1データにつき同一範囲を参照する10個のVlookupがあり、 これが1日に100件分用意されており、1月分として31日分ある。合計、10×100×31=31000個のVlookupがあります。 入力ボタンを押すことにより、Vlookupで参照するデータの11項目を書き換えにいきますが、1項目の変更で31000回再計算されています。都合、341000回Vlookupを行っています。 これが原因ですね。Vlookupは特に遅く感じられますしほとんど止まった状態になると考えられます。 その他の問題点として、 ・月が変わるごとに初期化されると考えられますが、1件目の入力はダイアログボックスからはできない? ・1日の集計をしていても月末まで計算(累積)してしまっている ・苦労がExcelで『集計』することよりも『入力』になっている。 解決方法ですが、こういう日々増加していくデータをExcelで扱うのはかなりのテクニックがいります。 Accessを少し勉強すれば、苦労している入力部分、増加していくデータの集計、日計、月間計等は驚くほど簡単に実現できると思います。検索も簡単にできます。 Excelでの解決策としては、この作りのまま修正するとすれば、 日計表・集計表のC列にデータが入力されたら、WorkSheet_Chageイベント内で検索し日計表・集計表には検索結果を『値』として代入する方法が考えられます。 速度に関係していないと思われる箇所は余り見ていません。Vlookupを5行分くらいにしたら普通に表示されました。ザッと見た感じですが以上です。

noname#53281
質問者

お礼

Vlookupでしたか!構造的な欠陥があったんですね! やっぱりアクセスを使った方が良かったんですねェー。 (良くわかつてる人にはすごくあたりまえだったり・・するんでしょうね・・タブン) しかしnishi6さんは、すごいですね!!神様のように思えます。 『値』として代入する方法は、何とか参考書等で勉強してみます、わからない時はもう1度投稿したいと思います。 ナガナガ大変ありがとう御座いました。 以上

その他の回答 (3)

  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.3

ハフマンコード破損(異常)のメッセージが出ます。解凍できません。

noname#53281
質問者

補足

申し訳ありません 今度は確実に解凍できると思います(2度チエックしました)。 http://www.d2.dion.ne.jp/~souken/New.LZH なにとぞ、よろしくお願い致します。

  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.2

まず、ユーザーフォームを開いた時、『celrow』がどの時点で定義(値の確定が)されているか教えて下さい。 UserForm_Initialize()などでTextBox2にデータの最終行+1を入れるのかな・・・と思いますが。 TextBox2_Change()のエラールーティンは  Worksheets("その他データ").Cells(celrow, 2).Activate でcelrow=0の場合、    これは、SpinButton1のMin=0のため?(Min=1で回避?)  SpinButton1のMin、Maxの範囲外の値をTextBox2に入力した場合 に回避するためにあるようです。従って、極端に遅い原因とも考えにくいです。 次に、SpinButton1とTextBox1、TextBox2の関係が不明です。TextBox2はSpinButton1の値表示と値入力用みたいですがTextBox1はどのように関係しています? SpinButton1_Changeとかもあれば気になります。このあたりで何か起きている? 最後に、ComboBox1の1個だけで動かした場合も時間がかかるでしょうか。他のソフトを止めて試してみてはどうでしょうか。

noname#53281
質問者

補足

何がなんだか解らなくなってきたので、 出来ましたら、そのものを見てみ頂きたいのですが?下記のWWWに UPしましたよろしくお願い致します。 http://www.d2.dion.ne.jp/~souken/New1.LZH (413KB)です。データに個人情報がありましたので200人分削除した所 さらに(再計算と表示され)ものすごく遅くなりました。もう僕には手におえません、トホホ・・。 マクロでユーザーフォーム2です。

  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.1

同じ(ような)フォームを作って試してみました。(20個のComboBox、SpinButton、TextBox、CommandButton各1個) Pentium100、メモリ32MBでしたが入力ボタンを押した瞬間に処理は完了しました。最新のPCで行う必要もないような速度です。 何かコードに原因があるとすると、原因の調べ方ですが、  (1)セルに書き込む部分 .cells(・・・ の部分をコメント行にしてみる  (2)コンボボックスをクリアしている部分 .ComboBox・・・ の部分をコメント行にしてみる  (3)スピンボタン値の変更の部分をコメント行にしてみる  (4)テキストボックス値の変更の部分をコメント行にしてみる を順に行ってみて速度を比較してみてはどうでしょうか。どこが遅いか分かるかもしれません。 ComboBox1_Change、TextBox2_Changeなどがあって、足を引っ張っている可能性があります。 処理を何回もグルグル行っていた経験は何度もあります。 また、シートの方の問題として、再計算を行っている可能性はないでしょうか。再計算の負荷は内容が分からないので何とも言えませんが・・・ 一般的に、セルに書き込む時には  Application.ScreenUpdating = False で画面更新を止めて、書き込みが終ったら  Application.ScreenUpdating = True で更新させれば速くなりますが、この質問には関係ないかもしれません。計算を手動にしてみると効果があるかもしれません。 コントロールのクリアについては、 .ComboBox1.Text="" より、For Each を使ってクリアした方が速いかもしれませんが劇的には速くならないでしょう。 参考に投稿します。    

noname#53281
質問者

お礼

>TextBox2_Changeなどがあって、足を引っ張っている可能>性があります。 コレ見たいです! 教えていただいた(1)~(4)は、コメント行にして見たのですが大差なしでした。 ところが 下記の行を消すといきなりエラーになります デイバックを押すと「.Cells(celrow, 2)=ComboBox1.Text」の行が黄色に成ります、その都度「Private Sub TextBox2_Change()」に行く処理が足を引っ張ってるのではと思うのですが、どのようにしたら良いか解りません?僕の考えがまったく見当違いでなければ、 補足お願い致します。 Private Sub TextBox2_Change() ' On Error GoTo TRAP celrow = TextBox2.Text Worksheets("その他データ").Cells(celrow, 2).Activate SpinButton1.Value = TextBox2.Text ' Exit Sub 'TRAP: ' If TextBox2.Text <> "" Then ' MsgBox "入力が間違っています。やり直してください。" ' TextBox1.Text = "" 'End If TextBox2.SetFocus End Sub

noname#53281
質問者

補足

早速ご回答いただきありがとう御座います。 やっぱり何かが、足を引っ張っているんですね! ありがとう御座います。 今から試してみます、結果をご報告いたします。

関連するQ&A