月刊プログラム!
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関数を使い、ランダムにしてます。
あれこれ
あれこれっても特にないんですが、、、
ただ自作関数が作れる様になると、プログラミングが上達した気分になります。
「俺ってすげ~!」
みたいな。
自慢出来るくらいのが作れる様になってきたら、ライブラリ集として公開してみるのもよいかもしれません。
インターネット上では数多くの自作ライブラリが公開されています。
人が作ったのを使うってものテではありますが、やっぱ自分で作ったヤツの方が、なんか気分がいいですけどね・・・。
関数については、また詳しくやると思います。
まぁ気長に待ってれば、その内・・・。(その内?)