簡単な関数の作り方
DESCRIPTION
簡単な関数の作り方. 必要なときは自分で作る Excel の関数. 標準体重を求めたいセルに =(B5/100)*(B5/100)*22 のような式を入れると B5 に入っている身長の数値を元に標準体重を求めることができる。. 肥満度を求めたいセルに =(C5 – B9)/B9*100 という式を入れると C5 にある体重データと 先に作った B9 にある標準体重のデータから肥満度を計算することができる。. BMI 指数を求めたいセルに =C5/( (B5/100)*(B5/100) ) という式を入れると - PowerPoint PPT PresentationTRANSCRIPT
簡単な関数の作り方
必要なときは自分で作るExcel の関数
標準体重を求めたいセルに=(B5/100)*(B5/100)*22
のような式を入れると B5 に入っている身長の数値を元に標準体重を求めることが
できる。
BMI 指数を求めたいセルに=C5/( (B5/100)*(B5/100) )
という式を入れるとB5 にある身長の数値と C5 にある体重の数値から BMI 指数
を計算できる。
肥満度を求めたいセルに
=(C5 – B9)/B9*100という式を入れると
C5 にある体重データと先に作った B9 にある標準体重のデータから肥満度を計算すること
ができる。
これらを計算する関数は用意されていない。しかし、簡単な関数なら自作することができ
る。一旦作っておくとそのワークシート内であればどこでも使うことが
できる。
まずはどんな関数をつくるか
例として、標準体重を計算する関数を作る。
名前はstdw( )とする。
引数は1つで身長をcm単位の数値で渡すと、標準体重を計算して返すようにする。
標準体重 =(身長m)2 * 22
という式を元にしてつくる。
VBA を使う
Excel などのソフトには VBA というプログラミング言語が用意されている。
それを用いるには Visual Basic Editor というアプリケーションを動かして、そのなかでプログラミングする必要がある。
ツールメニューから
マクロを選び、更に
Visual Basic Editorを選ぶ
Visual Basic Editorの
挿入メニューから
標準モジュールを選ぶ
ここに関数の記述を書いていくFunction stdw(h)と書いて Enter キーを押すと自動的にEnd Functionと下に入る。 h は仮引数と呼ばれることもある。呼び出し側の引数を入れるための入れ物の名前が h なのである。このように値を入れる入れ物に名前のついたものを変数と呼ぶこともある。
この2行の間に関数の中身の記述を書く事になる。
したがってこの場合は stdw = (h / 100)*(h / 100)*22
と書けばよい。なお 100 で割るのは
cm を m に直すためである。
関数の値を戻すには関数の名前 = 値
のように記述する。値は値を持つ式でもよい。
間違いがないか確かめるためデバッグメニューから
VBAProject のコンパイルを選ぶ
エラーが無ければ何も表示されない
ファイルメニューから
終了して Excel へ戻るを選ぶ
今、 B5 のセルに身長の数値が入っており、それを元にさきほど作っ
たstdw( )
を使って B9 のセルに標準体重のデータを作りたいとする。 stdw( )
の( ) の中は B5 を入れればよい
同様に BMI 指数を計算する関数 function bmi( h, w )を作ってみよう。
h は身長(cm)、 w は体重(kg)を受け渡されるための仮引数の
変数である。関数の中身は
bmi = w / ( (h/100)*(h/100))とすればよい。
同様に続き肥満度を計算する関数 function himan(h , w)を作ってみよう。
中身は既に定義した stdw( ) 関数を呼び出すこともできるので。
himan = ( w – stdw(h) )/ stdw(h) *100としてやることができる。
もちろん内部で標準体重を作ってもよい。
セル B5 にある身長データとC5 にある体重データを元に BMI 指数を計算させるには BMI 指数を計算させるセルを選
んで=bmi(B5,C5)
のような式を書く。
同様に肥満度を計算させるにはセルを選んで
=himan(B5,C5)のような式を書くとよい。
関数を使わないで求めた値と関数を作って求めた値は一致しているのを確認しよ
う。
関数を使う利点は何か?一旦作ってしまえば処理や式の中身は覚えていなくても良いことなど。
抵抗の直列や並列合成抵抗を計算する関数を作ってみよう
r1 と r2 の直列合成抵抗を求める関数 s( r1, r2 )
並列合成抵抗を求める関数 p( r1, r2)
Function s(r1, r2)
s = r1 + r2
End Function
------------------------------------------------------
Function p(r1, r2)
p = (r1*r2)/(r1+r2)
End Function
セル A6,A7 にある抵抗値を元にして直列合成抵抗
は自作関数を使って=s(A6,B6)
のように求められる。同様に並列抵抗は
=p(A6,B6)として求められる。
セル A11,B11,C11 にある抵抗値を元に図のような回路の合成抵
抗も=s( A11, p( B11, C11) )
という具合に下線の関数の戻り値を関数の引数に使うことで求められる。これは関数を使わないやり方ではやや難しい。
関数を使う利点その2
関数の戻り値をまた別の関数の引数に用いるなどして複雑な処理を簡単に記述することができる。
やや複雑な処理をする関数
10 進数を 2 進数に直す関数の作製
方針
• まず、 10 進を 2 進に直す方法を考える。• 桁数が少ないものを作ってみる。• 桁数を増やす方法を考える。• 新しい処理のしかたを学びたくさんの
桁に対応させる。
1 桁目の 2 進数を返す関数
• Function dec2bin( a )• a には数値が入って呼び出される。• 2 進数 1 桁目を求めるには a を2で割った余
りを求めればよい。• VBA で余りを求める処理は Mod という演算
子を使う。• 関数値を戻すには
関数名=値 として戻す。
2 進 1 桁目を返す関数
• Function dec2bin( a ) dec2bin = a Mod 2End Function
• と、 1 桁だけならこれでもよいが後の拡張のために
• Function dec2bin( a ) b = a Mod 2 dec2bin = bEnd Functionとしておこう。これを VisualBasicEditor で作る。
• そして、 Excel シートで動作を確認してみる。
Visual Basic Editor を終了した後に
ここに=dec2bin(C11)
と入れて Enter する。0
次に、ここを3や1にかえてみて動作を確認する。
2 進 2 桁を求めるように変更方針
2進 1 桁目をcという変数に覚えさせておく。
変数 a の値を2で割った商を再び a に入れる。 Int( ) は整数に丸める処理。
変数 b に a を2で割った余りを入れる。
関数の戻り値として2桁目をb、1桁目をcとして合成したものを戻す。
Function dec2bin(a)
b = a Mod 2
c = b
a = Int( a / 2 )
b = a Mod 2
dec2bin = b & c
End Function
11
確認のためもう一度ここをクリックして3に変えてEnter キーを押してみる。
2進3桁を戻すように変更
Function dec2bin(a) c = ""
b = a Mod 2 c = b & c a = Int( a / 2 ) b = a Mod 2 c = b & c a = Int( a / 2 )
b = a Mod 2 c = b & c a = Int( a / 2 )
dec2bin = cEnd Function
方針a を2で割った余りを b に入れる。
b と c を並べた文字列を c に再び入れる。
a を2で割った商を再び a に入れる。
a を2で割った余りを b に入れる。
b と c を並べた文字列を c に再び入れる。
a を2で割った商を再び a に入れる。
a を2で割った余りを b に入れる。
b と c を並べた文字列を c に再び入れる。
a を2で割った商を再び a に入れる。
関数の戻り値として cを戻す。
同じ事を3回繰り返す
101101101
確認のためもう一度ここをクリックして5に変えてEnter キーを押してみる。
2進3桁以上の処理に変更する為の新しいテクニック
繰り返し処理、実現の方法 条件による分岐処理を取り入れる。 If Then Else 文の導入。 Goto 文の導入例
Loop1: ‘ラベル a = Int(a / 2) If ( a > 0 ) Then Goto Loop1 Endif
2 進3桁以上への変更
Function dec2bin(a) c = ""Loop1: b = a Mod 2 c = b & c a = Int(a / 2) If a > 0 Then GoTo Loop1 End If dec2bin = cEnd Function
ラベル Loop1
a を2で割った余りを b に入れる。
b を c の前にくっつけた文字列を再び c に入れる。
a を2で割った商を再び a に入れる。
もし a > 0 ならラベル Loop1 に移行する。
関数の値として c を戻す。
繰り返し
もはやここまでくると本格的なプログラミングになっている。
ここの値を10とか255とかに変えて確かめる。
101010
25511111111
こうして、関数を使うとより複雑な処理も行うことができることがわかる。
自作関数を使う利点は
• ややこしい変換式なども関数にしておけば中身の記述は不要で引数だけを記述すればよい。
• 関数の戻り値を別の関数の引数に使うこともでき、複雑な処理を簡単に記述できる。
• セルに数式を書くだけでは難しい事が関数を使うとできることもある。
処理の記述が簡単になる
便利な自作関数を作ったら• 他の人にも中身(ソースコード)を公開して使って
もらおう• 中身は教えたくないけど使う分にはかまわない時は
パスワードを付けて見えなくすることもできる。