LoginSignup
1
4

More than 5 years have passed since last update.

Excel マクロ VBA ~関数の書き方、使い方

Last updated at Posted at 2018-02-24

関数とは

値を受け取り、処理結果を返す。

  • 受け取る値は、引数
  • 処理結果は、戻り値
  • 値には種類があり、(数値型、文字列型、日付型など)という。

※引というけど、数字以外の文字、日付などもOK。
※引数(受けとる)、戻りには、型がある。

関数を書く

書き方は人それぞれ、ここから↓は、私の書き方。

(例)三角形の面積を求める関数。

コーディング前

↓を考える。

No. 項目    例      
1. 関数名    TriangleArea
2. 引数 (型) base(数値)、height(数値)
3. 戻り値(型) 三角形の面積(数値)
4. 処理手順   底辺 × 高さ ÷ 2

※関数名、引数は、好きな名前でOK。

コーディング

外側を書いて、処理(中身)を書く。

外側

コーディング前に考えた、1~3を使う。

VBA
Function TriangleArea(base As Integer, height As Integer) As Integer
Dim result As Integer        '戻り値(処理結果)を入れる変数を宣言

'後で、ここに処理を書く

TriangleArea = result        '戻り値(処理結果)を返す
End Function


Function ~ End Function
関数を書く範囲。


Dim 変数名 As 型
変数の宣言、および、型の指定。

Dimはないけど、引数も変数。
As Integerは、数値型。As Stringは、文字列型など。
※変数名は好きな名前でOK。

内側(処理)

コーディング前に考えた、4を使う。

VBA
'Function TriangleArea(base As Integer, height As Integer) As Integer
'Dim result As Integer       '戻り値(処理結果)を入れる変数を宣言

result = base * height / 2   '底辺×高さ÷2

'TriangleArea = result       '戻り値(処理結果)を返す
'End Function


補足
↑のコードは、↓のように書くこともできる。
コードはできる限り書かないことが理想なので、↓の方が理想的。
処理が複雑な場合、戻り値を入れる変数を用意した方が、コードが読みやすいと思うので、↑の書き方にしてる。
今回、処理は簡単だけど、説明のため書いた。

VBA
Function TriangleArea(base As Integer, height As Integer) As Integer

TriangleArea = base * height / 2   '底辺×高さ÷2

End Function

関数を使う

↓を考えてから使う。

  • 関数を使うと得られる結果(戻り値)は?
  • 引数は何個?
  • 引数の型は?

間違えると、大変。。。

使い方

関数名(値1、値2、・・・)

関数を使う場合、関数名と渡す値を記述するだけ。
↓だと、TriangleArea(7, 4)の部分

VBA
'関数を使う側
Sub AnyName()

Dim answer As Integer       '戻り値を受け取る変数を宣言。
answer = TriangleArea(7, 4) '関数に値7、4を渡す。answerに戻り値14が返ってくる。

End Sub


'関数  (値を受け取る base = 7, height = 4)
Function TriangleArea(base As Integer, height As Integer) As Integer
Dim result As Integer       '戻り値(処理結果)を入れる変数を宣言

result = base * height / 2  '底辺×高さ÷2

TriangleArea = result       '戻り値(処理結果)を返す。
End Function


Sub ~ End Sub
関数を使う側のコードを書く範囲。

エラーになる場合

anser = TriangleArea(7, "よん") 違う型を渡す

TriangleAreaの引数は、数値型。よって、文字を渡すとエラーになる。

anser = TriangleArea(7) 渡す値が少ない

TriangleAreaの引数は、底辺と高さの2つ。1つしか渡さない場合は、エラーになる。

Dim anser As String
anser = Triangle(7,4) 処理結果と異なる型で受け取る

TriangleAreaの戻り値は数値型。しかし、戻り値を文字列型で受けようとするとエラーになる。

2018.03.02追記
3つ目は、Excelではエラーにはなりませんでした。。。

さいごに

Excelには、SUM、AVERAGE、VLOOKUPなど様々な関数がデフォルトで用意されているため、関数を書く必要はほとんどない。
※全文みてくれた人、ありがとうごめんなさい。

つまり、Excelで覚えるべきことは、

  • 関数の使い方
  • 関数を使う側のコードの書き方(Sub ~ End Sub)

関数が使えれば、Excel作業は十分できる。
関数を使う側のコードの書き方がわかれば、マクロの作成・編集ができる。

1
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
4