2017-01更新 熊本高専
森下功啓
VBAで
数値計算02
本資料の目次
数学の関数をプログラムの関数に変換する
課題
その他
2
数学の関数をプログラ
ムの関数に変換する
3
関数
関数を使うことで、繰り返し使える処理を作成できる
関数は処理に名前をつけて、再利用ができる
4
*3回’Hello World’を表示するために関数を用いた例@javascript
*javascript勉強会@未来会議室より引用
数値計算における関数
数値計算における関数は、変数を指定すると答えが返ってく
るイメージです。
5
関数入力データ 出力データ
関数を入力データから出力データを作るマシンと捉える
関数x y
VBAによる数値計算用関数
のパターン
VBAで変数xを渡して、yを得るプログラムを考えましょう。例
えば、y = 2x + 3を求める関数の例を示します。引数にxを取
り、yを求めてそれを返しています。
ポイント
 返り値があるので、Functionを使う。
 数学の四則演算の記号とVBAの演算子は少し異なる。
6
結果
サンプルコード
test3を実行
@VBA
関数の構造
関数には書式や決まり事が有ります。詳しく見てみましょう。
7
返り値の有る関数で
あることを表す
関数名
名前は任意
引数
ByValは値渡しを表す
型を伴う変数宣言
返り値は、「関数名 =
値」で指定する。
返り値の型宣言
関数のス
コープ
@VBA
計算に必要な変数が2つ以
上のとき
z = 2x + 5y + c
上記の式において、zを計算するにはx, y, cという3つの変数が
必要です。こういうときは、単純に引数を増やしましょう。
8
*引数が増えると長くなるが、、、仕方ない。 @VBA
値渡しと参照渡し
値渡しとは、引数として渡した変数の値が別の変数にコピーさ
れて利用される方法です。また、参照渡しとは、渡された変数
に直接アクセスする方法です。C言語のポインタ渡しみたいなも
のです。VBAでは、デフォルトでは参照渡しとなります。
9
引数xに5を代入して、
渡した側でxが変わる
か検査した。
結果
xが5に変化したので、
参照渡しと分かる。
参照渡しの副作用
に注意!
@VBA
(参考)参照渡しの挙動
VBAにおける参照渡しについて調べるため、実験用のコードを作
りました。関数math_func_test5呼出し後、変数aやbに数値を代
入しても、もう一方に影響していません。参照渡しで渡された先
で同じく参照渡しで渡された変数が代入されても値が代入される
にすぎないことが分かります。
10
結果
@VBA
返り値を2つ以上欲しいとき
例えば複素共役を計算するなど、引数も複数で返り値も複数
にしたい事が有ります。VBAでは、複数の参照渡しの変数を
利用し計算結果を取得します。
11
結果
@VBA
SIN, COS, EXPなどの利用
実装が面倒で処理速度が求められる数学的な関数は標準で実
装されています。
12*参考文献:http://www.jp-ia.com/_ans/excelvbafun.html
結果
@VBA
練習問題
13
問1 2次関数
y = ax2 + bx + c
(1) x, a, b, cの4つの変数を与えると、上記の式に従ってyを返
す関数を実装せよ。
(2) a, b, cを0以外に設定し、xを1から100までステップ1で計
算した結果をA列に保存せよ。
14
問2 非連続関数
(1) 以下のグラフに示す関数を実装せよ。定義域に留意のこと。
(2) xを0から1.0までステップ0.01で変化させて計算したyをB列に
保存せよ。
15O
x
y
P(0.65, 1.0)
1.0
問3 ベクトルの計算
斜め上方へ投射された物体は放物線を描いて落下する。軌跡
の長さが数十メートル程度であれば、地球の自転の影響など
を考えずに済む。ここで、空気抵抗や地球の自転の影響を無
視した上で、UTM座標系における物体の座標と速度ベクトル
を求めたい。
初速が250 m/sで仰角68.9°で打ち出された質量17.4 kgの物
体の、落下までの座標と速度ベクトルを求めよ。時間ステッ
プは0.05秒とする。保存先は時刻をC, 水平座標をD, 鉛直座標
をE, 水平方向の速度ベクトルをF列, 鉛直方向の速度ベクトル
をG列とする。また、鉛直上向きを正とする。
16
問4 EXPの実装
exp(x)はexを表す関数で、VBAでは既に実装されていますが、
これをマクローリン展開を用いて実装してみましょう。その
上で、VBAのExp関数と自作の関数の差を評価するとGood。
保存先はH列以降とする。列の意味が分かるように適宜タイト
ルをつけること。
17*exp()の応用として、シグモイド関数の計算などがある。
http://mathtrain.jp/maclaurin
その他
18
参考文献
SAK Streets - VB 開発言語資料
 http://sak.cool.coocan.jp/w_sak3/doc/sysbrd/sak3vb.htm
 基本的にVB6.0の解説だが、VBAにほぼそのまま適用できる。かなり詳しい。
19

VBAで数値計算 02 数式の関数をプログラムの関数で実装