簡単な関数の作り方

37
簡簡簡簡簡簡簡簡簡 簡簡簡簡簡簡簡簡簡簡簡 Excel 簡簡簡

Upload: elvis-gilbert

Post on 02-Jan-2016

14 views

Category:

Documents


0 download

DESCRIPTION

簡単な関数の作り方. 必要なときは自分で作る Excel の関数. 標準体重を求めたいセルに =(B5/100)*(B5/100)*22 のような式を入れると B5 に入っている身長の数値を元に標準体重を求めることができる。. 肥満度を求めたいセルに =(C5 – B9)/B9*100 という式を入れると C5 にある体重データと 先に作った B9 にある標準体重のデータから肥満度を計算することができる。. BMI 指数を求めたいセルに =C5/( (B5/100)*(B5/100) ) という式を入れると - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 簡単な関数の作り方

簡単な関数の作り方

必要なときは自分で作るExcel の関数

Page 2: 簡単な関数の作り方

標準体重を求めたいセルに=(B5/100)*(B5/100)*22

のような式を入れると B5 に入っている身長の数値を元に標準体重を求めることが

できる。

BMI 指数を求めたいセルに=C5/( (B5/100)*(B5/100) )

という式を入れるとB5 にある身長の数値と C5 にある体重の数値から BMI 指数

を計算できる。

肥満度を求めたいセルに

=(C5 – B9)/B9*100という式を入れると

C5 にある体重データと先に作った B9 にある標準体重のデータから肥満度を計算すること

ができる。

Page 3: 簡単な関数の作り方

これらを計算する関数は用意されていない。しかし、簡単な関数なら自作することができ

る。一旦作っておくとそのワークシート内であればどこでも使うことが

できる。

Page 4: 簡単な関数の作り方

まずはどんな関数をつくるか

例として、標準体重を計算する関数を作る。

名前はstdw( )とする。

引数は1つで身長をcm単位の数値で渡すと、標準体重を計算して返すようにする。

標準体重 =(身長m)2 * 22

という式を元にしてつくる。

Page 5: 簡単な関数の作り方

VBA を使う

Excel などのソフトには VBA というプログラミング言語が用意されている。

それを用いるには Visual   Basic   Editor  というアプリケーションを動かして、そのなかでプログラミングする必要がある。

Page 6: 簡単な関数の作り方
Page 7: 簡単な関数の作り方

ツールメニューから

マクロを選び、更に

Visual Basic Editorを選ぶ

Page 8: 簡単な関数の作り方

Visual   Basic   Editorの

挿入メニューから

標準モジュールを選ぶ

Page 9: 簡単な関数の作り方

ここに関数の記述を書いていくFunction stdw(h)と書いて Enter キーを押すと自動的にEnd   Functionと下に入る。  h は仮引数と呼ばれることもある。呼び出し側の引数を入れるための入れ物の名前が h なのである。このように値を入れる入れ物に名前のついたものを変数と呼ぶこともある。

Page 10: 簡単な関数の作り方

この2行の間に関数の中身の記述を書く事になる。

したがってこの場合は  stdw = (h / 100)*(h / 100)*22

と書けばよい。なお 100 で割るのは

cm を m に直すためである。

関数の値を戻すには関数の名前 = 値

のように記述する。値は値を持つ式でもよい。

Page 11: 簡単な関数の作り方
Page 12: 簡単な関数の作り方

間違いがないか確かめるためデバッグメニューから

VBAProject のコンパイルを選ぶ

エラーが無ければ何も表示されない

Page 13: 簡単な関数の作り方

ファイルメニューから

終了して Excel へ戻るを選ぶ

Page 14: 簡単な関数の作り方

今、 B5 のセルに身長の数値が入っており、それを元にさきほど作っ

たstdw( )

を使って B9 のセルに標準体重のデータを作りたいとする。 stdw( )

の( ) の中は B5 を入れればよい

Page 15: 簡単な関数の作り方

同様に BMI 指数を計算する関数 function bmi( h, w )を作ってみよう。

h は身長(cm)、 w は体重(kg)を受け渡されるための仮引数の

変数である。関数の中身は

  bmi = w / ( (h/100)*(h/100))とすればよい。

Page 16: 簡単な関数の作り方

同様に続き肥満度を計算する関数 function himan(h , w)を作ってみよう。

中身は既に定義した stdw( ) 関数を呼び出すこともできるので。

  himan = ( w – stdw(h) )/ stdw(h) *100としてやることができる。

もちろん内部で標準体重を作ってもよい。

Page 17: 簡単な関数の作り方

セル B5 にある身長データとC5 にある体重データを元に BMI 指数を計算させるには BMI 指数を計算させるセルを選

んで=bmi(B5,C5)

のような式を書く。

Page 18: 簡単な関数の作り方

同様に肥満度を計算させるにはセルを選んで

=himan(B5,C5)のような式を書くとよい。

Page 19: 簡単な関数の作り方

関数を使わないで求めた値と関数を作って求めた値は一致しているのを確認しよ

う。

関数を使う利点は何か?一旦作ってしまえば処理や式の中身は覚えていなくても良いことなど。

Page 20: 簡単な関数の作り方

抵抗の直列や並列合成抵抗を計算する関数を作ってみよう

Page 21: 簡単な関数の作り方

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

Page 22: 簡単な関数の作り方

セル A6,A7 にある抵抗値を元にして直列合成抵抗

は自作関数を使って=s(A6,B6)

のように求められる。同様に並列抵抗は

=p(A6,B6)として求められる。

Page 23: 簡単な関数の作り方

セル A11,B11,C11 にある抵抗値を元に図のような回路の合成抵

抗も=s( A11, p( B11, C11) )

という具合に下線の関数の戻り値を関数の引数に使うことで求められる。これは関数を使わないやり方ではやや難しい。

関数を使う利点その2

関数の戻り値をまた別の関数の引数に用いるなどして複雑な処理を簡単に記述することができる。

Page 24: 簡単な関数の作り方

やや複雑な処理をする関数

10 進数を 2 進数に直す関数の作製

Page 25: 簡単な関数の作り方

方針

• まず、 10 進を 2 進に直す方法を考える。• 桁数が少ないものを作ってみる。• 桁数を増やす方法を考える。• 新しい処理のしかたを学びたくさんの

桁に対応させる。

Page 26: 簡単な関数の作り方

1 桁目の 2 進数を返す関数

• Function   dec2bin( a )•   a には数値が入って呼び出される。• 2 進数 1 桁目を求めるには a を2で割った余

りを求めればよい。• VBA で余りを求める処理は Mod という演算

子を使う。• 関数値を戻すには

          関数名=値  として戻す。

Page 27: 簡単な関数の作り方

2 進 1 桁目を返す関数

• Function dec2bin( a ) dec2bin = a Mod 2End Function

• と、 1 桁だけならこれでもよいが後の拡張のために

• Function dec2bin( a ) b = a Mod 2 dec2bin = bEnd Functionとしておこう。これを VisualBasicEditor で作る。

• そして、 Excel シートで動作を確認してみる。

Page 28: 簡単な関数の作り方

Visual   Basic   Editor を終了した後に

ここに=dec2bin(C11)

と入れて Enter する。0

次に、ここを3や1にかえてみて動作を確認する。

Page 29: 簡単な関数の作り方

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

Page 30: 簡単な関数の作り方

11

確認のためもう一度ここをクリックして3に変えてEnter キーを押してみる。

Page 31: 簡単な関数の作り方

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回繰り返す

Page 32: 簡単な関数の作り方

101101101

確認のためもう一度ここをクリックして5に変えてEnter キーを押してみる。

Page 33: 簡単な関数の作り方

2進3桁以上の処理に変更する為の新しいテクニック

繰り返し処理、実現の方法  条件による分岐処理を取り入れる。     If   Then   Else 文の導入。     Goto  文の導入例

Loop1:     ‘ラベル     a = Int(a / 2) If ( a > 0 ) Then Goto Loop1 Endif

Page 34: 簡単な関数の作り方

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 を戻す。

繰り返し

もはやここまでくると本格的なプログラミングになっている。

Page 35: 簡単な関数の作り方

ここの値を10とか255とかに変えて確かめる。

101010

25511111111

こうして、関数を使うとより複雑な処理も行うことができることがわかる。

Page 36: 簡単な関数の作り方

自作関数を使う利点は

• ややこしい変換式なども関数にしておけば中身の記述は不要で引数だけを記述すればよい。

• 関数の戻り値を別の関数の引数に使うこともでき、複雑な処理を簡単に記述できる。

• セルに数式を書くだけでは難しい事が関数を使うとできることもある。

処理の記述が簡単になる

Page 37: 簡単な関数の作り方

便利な自作関数を作ったら• 他の人にも中身(ソースコード)を公開して使って

もらおう• 中身は教えたくないけど使う分にはかまわない時は

パスワードを付けて見えなくすることもできる。