« TypeScriptで複素数クラスを作って複素数の四則演算、exp、べき、logの計算ができるようにした。大昔にJavaScriptで作ったり、数値計算ライブラリmathjsを使ったりしたがもうちょっとお手軽なものが欲しかったので。 | トップページ | Excel VBAからOfficeスクリプト(TypeScript)へ乗換るための数値計算(2) 4段4次のルンゲクッタ法でローレンツ方程式を計算してみる。 »

2024年4月 4日 (木)

Excelの自動化がいつの間にかVBAじゃなくてデスクトップ版でもOfficeスクリプト(TypeScript)で出来るようになっていた。Python in Excelとか触っているうちに出遅れた…そこで先日作った複素数クラスを使ってセルに入力した値を複素数計算できるようにした。

いつの間にかTypeScriptベースのOffice Scriptsが自動化で使えるようになっていた。

Office スクリプトと VBA マクロの違い

これは…Python in Excelは使える人が限られそうだが、こっちはVBAを置き換えていく気がする。

このために、先日

TypeScriptで複素数クラスを作って複素数の四則演算、exp、べき、logの計算ができるようにした。大昔にJavaScriptで作ったり、数値計算ライブラリmathjsを使ったりしたがもうちょっとお手軽なものが欲しかったので。 

というのを書いたのだった。

こんな感じでエディットできる。

Officescriptcomplex01

コードはこちら:

Officescriptcomplex02

テキストでも示す。コマンドは違うがほとんどVBAと同じ感じでセルの操作はできる。ちょっといろいろ試してみようか。

function main(workbook: ExcelScript.Workbook) {
  class complex {
    x: number;
    y: number;
    constructor(x: number, y: number) {
      this.x = x;
      this.y = y;
    }
    set Re(x: number) {
      this.x = x;
    }
    get Re(): number {
      return this.x;
    }
    set Im(y: number) {
      this.y = y;
    }
    get Im(): number {
      return this.y;
    }
    static add(a: complex, b: complex): complex {
      return new complex(a.x + b.x, a.y + b.y);
    }
    static sub(a: complex, b: complex): complex {
      return new complex(a.x - b.x, a.y - b.y);
    }
    static mul(a: complex, b: complex): complex {
      return new complex(a.x * b.x - a.y * b.y, a.x * b.y + a.y * b.x);
    }
    static div(a: complex, b: complex): complex {
      const r2 = b.x * b.x + b.y * b.y;
      return new complex((a.x * b.x + a.y * b.y) / r2, (-a.x * b.y + a.y * b.x) / r2);
    }
    static conj(a: complex): complex {
      return new complex(a.x, -a.y);
    }
    static exp(a: complex): complex {
      return new complex(Math.exp(a.x) * Math.cos(a.y), Math.exp(a.x) * Math.sin(a.y));
    }
    static log(a: complex): complex {
      const r2 = a.x * a.x + a.y * a.y;
      return new complex(0.5 * Math.log(r2), Math.atan2(a.y, a.x));
    }
    static pow(a: complex, b: complex): complex {
      return complex.exp(complex.mul(complex.log(a), b));
    }
    static abs(a: complex): number {
      return Math.sqrt(a.x * a.x + a.y * a.y);
    }
    static arg(a: complex): number {
      return Math.atan2(a.y, a.x);
    }
    static toString(a: complex): string {
      if (a.y < 0) {
        return a.x.toString() + a.y.toString() + "i";
      } else {
        return a.x.toString() + "+" + a.y.toString() + "i";
      }
    }
  }
  let selectedSheet = workbook.getActiveWorksheet();
  const z1 = selectedSheet.getRange("C2:D2").getValues();
  const z2 = selectedSheet.getRange("C3:D3").getValues();

 

  const a = new complex(Number(z1[0][0]), Number(z1[0][1]));
  const b = new complex(Number(z2[0][0]), Number(z2[0][1]));
  
  const c = complex.div(a, b);
  selectedSheet.getRange("C4:D4").setValues([[c.Re, c.Im]]);

 

}

 

Python in Excel試したシリーズ:

 Python in Excel(ExcelであるセルでPY関数を使うとPythonコードがかける)を使う(その1)scikit-learnを使ってアイリス(あやめ)の分類を様々な機械学習(k-最近傍法、ロジスティック回帰、ランダムフォレスト、SVM、ニューラルネットワーク)を試す。Python Editorも試す

Python in Excel(PY関数を使うとExcelでPythonコードがかける)を使う(その2)SciPyでローレンツ方程式をsolve_ivpのDOP853(Dormand&Prince 8次のルンゲクッタ法)で計算して、3Dプロットをする。Excel Labs(実験的なアドイン)のPython Editorも補完がきいて便利。

Python in Excel(PY関数を使うとExcelでPythonコードがかける)を使う(その3)20231017は素数なので、素数(素因数分解)カレンダーを、SymPyで素因数分解してデータ並び替え、Excelで積み上げ棒グラフにしてプロット。Pythonで積み上げ棒グラフは面倒なのでこれは楽。

Python in Excel(PY関数を使うとExcelでPythonコードがかける)を使う(その4) 何のライブラリが使えるかpkg_resourcesを使って調査。294個あった。numpy,scipy,scikit-learn,numba,mpmath,Pytourch,sympy,pandas,pillow,matplotlib,statsmodels,pywavelets,transformersなどは使える。

Python in Excel(PY関数を使うとExcelのセル内にPythonがかける)を使う(その5) Excelでcsvファイルを読み込み、Pythonのscikit-learnとNumpyで主成分分析(PCA),特異値分解(SVD)を行いExcelでグラフにする。

立てこもりで有名になってしまった蕨市が、日本最小面積の市ということでデータを国土地理院のサイトからcsvでExcelに読み込み、Python in ExcelのPandasで解析&Seabornで図示。最大は高山市でした。ー Python in Excel(PY関数を使うとExcelのセル内にPythonがかける)を使う(その6)

Python in Excel(PY関数を使うとExcelのセル内にPythonがかける)を使う(その7) データをcsvでExcelで読んで重回帰分析をstatsmodelsのOLSで行う。が、summaryがExcelのセル内でうまく表示できなくてハマる…summary().as_text()として、セルの書式を折り返して全体を表示を選ぶ。

Python in Excel(PY関数を使うとExcelのセル内にPythonがかける)を使う(その8) 短時間でFFTを繰り返して時間vs.周波数のデータを描くスペクトログラムをExcelでCSVファイルを読んでSciPyで計算。Matlabの例題を使った。音声でよくやられるが最近のスペアナはこの機能持ってるの多いな。

Python in Excel(PY関数を使うとExcelのセル内にPythonがかける)を使う(その9) statsmodelsのSARIMAX(SARIMA。季節性を考慮したARIMA)を使った時系列予測を行う。予測する時間がExcelのセルで簡単にマウスドラッグで作れるのでとても簡単。Excel予測ツールとも比較
Python in Excel(PY関数を使うとExcelのセル内にPythonがかける)を使う(その10) scikit-learnを使ってサポートベクターマシン(SVC)で手書き文字(数字)の認識を行う。高校の情報IIで習うことに衝撃を受けて…Excelの機能でセルに値に応じて色付けすることで数字を表現。

Python in Excel(PY関数を使うとExcelのセル内にPythonがかける)を使う(その11)多倍長精度計算のmpmath, gmpy2が使えるのでタッパーの自己言及式を描いてみる。セルに数字を書いて色付けするExcelの機能を使った。

« TypeScriptで複素数クラスを作って複素数の四則演算、exp、べき、logの計算ができるようにした。大昔にJavaScriptで作ったり、数値計算ライブラリmathjsを使ったりしたがもうちょっとお手軽なものが欲しかったので。 | トップページ | Excel VBAからOfficeスクリプト(TypeScript)へ乗換るための数値計算(2) 4段4次のルンゲクッタ法でローレンツ方程式を計算してみる。 »

パソコン・インターネット」カテゴリの記事

学問・資格」カテゴリの記事

日記・コラム・つぶやき」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

« TypeScriptで複素数クラスを作って複素数の四則演算、exp、べき、logの計算ができるようにした。大昔にJavaScriptで作ったり、数値計算ライブラリmathjsを使ったりしたがもうちょっとお手軽なものが欲しかったので。 | トップページ | Excel VBAからOfficeスクリプト(TypeScript)へ乗換るための数値計算(2) 4段4次のルンゲクッタ法でローレンツ方程式を計算してみる。 »

最近の記事

最近のコメント

2024年12月
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31        
フォト
無料ブログはココログ