月刊プログラム!
Visual Basic For Excel

Vol_09
2001.JUN.06

Presented by kouta_y
感想等は掲示板、苦情はメールへ。

にこちゃん
さてさて、月刊といいつつ、全然不定期だ。
1ヶ月に何度も出したり、1ヶ月で出なかったり・・・。
まぁ気にしない気にしない。


自作関数を作ろう

自作関数を作るにあたって、まだここではやっていない事がいろいろ出てくるのですが、、、
とりあえず作ってみましょう。(テキトー・・・)


とりあえず関数とは?

「戻り値」があるものだと思ってください。
例えば、引数に「1」を指定したら、「2」になって返ってくるとか。
「ミリ秒」単位の数値を指定したら、「時間」単位で返ってくるとか。
VBではさまざまな関数がありますが、そのアプリケーション固有の処理をしたい場合などは、自分で関数を作らないといけないです。


作ってみる

とにもかくにも、作ってみるのが一番!
とりあえず下のコードを打ち込んでください。

Function EOL(ByVal Colm As Long) As Long
Dim
i As Long

i = 1 '1行目から
Do
 If
Cells(i, Colm) = "" Then '空白だったら抜ける
  Exit Do
 End If

 i = i + 1
Loop

EOL = i '戻り値
End Function

関数のプロージャ宣言は「Function」プロージャとなります。
関数というより「戻り値」を設定したい場合は。
「Sub」プロージャでは、戻り値は設定出来ません。

どういう関数かお分かりになりましたか?
えーっと、これは「最終ライン」を検出する関数です。

EOL = End Of Line(勝手に名づけた)

まず「引数」Colmは、列番号です。
んで「戻り値」は最終ラインとしてます。

中身の説明として、引数に指定された列の1行目から「空白セル」を探して、
空白が見つかったら、その行を最終ラインとしてます。

まぁこんだけの関数ですね。


使ってみる

んでば、上で作った関数と同じ「モジュール」内に、この関数を使った「プロージャ」を作ってみましょう。

Sub Sample()
Dim c As Long
Dim
r As Long

'Rnd ランダム値を返す関数

c = Rnd() * 3 + 1
r = EOL(c)

Cells(r, c).Value = "ここがEOL"
End Sub

実行結果:


何回か繰り返して実行させました。
こんな感じになりましたか?

このサンプルもわざわざ変数使わなくて出来るんですが、あえて使ってます。
自作関数EOLの戻り値は、変数rが貰ってます。
縦の位置は、VBA既存のRnd関数を使い、ランダムにしてます。


あれこれ

あれこれっても特にないんですが、、、
ただ自作関数が作れる様になると、プログラミングが上達した気分になります。
「俺ってすげ〜!」
みたいな。

自慢出来るくらいのが作れる様になってきたら、ライブラリ集として公開してみるのもよいかもしれません。
インターネット上では数多くの自作ライブラリが公開されています。
人が作ったのを使うってものテではありますが、やっぱ自分で作ったヤツの方が、なんか気分がいいですけどね・・・。

関数については、また詳しくやると思います。
まぁ気長に待ってれば、その内・・・。(その内?)