ここから本文です

エクセルVBAが高速なPCを導入したいと考えております。

tat********さん

2020/5/2311:57:51

エクセルVBAが高速なPCを導入したいと考えております。

「現状」
使用PCは、ノートPC,Win7,CeleronB800(2C/2T),1.5GHz,4GB,300GB、
エクセル(2010)シートは、9400行*10列(内、4列は値、6列は数式)、
VBAでは、100万回位の繰返し計算をさせる。
220回/分位の実行速度なので、3日以上かかってしまう。
VBAの中で、シートの再計算や、WorksheetFunctionを実行する。
不要な再計算と画面表示は出来るだけ切って高速化済。
シートに計算させるので配列化はしていない。
その他に配列化する箇所は見当たらない。
タスクマネージャーで確認すると、
CPU使用率は2つとも70%位(シート計算はマルチコアCPU対応している?)、
物理メモリ使用率は2GB位。
他ソフトの起動は無し。

「エクセルVBAに対する認識」
最新のエクセル2019はマルチコアCPUに対応している。
シート計算は複数CPUを使用するが、
VBA自体はシングルCPUしか使用しない?

「質問」
つまり、以下の考え方で問題ないでしょうか?

エクセルシート計算速度を向上させる必要があるから→多コアCPU
VBA計算速度を向上させる必要があるから→高ベースクロックCPU
つまり、最新最速のCPUのパソコン?

補足皆さん、ご回答ありがとうございます。

新デスクトップパソコンを購入し、
複数のインスタンスでVBAを同時実行することにします。

閲覧数:
118
回答数:
7

違反報告

ベストアンサーに選ばれた回答

con********さん

2020/5/2312:05:04

Excelやvbaが実際
どれだけマルチコアを活かせるのかは知りませんが
およそ考え方は合っていると思います。

ただ、現在お使いのPC
スペックがかなり低いので
最新のものに買い替えなくても
ちょっと前のものや、
安めの物を買っても
十分に速度差を実感できると思いますよ。

  • 質問者

    tat********さん

    2020/5/2312:44:03

    ご回答ありがとうございます。
    又10年ぐらい使うつもりなので新品を導入したいと思っております。
    コスパが良さげなのはRyzen3800Xだと思ってます。

  • その他の返信(2件)を表示

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

ベストアンサー以外の回答

1〜5件/6件中

並び替え:回答日時の
新しい順
|古い順

アバター

ID非公開さん

2020/5/2723:41:40

サーバー機を使用したら?
そうすれば、CPUだって複数台搭載可能だし。

そもそも、VBAでする処理なのかが疑問。

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

nekozabutongさん

2020/5/2403:10:13

シート計算で循環計算をさせたいとかでしょうかね?

分布計算か行列計算かなんかでしょうか?
フラクタル計算も結構時間がかかりますが。

他の方も回答されているように、計算自体を早くしたいならVBAは止めるべきです。
フリーのC言語ツールでソースを書いて、CPUに最適化処理した実行ファイルで計算させた方が100倍くらい早いです。

循環計算だったとしたら、マクロの中にCalculateを書いて、そこの行を実行するときに計算がされるようにしますが、シート計算では「数式」の「計算方法の設定」で「手動」を選んでおくと計算のたびにいちいち画面を更新しないで内部で計算をしてくれます。その分圧倒的に早くなります。

循環計算の回数は1000回とか5000回等に適当に設定してCalculateが実行されたらその回数分循環計算されます。全部済んだらその結果も表示されます。その間は入力は受け付けられませんので、あまり沢山の回数を設定すると止められなくなります。

すぐ思いついたものをすぐ視覚化できるからエクセルは便利ですけど、程度ものですね。大量計算させるならどこかの時点でVBAとは違う計算に特化したツールを使った方が良いですよ。

全般的にマルチコアでかつクロックが速いと全体的にはその分計算が早くなりますが、裏で余計なことしてることもあるので、そういうのも全部止めたらさらに少し早くなると思います。

HDDのアクセスをさせているならそれが遅くなる原因でもあるので、SSDなどの個体メモリで作業させた方が良い場合もあります。

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

prwssさん

2020/5/2314:06:24

>9400行*10列(内、4列は値、6列は数式)
>100万回位の繰返し計算
>220回/分位の実行速度なので、3日以上


計算するのだけが目的なら、エクセルVBAを使うのをやめた方がいいです

おそらく、アルゴリズムを見直してPythonなどでやると十数分、C言語では数十秒で終わると思われます

***

エクセルは、数十万回以上の繰り返しの科学計算のようなものには向いてない、という認識です

すぐに計算結果が欲しいなら、「エクセルとVBAを使うのをやめる」となります

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

afou*******さん

2020/5/2313:33:01

ExcelVBAはマルチスレッドじゃないのでベースクロックの高い方
デカいファイルじゃなく計算処理が多いんだからメモリサイズなんて巨大である必要は無い(でも4GBじゃたりない)
仮想記憶を無しにしたら、待機してるだけの常駐プログラムにメモリ喰われるだけの本末転倒の愚策
仮想記憶の仕組みを知らない奴が言うこと

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

rat********さん

2020/5/2312:39:01

VBA自体はシングルCPUしか使用しない?

シングルCPUというより、シングルコアですね。
現在実際の実行単位は「スレッド」という単位です。
ホストコンピュータではタスクといい、実行する最小単位です。


で、VBAは、
マルチスレッドによる並列処理はサポートしていない。
つまり、順序良く直列に処理していくしか方法はありません。

そのため、多くの演算が必要な場合、
1)VBAからVBScriptを起動して時間のかかる処理を行い、その結果をエクセルで取得する

2)Excel以外の別アプリケーション(別プロセス)でExcelを起動させてブックを開き、列の操作を行う(OLEオートメーションという技術です)

OLE(Object Linking and Embedding )とは、Windowsの機能・仕様の一つで、複数のソフトウェアが連携したり、データを共有したりするための仕組み。
EXCELやWORDなどで利用可能。


3)Excelから別アプリケーションを起動して、列の計算は別アプリケーションで行い、結果をExcelに戻す(RFCという技術です)

RFC(Remote Function Call)とは、他のコンピュータにあるモジュール(サブルーチン)を起動し、実行させる機能。受け渡しパラメータが指定可能。

私は2)と3)の方法で、ある一部の業務を開発しました。
別アプリケーションはパソコンで実行するのではなく、サーバーで実行しています。


「質問」
つまり、以下の考え方で問題ないでしょうか?

エクセルシート計算速度を向上させる必要があるから→多コアCPU
VBA計算速度を向上させる必要があるから→高ベースクロックCPU
つまり、最新最速のCPUのパソコン?

いいえ、CPUだけではなく、
1.高速なCPU
2.高速・大容量のメモリ(RAM)<==16GB以上で、かつ「仮想記憶装置は使用しない」に設定変更すること
3.浮動小数点演算装置(FPU) <==数値の演算が多数ある場合
が必要だと思います。

https://ja.wikipedia.org/wiki/FPU

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる