pickup

Functionは、ユーザー定義関数等でよく、紹介されます。

戻り値が、あるとかないとか、クラスモジュールほどではないですが、難しいですよね。

今回は、Functionであそんでみましょう。

目次

スポンサーリンク

Functionを勉強するとどうなる?

 

こんにちは。伊川(@naonaoke)です。

Functionを覚えるよりも、Callステートメントを知っているから大丈夫なんてことを、初心者の頃は思っていました。

VBAの醍醐味は、いかに、少ないコードで、大量の処理をするか?

このことを意識して、コードを書いています。

いい曲は、ギター1本でできるのさ

これは、桑田佳祐さんの言葉ですが、いいコードは、8行以上、15行未満で記載できます。

つまり、このスキルを取得するには、Functionを勉強するのが一番いいでしょう。

適当なコードが見つからなかったので、NETで探しました。

https://www.sejuku.net/blog/28904

 

このページのコードを参考にしています。

スポンサーリンク

このブログはこんな人にお勧め

 

今回のテーマ
  • Excelで、VBAを勉強している人
  • ExcelVBAで、Functionを勉強している人
  • VBAのコードをできるだけ短くしたい人

 

このブログを、読み終わるころには・・・・

 

このブログの結論

NETでFunctionを検索しても、結構、難しく、わかりにくいと思います。

そんな時は、できるだけ、カンタンなコードを、少しアレンジしてみましょう。

その繰り返しは、結構、勉強になります。

スポンサーリンク

Function

 

消費税でもなく、合否判定でもなく、NETでは、紹介していないような内容を紹介します。

と言っても、すでにパクリなんですけどね

 

今回は、完成形というよりは、勉強方法も含めて紹介します。

 

F(x)=2x+1、このような数式を、だれもが勉強したと思います。

F(X)は、関数のニックネームですね。

Functionは、関数という意味で、何かの値が決まれば、何かの値が決まるということです。

この考え方は、VBAにも同じことが言えます。

そのように考えながら進めていきます。

Functionを勉強する 作業手順 その1 引数無、戻り値ありの場合

 

Function funca() As String

funca = “Hello VBA!”

End Function

funcaの、戻り値のデータ型は、String型です。

戻り値は、Hello VBA!”です。

Sub macro1_2()

    Dim str As String

    str = funca()

    Range("B1") = str

End Sub

Function func1() As String

    func1 = "Hello VBA!"

End Function

これだけでは面白くないでの、ループを合わせます。

 

 

Sub macro1_3()
    Dim str As String
    Dim i As Long
    maxrow = Cells(Rows.Count, "A").End(xlUp).Row
       For i = 1 To maxrow

            str = funcb()
            Cells(i, 2) = str
            
       Next i
    
 End Sub

 Function funcb() As String
    funcb = "Hello VBA!"
 End Function

ここまで大丈夫ですね。

Functionを勉強する 作業手順 その2 引数が1つの場合

 

引数が1つの場合はプロシージャ名の後の「()」の中にByVal句を使って引数名とそのデータ型を指定します。

Function func2_1(ByVal num As Integer) As Integer

Dim square As Integer

square = num ^ 2

func2_1 = square

End Function

 

呼び出す場合は、下記のようになります。

参照渡し、値渡しは、下記の記事を参照してください。

Sub macro2_1()

    Dim str As Long

    Dim num As Integer

    num = 3

    str = func2_1(num)

    Range("A1") = str

End Sub




Function func2_1(ByVal num As Integer) As Integer

    Dim square As Integer

    square = num ^ 2

    func2_1 = square

End Function

ここで、私が勉強していた時なんですが、Functionを先に書くのか、Subを先に書くのか、迷ったことがあります。

正解はどっちでもいいですね。

やりたいことをFunction無で記載してみます。

Sub test()

    Dim str As Long
    Dim num As Integer
    Dim square As Integer
    num = 3

    square = num ^ 2
    str = square
    Range("B1") = str

 End Sub

同じ結果になります。

勉強していた時は、このコードについて、Functionを使って変形します。

Functionから、普通のコードへ変形します。

何度か繰り返すと、普通にできるようになります。

Functionを勉強する 作業手順 その3 引数が複数の場合

Sub macro4()
    Dim sum As Integer
    Dim mul As Integer
    Dim num1 As Integer
    Dim num2 As Integer
    num1 = 2
    num2 = 3
    sum = 0
    mul = func4(num1, num2, sum)
    
    Dim str As String
    str = CStr(num1) & " + " & CStr(num2) & " = " & CStr(sum) & ", " & CStr(num1) & " * " & CStr(num2) & " = " & CStr(mul)
    MsgBox str, vbInformation
End Sub
 
Function func4(ByVal num1 As Integer, ByVal num2 As Integer, ByRef sum As Integer) As Integer
    sum = num1 + num2
    func4 = num1 * num2
End Function

MsgBoxで表示しても面白くないので、一部変更します。

Sub macro4()
    Dim sum As Integer
    Dim mul As Integer
    Dim num1 As Integer
    Dim num2 As Integer
    num1 = 2
    num2 = 3
    sum = 0
    mul = func4(num1, num2, sum)
    
    Dim str As Long
    Dim str2 As Long
    str = sum
    str2 = mul
    Range("A1") = str
    Range("B1") = str2
End Sub
 
Function func4(ByVal num1 As Integer, ByVal num2 As Integer, ByRef sum As Integer) As Integer
    sum = num1 + num2
    func4 = num1 * num2
End Function

ここのコードは、ByValと、ByRef の使い方がポイントです。

変数sumは、足し算の合計を計算していますので、参照渡しなら、答えは0になります。

ここは、変数の値を書き換える必要があります。

このコードの素晴らしいところは、この点です。

参照渡しか、値渡しなのは、初心者には、なかなか理解できません。

言葉は、2つしかないのに、イメージがつきませんよね?

足し算の合計は、変わらないから、Functionの計算結果を、変えずに親プロシージャへ渡します。

ここがポイント

ここがポイント
Function8.png
コードを短くするには、Functionと、クラスモジュールは必須でしょう。
ご視聴者様から、クラスモジュールは面白いというコメントもいただきました。
すごく小さな喜びかもしれませんが、この喜びが重要なのです。
最初からはできません。
でも、脳裏で、Functionを考えることが重要なのです。
動画とブログでわかりやすくExcelとACCESSを紹介しています

まとめ

 

先は、まだあるのですが、結構長くなりましたので、一旦ここで終わります。

この続きは次回にします。

Functionをマスターしましょう。

今回も最後まで読んでいただきありがとうございました。

今回のサンプルファイルは、No260です。

毎日の業務が、3時間短縮できます

わからない事を延々と考えるのは、無駄です。

  • なんで作動かないの?
  • もうやだ!VBAなんか嫌い!
  • ネットで調べても情報がない!

必ず作動するコードが、ここにあります。

初心者でも、すぐに、集計、プレゼンができるようになる。書籍だけの勉強は今すぐやめよう!
電子書籍で、AMAZON1位
専門のスタッフが、電話、チャットで完全サポート
大手パソコンスクールよりも、圧倒的な低価格
スポンサーリンク

Twitterでフォローしよう

おすすめの記事