小規模老人保健施設の給食業務向けExcelVBA練習帳、給食帳票管理にVBAを活用、UserFormからセルを操作する4、Function関数

Excel VBA

前書き

Excel初心者向けVBA練習帳シリーズではVBAのプログラム記述においては、VBAを知らないほんとの初心者を対象に記事を書いています。
そのため、プログラムの構造や書き方に非常に回りくどい冗長なところが多くあります。何を隠そう、自分も相当な初心者でありまして、経験は多少長くあるのですがド素人同然でして、もっといい書き方があるんだとは思いますが。
とにかくPCに使われないでPCを操ったというささやかな喜びをほかの人にも味わっていただきたく、一生懸命に書いています。
誤字脱字等ありましたらご容赦いただきますようお願いします。

値を返すFunction関数の使い方

概要

ファンクションプロシージャは値を返す関数です。値を返すとは・・・

プロシージャ内である値を導き出す処理をして、得られた結果(値)を、このファンクションプロシージャを呼び出した側に提供する。

呼び出し側

'テキストボックスに入力した氏名の情報をデータベースに転記する処理
Private Sub CommandButton1_Click()
'
'氏名が入力されている最終行を取得
Dim lastgyou As Long
lastgyou = Sheet1.Cells(Rows.Count, "A").End(xlUp).Row

Call siitoTenki(lastgyou)
End Sub

Private Sub siitoTenki(lastgyou As Long)
'関数simeiInfoから得た氏名情報をシートに貼り付けする処理
Dim arryatai As Variant
arryatai = simeiInfo(lastgyou)
'
'シートのセル範囲に配列をダイレクトに貼り付けする
With Sheet1
    .Range(.Cells(lastgyou + 1, 1), Cells(lastgyou + 1, 3)).Value = arryatai
End With

'後始末
TextBox1 = ""
TextBox1.SetFocus

End Sub

 

①はフォームの氏名を登録するためのコマンドボタンをクリックしたときにイベントが発生して以降のプログラムが処理されます。

②まず、この行でシートに値を転記する処理を呼び出しています。

Call siitoTenki(lastgyou)

このSubプロシージャsiitoTenkiは引数を要求していますから

lastgyou = Sheet1.Cells(Rows.Count, “A”).End(xlUp).Row

lastgyouで得られた最終行を指定してます

③呼び出された転記をするプロシージャに移って、引数でもらった最終行を更に氏名情報を引き出すFunction関数の引数にして呼び出しています。

④でarryataisimeiInfoが処理して返した値を受け取ります

simeiInfoは登録番号と氏名、よみの3個の値を持った配列変数です

⑤で最終行を指定したセル範囲に配列変数の値を代入しています。

値を返す側

Private Function simeiInfo(lastgyou As Long) As Variant
'テキストボックスに入力した氏名の情報を配列にして返す関数です
Dim setNumb As Integer
Dim yomi As String
Dim simei As String
Dim result(2) As Variant   'リザルト(結果)0-2

'各変数に値をセット
With Sheet1
    '入力された氏名を取得
    simei = Me.TextBox1.Value

    'simeiのよみがなを取得
    yomi = Application.GetPhonetic(simei)

    '登録番号を取得
    'If Left(.Cells(lastgyou, "A"), 1) = "登" Then
    If .Cells(lastgyou, "A") = "登録番号" Then
        setNumb = 1
    Else
        setNumb = .Cells(lastgyou, "A") + 1
    End If
End With
'配列に格納
result(0) = setNumb
result(1) = simei
result(2) = yomi
'返却
simeiInfo = result
End Function

 

このファンクションプロシージャでは①で3個の値をそれぞれの変数に格納し②で宣言した配列にそれぞれ格納します。

③がsimeiInfo(ファンクション関数名、自分自身)にresultを代入しています。

(これが値を返すという意味につながります)

ここではsimeiInfoというファンクションプロシージャは3個の値を持ち帰るのです。

 

コメント

タイトルとURLをコピーしました