前書き
値を返す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関数の引数にして呼び出しています。
④でarryataiがsimeiInfoが処理して返した値を受け取ります
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個の値を持ち帰るのです。
コメント