2016-04-05 5 views
0

Excelピボットテーブルから生成された80*15*5 = 6000データポイントのシートがあります。私はVisual Basic for ApplicationsVisual Basic.netでプログラミングするか、Excelの式で作業するかを選択する必要があります。すべてのデータを2つの異なる方法で分析しなければならず、さまざまなことを計算しなければならず、ユーザーはデータを知らなくても使いやすい方法で出力を生成できるはずです。ExcelデータベースのVBAとVB.netのパフォーマンス

ループ内にループ内のループがあり、VBAでは100秒、Visual Basic.netでは34個の小さなサンプルプログラムです。私はExcelの数式で作業するつもりなら、Excelにまだ存在しないので複数の関数をプログラムする必要もあります。今は別のプログラムでこれをやっていますが、これは私の会社のコンピュータでかなり遅いです。

実行時間によってVB.netを選択することができますが、外部VB.net作成プログラムでExcelデータベースに接続する必要がある場合は、これがさらに高速になりますか? VBAでこのデータを使用する比較的簡単な方法は、私がVBAを選択することを望んでいます。

上記の数式の8015が時間とともに大きくなる可能性があるため、Excel式での作業は最も便利な方法ではありません。

なぜ私はどのソリューションを選択すべきかについて、一般的に何か言いたいことはありますか?ダウン

+0

あなたは非常に非効率的である 'ループ内のループを持つ小さなサンプルプログラム 'に言及しています。具体的に何をしようとしていますか?代替案を提案できるように、コードとサンプルデータを期待した結果で投稿できますか?あるいは、CodeReviewのコードを改善して効率を上げることができますか?どんな解決策をとるべきかについてのあなたの非常に一般的な質問については、それ以上の情報なしで言うのは難しいです。しかしVB.Netはまだまだ速いですが、おそらくコードや数式をもっと効率的にすることができます。 – tigeravatar

+0

私は、あなたが最も快適で親しみやすいものを持っています。 Vb。NETは、最も柔軟で強力なはずですが、あなたがきれいなコードを書くことができなければ、それほど意味がありません。 – Plutonix

+0

小さなプログラムは、実行時間を比較するために作った無作為なものでした。プルトニック、それは理にかなっている。私はVBAに多くの時間を置いていましたので、それは私にとっては最も簡単ですが、私はVB.netの知識も向上させたいと思っています。 – Grafit

答えて

2

ハンズあなたは(非.NET)アプリケーションの「管理対象外」に接続するために、.NETを使用する場合、あなたははるかに積極的にあなただけのVBAに固執する場合よりもメモリを管理する必要がありますので、あなたは、VBAに固執すべきです。 Excelと.NETは、2つのアーキテクチャが通信できるように「ランタイムコールラッパー」を使用していますが、異なるメモリ管理メカニズムを使用しています。

特にExcelでは、多くのオブジェクトがメソッド呼び出しから返されますが、何もする必要はありません。これらを認識していない場合(そしてそれはかなり簡単です)、それらのオブジェクトはメモリに残り、.NETアプリケーションが終了した後もExcelを有効にします。これらすべてのオブジェクトの後にクリーンアップするには、System.Marshal.ReleaseComObject()への多くの呼び出しが必要です。

あなたが言及したパフォーマンスの問題(ループ内のループ)は、あらゆる言語でのプログラミングの習慣の悪いことです。このようなことをする必要はほとんどありません。もしあなたがそれをやっているのであれば、おそらくあなたのアプローチを再考すべきです。

さらに、VB.NETとVBAはまったく同じように見えますが、完全に異なる言語であることを理解することは非常に重要です。 VBAのベストプラクティスと一般的な手法をVB.NETに持ち越さないでください。 .NETに慣れていない場合は、最初に真剣に調査したいと思うでしょう。

.NETにExcelに行く唯一の理由は、.NETがVBAで手に入れることができない機能を提供している場合ですが、これはそうではないと考えられるので、VBAに固執しますはるかに簡単で、コードを適切に最適化する限り、長期的には効率的なソリューションです。

関連する問題