[[20220623225430]] 『functionプロシージャについて』(八家) ページの最後に飛ぶ

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

 

『functionプロシージャについて』(八家)

お世話になっております。

Sub test()

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

Function tax(Num As Long) As Long

    Num = Cells(i, 1).Value  '...★
    tax = Num * 1.05
End Function

以下のファンクションを使って、A列に税引き前の価格(手入力)
B列に税込み価格を表示させたいと思っていますが、
function プロシージャがいまいちわかりません
★のコードがあればわかるのですが、
『実行時エラー1004 アプリケーション定義またはオブジェクト定義のエラーです』と表示されます。
★のコードがなければうまくいきます。
functionプロシージャは引数が自動的に紐づけられていると考えていいのでしょうか・・?

< 使用 Excel:Excel2019、使用 OS:Windows10 >


 >functionプロシージャは引数が自動的に紐づけられていると考えていいのでしょうか・・? 
 そのとおりです。

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

 Function tax(Num As Long) As Long                   '(2)
     tax = Num * 1.05
 End Function

 ・(2)のNumを関数taxの仮引数(かりひきすう)、
 ・(1)のCells(i, 1).Valueを関数taxの実引数(じつひきすう)と言います。

 Functionプロシージャは、仮引数をもとになんらかの返り値を返すルールを定めたものです。

 実引数に実際の値を指定して、Functionプロシージャを呼ぶことで、
 それが仮引数に渡されて計算され、計算結果が結果として返ってくる、という仕組みです。

 コード作成上のポイントは、
 (a)Functionプロシージャの名称("tax")と同じものに、返すべきものを入れる点です。
     tax = Num * 1.05
     ↑ ここはtax以外は不可。returnとかansとか独自色を出してはダメです。

 (b)また、仮引数と実引数は型が一致していることが必要です。

 てなことはVBAの基本書には書いてあるはずなので、お手元の書籍を調べて見てください。
 手元になければ購入してください。ネットだけで泳いでいけるような簡単なものではありません。
 また、ネットではどうしても視点が偏ります。
 書籍であれば、必要なことは網羅されています(いるはずです)。    
(γ) 2022/06/23(木) 23:20

>『実行時エラー1004 アプリケーション定義またはオブジェクト定義のエラーです』と表示されます。
それは、iが0のために、0行目というあり得ない指定に、Excel君が音をあげたもの。
ついでに言えば、冒頭に Option Explicitを自動的に挿入するオプション設定に
しておくことを推奨します。(そうすれば i について警告が出ます)

(γ) 2022/06/23(木) 23:23


γ様 返信遅くなりすいません
ご丁寧なレクチャーありがとうございます。
勉強になりました。ありがとうございました。
(八家) 2022/06/24(金) 06:25

コメント返信:

[ 一覧(最新更新順) ]


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