【VBA入門】関数の使い方(VBA関数一覧、ワークシート関数の入力)

関数って使っていますか?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

method01

画像:実行結果

このサンプルコードでは、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

method02

画像:実行結果

このサンプルコードでは、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指定した角度の余弦(コサイン)を返す
CreateObjectActiveXオブジェクトへの参照を作成して返す
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指定したエラー番号に対応するエラーメッセージを返す
Expeを底とする数式のべき乗(指数関数)を計算
FileAttrFileOpen関数で開いているファイルのファイルモードを返す
FileDateTimeファイルの作成日時または最終更新日時を返す
FileLenファイルのサイズをバイト単位で返す
Filter文字列の配列から指定した文字列だけを含む配列を返す
Fix指定した数値の整数部を返す
Format値を指定した書式で文字列型(String)に変換
FormatCurrencyシステムで定義されている通貨形式に従った文字列を返す
FormatDateTime指定した日時形式に従った文字列を返す
FormatNumber指定した数値形式に従った文字列を返す
FormatPercentパーセント形式に従った文字列を返す
FreeFileFileOpen関数で使用可能なファイル番号を返す
FV定額の支払いを一定期間続けたとき、その期間中の利率が一定だった場合の将来価値を返す
GetAllSettingsSaveSetting関数で保存したレジストリデータを配列形式で返す
GetAttrファイルまたはフォルダの属性を示す値を返す
GetSettingSaveSetting関数で保存したレジストリデータから指定のキー設定値を返す
Hex指定した数値を16進数の文字列にして返す
Hour指定した時刻の時を返す
IIf式を評価して2つの値の内1つを返す
IMEStatusIMEの現在の状態を返す
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開いているファイルの、現在の読み込み位置または書き込み位置を返す
LOFFileOpen関数で開いているファイルの長さを返す
Log自然対数を返す
Ltrim文字列の先頭のスペースを取り除いて返す
Mid/MidB文字列の指定した位置から文字数分の文字列を返す
Minute指定した時刻の分を返す
MIRR定期的な支払いと収益に対して修正内部利益率を返す
Month指定した日付の月を返す
MonthName数値で指定した月を表す文字列を返す
MsgBoxメッセージボックスを表示しその結果を返す
Now現在の日時を返す
NPer定額の支払いを一定期間続けたとき、その期間中の利率が一定だった場合の投資に必要な期間を返す
NPV定期的なキャッシュフローと割引率に基づいて、投資の正味現在価値を返す
Oct指定した値を8進数で表した文字列で返す
Partition指定した値が含まれる範囲を求め、その結果を文字列で返す
Pmt定額の支払いを一定期間続けたとき、その期間中の利率が一定だった場合の投資に必要な定期支払額を返す
PPmt定額の支払いを一定期間続けたとき、その期間中の利率が一定だった場合の指定した期に支払う元金を返す
PV定額の支払いを一定期間続けたとき、その期間中の利率が一定だった場合の現在の投資価値を返す
QBColor指定した色番号に対応するRGBコードを表す数値を返す
Rate投資期間を通じての利率を返す
Replace文字列を置換
RGBRGBで示す色の値を返す
Right/RightB文字列の最後から指定した文字数分の文字列を返す
Rnd乱数(ランダムな数値)を返す
Round小数点を偶数丸めした値を返す
Rtrim文字列の最後のスペースを取り除いて返す
Second指定した時刻の秒を返す
Sgn指定した値の符号を返す
Shell外部プログラムを実行
Sin指定した角度の正弦(サイン)を返す
SLN定額法による減価償却費を返す
Space指定した数のスペースを返す
SpcPrint関数またはPrintLine関数と共に使用し、指定した数のスペースを挿入することで出力の位置を移動
Split区切り文字で区切られた文字列を配列にして返す
Sqr指定した数値の平方根を返す
Str指定した数値を文字列に変換
StrComp文字列を比較
StrConv文字列を大文字や全角、ひらがななどに変換して返す
String文字を指定した数だけ並べて返す
StrReverse指定した文字列の並びを逆にした文字列を返す
Switch式のリストを評価し、リストの中で真(True)となる最初の式に関連付けられた値を返す
SYD定額逓減法による減価償却費を返す
TabPrint関数またはPrintLine関数と共に使用し、指定した数のタブを挿入することで出力の位置を移動
Tan指定した角度の正接(タンジェント)を返す
Time現在の時刻を返す
Timer午前0時から経過した秒数を表す数値を返す
TimeSerial数値で指定した時刻を表す日付型の値を返す
TimeValue文字列で指定した時刻を表す日付型の値を返す
Trim文字列の先頭と最後の空白を取り除いて返す
TypeName指定した変数の型名を返す
Ubound配列の最大インデックスを返す
Ucase指定した文字列内のアルファベットを小文字から大文字に変換
Val文字列を適切な数値型(Integerなど)に変換して返す
VarType指定した変数のデータ型を示す数値を返す
Weekday指定した日付の曜日を数値で返す
WeekdayName指定した曜日の名前を返す
Year指定した日付の年を返す

Functionで関数を作る方法

Functionプロシージャを使って、自分で関数を作ることもできます。Functionプロシージャの使い方については、こちらで詳しく解説していますので、ぜひ参考にしてください。

まとめ

ここでは、関数について説明しました。VBA関数、ワークシート関数、Functionプロシージャを使いこなせれば、便利な関数を簡単に使えて、できることが増えてくるのではないかと思います。

使いこなすことができるように、この記事を何度も参考にして下さいね!

この記事を書いた人

【プロフィール】
DX認定取得事業者に選定されている株式会社SAMURAIのマーケティング・コミュニケーション部が運営。「質の高いIT教育を、すべての人に」をミッションに、IT・プログラミングを学び始めた初学者の方に向け記事を執筆。
累計指導者数4万5,000名以上のプログラミングスクール「侍エンジニア」、累計登録者数1万8,000人以上のオンライン学習サービス「侍テラコヤ」で扱う教材開発のノウハウ、2013年の創業から運営で得た知見に基づき、記事の執筆だけでなく編集・監修も担当しています。
【専門分野】
IT/Web開発/AI・ロボット開発/インフラ開発/ゲーム開発/AI/Webデザイン

目次