[[20140406105448]] 『Functionプロシージャについて』(SFO) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『Functionプロシージャについて』(SFO)

VBA初心者です。

A列の値を1.05倍してB列に入れるというマクロです。
下記の「num」は、
Long型の変数ということはわかるのですが、
numがA列の1行目から4行目までを
指しているというのは、
どこを見ればわかるのでしょうか。
sub⇔function間のやりとりが全然わかりません。
よろしくお願いします。

Sub sample1()

    Dim i As Long
    For i = 1 To 4
    Cells(i, 2) = tax(Cells(i, 1).Value)
    Next
End Sub

Function tax(num As Long) As Long

    tax = num * 1.05
End Function

< 使用 Excel:Excel2010、使用 OS:Windows7 >


 numという変数は、あくまでもLong型のパラメータ変数ですよね?
 別にA列のなにがしの値でなくても
 答えを出してくれる関数(tax)として作成されています。良い関数ですね!!

 >A列の1行目から4行目までを指して

 意味のある数字にするのは、呼び出し側です

 >Cells(i, 2) = tax(Cells(i, 1).Value)
 上記の変数iがFor 〜 Next内で変化することでA列の1行目から4行目の値を元に関数taxが計算されています。

 taxという関数は、税率もパラメータで指定できるとよいですね!!

(ichinose) 2014/04/06(日) 11:50


お礼が遅くなってすみません。
ありがとうございました。
numとA列の関係(・・?)がまだしっくりこないですが、
少し学習を進めて理解を深めていこうと思います。

(SFO) 2014/04/06(日) 14:49


 >numとA列の関係(・・?)がまだしっくりこないですが

 taxというFunctionプロシジャーは、ある数値(num)を入力データにして、
 このnumに1.05を乗算して、返す関数ですよね!!

 Functionプロシジャーtaxは、入力データがあって始めてデータを返すことができるのですよね!!

 f(x)=x+1

 なんていう数学の関数と同じです。 f(2)=3になり、f(4)=5になります。
 numは、このf(x)のxと同じ意味なんです。

 変数numは、外部のプロシジャーから、このFunctionプロシジャーtaxにデータを渡すための手段なのです。

 そして

 Function tax(num As Long) As Long 

 これが numが受け渡しに使われる変数であるというプログラム書式(ルール)です。 

 Sub test()
    Dim a As Long
    Dim b As Long
    a = 100
    MsgBox tax(a)
    b = 200
    MsgBox tax(b)
 End Sub
 Function tax(num As Long) As Long
    tax = num * 1.05
 End Function

 testを実行すれば、105 210 と順次表示されます。

 元のコードの以下に目を向けると、

 Cells(i, 2) = tax(Cells(i, 1).Value)

 変数iはFor 〜 Next文中で 1〜4に変化します。

 i=1 の時は、 Cells(i, 1).Valueは、 Cells(1, 1).Value 1行1列目のセルつまり、セルA1の値を指しています。

 よって、

 tax(Cells(i, 1).Value)は、 tax(Cells(1, 1).Value)となり、 セルA1の値がtaxに送られます。

 i=2 の時は、 Cells(i, 1).Valueは、 Cells(2, 1).Value 2行1列目のセルつまり、セルA2の値を指しています。

 よって、

 tax(Cells(i, 1).Value)は、 tax(Cells(2, 1).Value)となり、 セルA2の値がtaxに送られます。

 この時の変数numをFunctionプロシャーtaxのパラメータと呼びます。
 プロシジャーから、別のプロシジャーにデータを渡す方法としては、このパラメータ方式が
 一番よいとされています。

 私もプログラミングをはじめた当初は、このパラメータの概念を把握するのに時間がかかったことを
 覚えています。

    
(ichinose) 2014/04/06(日) 18:07

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.