役立つTipsを紹介します。Tipsを追加していく予定です。VBAを使いやすくするためのTips私は以前からVBAに興味は持っていましたが、なかなかコーディングができるようになりませんでした。以下の点を意識するようになってから、様々なコーディングが非常にやりやすくなりました。して上述の設定方法等少し詳しく整理します。以下のようなデータを一旦配列に格納したいという場合の設定について、以下一例を記載します。コード例Debug.Printで複数点抜き打ちで結果を確認するようにしています。私は都度書くのが面倒なので、よく使う関数はVBAで登録しています。以下登録例▼よく使う関数一覧▼Complex(a,b)複素数の表現。a+biImProduct(a,b)複素数同士の積。a*b(a、bはそれぞれComplex(x,y)の形で記載します)ImDiv(a,b)複素数同士の割り算。a/b(a、bはそれぞれComplex(x,y)の形で記載します)ImReal(a)実数部。x+yiのxを返しますImaginary(a)虚数部。x+yiのyを返しますImAbs(a)複素数の絶対値を返します。ImExp(a)exp(x+yi)を求めます。無駄時間を掛け合わせる場合に使用します。・名前定義セルの取得▼Excelでは各セルに名前を定義することができます。定義されたセルの名称でセルの値を呼び出すと、行や列の挿入でセルの位置が変わってしまっても良いので使い勝手が良いです。(なによりCells(3,4)*Range("B4")等、セルの番地で記載しているとなんの計算をしているか分からないですが、分かりやすい名前をシート側でつけておけば式の意味も分かって混乱しません。)例えば、Excelで1次遅れの計算を行う場合に、時間刻み、時定数を、それぞれdtFOL、τFOLと定義しておきます。(左上のボックスにセルにつけたい名前を入力します。A3やB4等、セルの番地と被るような名前は入力できません)これで、以下のように、VBA中でセルの番地を数えたり調べたりしなくても、名前で呼び出すことができますし、τやdtのセル番地が変わっても参照がズレてしまうことがありません。・Solver、GoalSeakの呼び出しExcelのSolverやGoalSeakは回帰計算に便利な機能です。VBAと組み合わせることで、様々な活用方法があります。parameterを回帰計算で求める方法、1次遅れプロセスと実データのフィッティングを行う方法を以下ご紹介します。Seakの基本的な使い方についてはこちらをご参照ください。)・classの活用▼VBAでもクラスを定義、利用することができます。私の場合、状態方程式の解を求める際に、クラスとして3次方程式の解法(Viete,Cardano)を登録しておき、呼び出す等の活用をしています。以下の例では、SRK式(zの3次方程式):\(z^3-z^2+(A-B^2-B)-AB=0\)で、a=-1、b=\(A-B^2-B\)、c=-ABとして、3次方程式の解を求めるクラスにa、b、cを渡しています。・Windows8.1のMSXMLについて▼MSXML2.DOMDocumentは使えない→MSXML2.DOMDocument60にする必要がある。以下リンクを参照しました。・NRTL・2成分系のXY、PXY、γの出力を行いたい場合、例えば、以下のように各成分の蒸気圧、バイナリデータをエクセルの特定のセルに保存しておくことで簡単に求められます。Excelの場合、データをいちいち探してこなくてもまとめてエクセルに保存しておけば良いのが、利点ですね。ように出力をグラフで整理します。エクセルの方が手軽ですが、グラフ形を成形したりするにはPythonの方が断然楽ですので、個人的にはPythonの方がお勧めです。考え方についてはこちらをご参照ください。ここでは、VBAで陽解法を実装する方法を記載します。以下の簡単な一階微分から求めます。t)x_i、x(0)=1$$コード例は以下になります。続いて2階微分の場合です。以下の常微分方程式を陽解法で求めます。考え方についてはこちらをご参照ください。ここでは、VBAで陰解法を実装する方法を記載します。以下の簡単な一階微分から求めます。t}、x(0)=1$$コード例は以下になります。続いて2階微分の場合です。以下の常微分方程式を陰解法で求めます。\end{align*}・Runge-Kutta法▼Runge-Kutta法の考え方についてはこちらをご参照ください。ここでは、VBAでRunge-Kutta法を実装する方法を記載します。以下の簡単な一階微分から求めます。・1次遅れプロセス▼まず解析解から求めます。遅れの時定数をτとすると、プロセス応答は以下の式となります。s}$$単位ステップ入力を与えると、伝達関数は以下で表されます。=1-e^{-t/\tau}$$続いて陰解法で求めます。t}$$上述の離散化式と解析解を比較すると、以下のようになります。Bode線図の作成▼2次遅れ要素の例として、以下の伝達関数のBode線図を作成します。$$G(s)=\frac{K}{s(s+1)}$$s=jωを代入すると、$$G(j\omega)=\frac{K}{j\omega(j\omega+1)}$$VBAでは前述のように、複素数計算をWorksheet関数でそのまま行うことができます。以下の特性方程式に対して、各係数が存在し、かつ正であること、またフルビッツ行列式が全て正であることが、安定の必要十分条件となります。サイトに不具合、ご意見等ございましたらCEsolutionにお知らせください。