関数って使っていますか?VBAには関数といって挙げられるものが、大きく分けて3つあります。VBA関数、ワークシート関数、そしてFunctionプロシージャを使って作る関数です。
この記事では、関数について関数とはなど基本的な内容から、
- ワークシート関数の使い方
- VBA関数一覧
- Functionで関数を作る方法
など具体的な内容についても解説していきます。今回は関数について、わかりやすく解説します!
関数とは
冒頭でもお伝えしましたが、VBAには関数といって挙げられるものが、大きく分けて3つあります。VBA関数、ワークシート関数、そしてFunctionプロシージャを使って作る関数の3つです。
VBA関数は、Visual Basicで用意されている関数が元となっていてVBAで使う関数のことです。ワークシート関数は、Excelのワークシートのセルに数式として入力する関数のことです。
そして、VBAではFunctionプロシージャを使って、自分で関数をつくることもできます。今回はこれらの関数について、詳しく解説していきます。
ワークシート関数の使い方
VBAでも、ワークシート関数を扱うことができます。VBAのコード内でワークシート関数を呼び出す場合やExcelのワークシートのセルにワークシート関数を入力する場合などです。それぞれの場合について、詳しく見ていきましょう。
ワークシート関数を呼び出す方法
VBAからワークシート関数を呼び出すには、ApplicationオブジェクトのWorksheetFunctionプロパティを使います。
Application.WorksheetFunction.ワークシート関数
サンプルコードで確認しましょう。
Sub macro1()
Range("B1").Value = Application.WorksheetFunction.Sum(Range("A1:A10"))
End Sub

このサンプルコードでは、ApplicationオブジェクトのWorksheetFunctionプロパティを使ってワークシート関数のSUMを呼び出しています。
ワークシート関数をセルに入力する方法
ワークシート関数をセルに入力することもできます。RangeオブジェクトのFormulaプロパティを使います。セルを参照する形式によって使うプロパティが異なります。
セルの参照形式には"A1"のように、列をアルファベットで、行を番号で表すA1形式と"R1C1"のように行(ROW)をRと行番号、列(COLUMN)をCと列番号で表すR1C1形式があります。
A1形式で数式を入力する場合はFormulaプロパティを、R1C1形式で数式を入力する場合はFormulaR1C1プロパティを使います。数式を入力する記述は以下のとおりです。
A1形式の場合:
Range(“A1”).Formula = “=数式”
R1C1形式の場合:
Range(“A1”).FormulaR1C1 = “=数式”
サンプルコードで確認しましょう。
Sub macro2()
' A1形式の場合
Range("B1").Formula = "=SUM(A1:A10)"
' R1C1形式の場合
Range("C1").FormulaR1C1 = "=SUM(R1C1:R10C1)"
End Sub

このサンプルコードでは、RangeオブジェクトのFormulaプロパティとFormulaR1C1プロパティを使って、セルにワークシート関数を入力しています。
ワークシート関数の使い方について、VLookup関数の使い方をこちらで詳しく解説しています。ぜひ参考にしてください。
VBA関数一覧
VBAには様々な関数が用意されています。用意されている関数をアルファベット順に一覧にまとめてみました。どのような関数があるのか、確認しておくとよいでしょう。
また、リンクしているサイトで使い方を詳しく解説していますので、ぜひ参考にしてください。
| 名前 | 説明 |
|---|---|
| Abs | 指定した数値の絶対値を返す |
| Array | 指定した要素で作成された配列を返す |
| Asc/AscB/AscW | 指定した文字の文字コードを返す |
| Atn | 指定した数値のアークタンジェントを返す |
| CallByName | 指定したオブジェクトのメソッドを実行、もしくはプロパティを取得 |
| CBool | 指定した値をブール型(Boolean)に変換 |
| CByte | 指定した値を数値型(Byte)に変換 |
| CCur | 指定した値を数値型(Currency)に変換 |
| CDate | 指定した値を日付型(Date)に変換 |
| CDbl | 指定した値を数値型(Double)に変換 |
| CDec | 指定した値を数値型(Decimal)に変換 |
| Choose | リストの中から選択した値を返す |
| Chr/ChrB/ChrW | 指定した文字コードに対応する文字を返す |
| CInt | 指定した値を数値型(Integer)に変換 |
| CLng | 指定した値を数値型(Long)に変換 |
| Cos | 指定した角度の余弦(コサイン)を返す |
| CreateObject | ActiveXオブジェクトへの参照を作成して返す |
| CSng | 指定した値を数値型(Single)に変換 |
| CStr | 指定した値を文字列型(String)に変換 |
| CurDir | 指定したドライブの現在のパスを返す |
| CVar | 指定した値をバリアント型(Variant)に変換 |
| CVDate | 指定した値を内部形式が日付型(Date)のVariant型に変換 |
| CVErr | 指定したエラー番号に対応するエラーを返す |
| Date | 現在の日付を返す |
| DateAdd | 日時に指定した時間を加算して返す |
| DateDiff | 二つの日時の間隔を返す |
| DatePart | 任意の日時の特定項目を返す |
| DateSerial | 任意の数値で指定された年月日を日付型に変換 |
| DateValue | 任意の文字列で指定された年月日を日付型に変換 |
| Day | 指定した日付の日を返す |
| DDB | 指定した方法を使用して特定の期における資産の減価償却費を返す |
| Dir | 指定したパターンに一致するファイルやフォルダを返す |
| DoEvents | プログラムが占領している制御をオペレーティングシステムに返す |
| Environ | 環境変数の値を取得 |
| EOF | ランダムアクセスモードまたはシーケンシャル入力モードで開いたファイルの現在位置がファイルの末尾に達している場合にTrueを返す |
| Error | 指定したエラー番号に対応するエラーメッセージを返す |
| Exp | eを底とする数式のべき乗(指数関数)を計算 |
| FileAttr | FileOpen関数で開いているファイルのファイルモードを返す |
| FileDateTime | ファイルの作成日時または最終更新日時を返す |
| FileLen | ファイルのサイズをバイト単位で返す |
| Filter | 文字列の配列から指定した文字列だけを含む配列を返す |
| Fix | 指定した数値の整数部を返す |
| Format | 値を指定した書式で文字列型(String)に変換 |
| FormatCurrency | システムで定義されている通貨形式に従った文字列を返す |
| FormatDateTime | 指定した日時形式に従った文字列を返す |
| FormatNumber | 指定した数値形式に従った文字列を返す |
| FormatPercent | パーセント形式に従った文字列を返す |
| FreeFile | FileOpen関数で使用可能なファイル番号を返す |
| FV | 定額の支払いを一定期間続けたとき、その期間中の利率が一定だった場合の将来価値を返す |
| GetAllSettings | SaveSetting関数で保存したレジストリデータを配列形式で返す |
| GetAttr | ファイルまたはフォルダの属性を示す値を返す |
| GetSetting | SaveSetting関数で保存したレジストリデータから指定のキー設定値を返す |
| Hex | 指定した数値を16進数の文字列にして返す |
| Hour | 指定した時刻の時を返す |
| IIf | 式を評価して2つの値の内1つを返す |
| IMEStatus | IMEの現在の状態を返す |
| Input/InputB | ファイルから指定した文字数の文字列を返す |
| InputBox | ダイアログに入力した文字列を返す |
| InStr/InStrB | 文字列を検索し見つかった最初の位置を返す |
| InStrRev | 文字列の後ろから指定の文字列を検索し、最初に見つかった位置を返す |
| Int | 指定した数値の整数部を返す |
| IPmt | 定額の支払いを一定期間続けたとき、その期間中の利率が一定だった場合の投資期間内の指定した期に支払う利息を返す |
| IRR | 一連の定期的なキャッシュフローに対する内部利益率を返す |
| IsArray | 指定した値が配列かどうかを判定 |
| IsDate | 指定した値を日付型(Date)に変換できるかを判定 |
| IsEmpty | 指定した値がEmpty値かどうかを判定 |
| IsError | 指定した値がError値(例外型)かどうかを判定 |
| IsMissing | プロシージャに省略可能な引数が渡されたかどうかを判定し、結果をブール型で返す |
| IsNull | 指定した値がNull値かどうかを判定 |
| IsNumeric | 指定した値を数値型(Integerなど)に変換できるかを判定 |
| IsObject | 指定した値がオブジェクトかどうかを判定 |
| Join | 文字列の配列を区切り文字で結合して返す |
| Lbound | 配列の最小インデックスを返す |
| Lcase | 指定した文字列内のアルファベットを大文字から小文字に変換 |
| Left/LeftB | 文字列の先頭から指定した文字数分の文字列を返す |
| Len/LenB | 文字列の文字数を返すまたは構造体など型のサイズを返す |
| LoadPicture | 指定のフォームオブジェクトに画像をロード |
| Loc | 開いているファイルの、現在の読み込み位置または書き込み位置を返す |
| LOF | FileOpen関数で開いているファイルの長さを返す |
| Log | 自然対数を返す |
| Ltrim | 文字列の先頭のスペースを取り除いて返す |
| Mid/MidB | 文字列の指定した位置から文字数分の文字列を返す |
| Minute | 指定した時刻の分を返す |
| MIRR | 定期的な支払いと収益に対して修正内部利益率を返す |
| Month | 指定した日付の月を返す |
| MonthName | 数値で指定した月を表す文字列を返す |
| MsgBox | メッセージボックスを表示しその結果を返す |
| Now | 現在の日時を返す |
| NPer | 定額の支払いを一定期間続けたとき、その期間中の利率が一定だった場合の投資に必要な期間を返す |
| NPV | 定期的なキャッシュフローと割引率に基づいて、投資の正味現在価値を返す |
| Oct | 指定した値を8進数で表した文字列で返す |
| Partition | 指定した値が含まれる範囲を求め、その結果を文字列で返す |
| Pmt | 定額の支払いを一定期間続けたとき、その期間中の利率が一定だった場合の投資に必要な定期支払額を返す |
| PPmt | 定額の支払いを一定期間続けたとき、その期間中の利率が一定だった場合の指定した期に支払う元金を返す |
| PV | 定額の支払いを一定期間続けたとき、その期間中の利率が一定だった場合の現在の投資価値を返す |
| QBColor | 指定した色番号に対応するRGBコードを表す数値を返す |
| Rate | 投資期間を通じての利率を返す |
| Replace | 文字列を置換 |
| RGB | RGBで示す色の値を返す |
| Right/RightB | 文字列の最後から指定した文字数分の文字列を返す |
| Rnd | 乱数(ランダムな数値)を返す |
| Round | 小数点を偶数丸めした値を返す |
| Rtrim | 文字列の最後のスペースを取り除いて返す |
| Second | 指定した時刻の秒を返す |
| Sgn | 指定した値の符号を返す |
| Shell | 外部プログラムを実行 |
| Sin | 指定した角度の正弦(サイン)を返す |
| SLN | 定額法による減価償却費を返す |
| Space | 指定した数のスペースを返す |
| Spc | Print関数またはPrintLine関数と共に使用し、指定した数のスペースを挿入することで出力の位置を移動 |
| Split | 区切り文字で区切られた文字列を配列にして返す |
| Sqr | 指定した数値の平方根を返す |
| Str | 指定した数値を文字列に変換 |
| StrComp | 文字列を比較 |
| StrConv | 文字列を大文字や全角、ひらがななどに変換して返す |
| String | 文字を指定した数だけ並べて返す |
| StrReverse | 指定した文字列の並びを逆にした文字列を返す |
| Switch | 式のリストを評価し、リストの中で真(True)となる最初の式に関連付けられた値を返す |
| SYD | 定額逓減法による減価償却費を返す |
| Tab | Print関数またはPrintLine関数と共に使用し、指定した数のタブを挿入することで出力の位置を移動 |
| Tan | 指定した角度の正接(タンジェント)を返す |
| Time | 現在の時刻を返す |
| Timer | 午前0時から経過した秒数を表す数値を返す |
| TimeSerial | 数値で指定した時刻を表す日付型の値を返す |
| TimeValue | 文字列で指定した時刻を表す日付型の値を返す |
| Trim | 文字列の先頭と最後の空白を取り除いて返す |
| TypeName | 指定した変数の型名を返す |
| Ubound | 配列の最大インデックスを返す |
| Ucase | 指定した文字列内のアルファベットを小文字から大文字に変換 |
| Val | 文字列を適切な数値型(Integerなど)に変換して返す |
| VarType | 指定した変数のデータ型を示す数値を返す |
| Weekday | 指定した日付の曜日を数値で返す |
| WeekdayName | 指定した曜日の名前を返す |
| Year | 指定した日付の年を返す |
Functionで関数を作る方法
Functionプロシージャを使って、自分で関数を作ることもできます。Functionプロシージャの使い方については、こちらで詳しく解説していますので、ぜひ参考にしてください。
まとめ
ここでは、関数について説明しました。VBA関数、ワークシート関数、Functionプロシージャを使いこなせれば、便利な関数を簡単に使えて、できることが増えてくるのではないかと思います。
使いこなすことができるように、この記事を何度も参考にして下さいね!






