【Excel VBA】オリジナルFunctionでSUM関数に独自の計算式を加えよう

エクセルには便利な標準の関数であるワークシート関数がありVBAで利用することができます。
例えばVLOOKUP関数やSUM関数など300以上の種類が利用可能です。
これらのワークシート関数にオリジナルの計算式を加えてカスタムすれば少ないプログラムで効率的に処理が行うことができます。
今回はおなじみのSUM関数に計算式を加える方法をご紹介したいと思います。

SUM関数に計算式を加えよう

まずSUM関数を呼び出します。

WorksheetFunction.Sum(<セルの範囲指定、もしくは数値を最大30個まで指定>

【参考】WorksheetFunction メソッド (Excel)

今回はセルの範囲”A1:A10″を指定しますので、べた書きですと

WorksheetFunction.Sum(Range("A1:A10"))

となります。

ただこの場合、A列限定となってしまいB列やC列に使う場合はさらに関数を定義しなければならず効率が悪いのでセルの範囲を引数で渡せるように変更します。
引数の形式にRangeを指定しますので、SUM関数の「Range」は省略します。

WorksheetFunction.Sum(rCells)

次に計算式を加えます。まずは簡単に50を加算してみましょう。

WorksheetFunction.Sum(rCells) + 50

これで計算式の準備ができました。


Functionプロシージャとして指定しよう

Functionプロシージャとして指定する場合は、Function~End Functionで囲います。
関数名は「EX_SUMADD50」とします。こちらの値は自由に指定ができます。

Function EX_SUMADD50(rCells As Range) As String
  EX_SUMADD50 = WorksheetFunction.Sum(rCells) + 50
End Function

はい、これでオリジナル関数が完成しました!

Functionプロシージャを登録しましょう

①適当な数値をA列、B列、C列に入力します。

②[Alt] + [F11]を押下してVBAのコンソールを開きます。

③標準モジュールを追加します。
左ペインのVBAProjectを右クリックし、「挿入」、「標準モジュール」を選択します。

④右ペインのウインドウに上記の関数を入力します。

⑤エクセルのシートに戻り、追加した関数「=EX_SUMADD50(A1:A10)」をA11のセルへ挿入します。

B列、C列へ関数を加えるため、B列、C列へドラッグし関数をコピーしてください。

はい!できましたね!
A列、B列、C列のそれぞれの合計値に50が加算された結果が表示されたことが確認できました!

SUM関数以外の関数を利用してみよう

今度は平均値を算出するAverage関数に変えて再計算をしてみたいと思います。
関数名は「EX_AVERAGEADD50」とします。

Function EX_AVERAGEADD50(rCells As Range) As String
  EX_AVERAGEADD50 = WorksheetFunction.Average(rCells) + 50
End Function

①「EX_AVERAGEADD50」Functionプロシージャを追加登録します。

②A列の11行目に入力されている「=EX_SUMADD50(A1:A10)」を「=EX_AVERAGEADD50(A1:A10)」へ変更し、B~C列へドラッグします。

はい!できましたね!
A列、B列、C列のそれぞれの合計値が平均値になり、50が加算された結果が表示されたことが確認できました!

Functionプロシージャは標準の関数であるワークシート関数と組み合わせるとぐっとカンタンに複雑な処理ができることがわかったかと思います。

今後も用途別にいろいろな使い方をご紹介したいと思います。

【参考】計算系のワークシート関数一覧

計算系のワークシート関数一覧です。

WorksheetFunction オブジェクト (Excel)

数学/三角関数
ABS 数値の絶対値を返します。
ACOS 数値のアークコサインを返します。
ACOSH 数値の双曲線逆余弦(ハイパーボリックコサインの逆関数)を返します。
AGGREGATE リストまたはデータベースの総計を返します。
ASIN 数値のアークサインを返します。
ASINH 数値の双曲線逆正弦(ハイパーボリックサインの逆関数)を返します。
ATAN 数値のアークタンジェントを返します。
ATAN2 指定されたx-y座標のアークタンジェントを返します。
ATANH 数値の双曲線逆正接(ハイパーボリックタンジェントの逆関数)を返します。
CEILING 指定された基準値の倍数のうち、最も近い値に数値を切り上げます。
CEILING.PRECISE 指定された基準値の倍数のうち、最も近い値に数値を切り上げます。数値は正負に関係なく切り上げられます。
COMBIN 指定された個数を選択するときの組み合わせの数を返します。
COS 指定された角度のコサインを返します。
COSH 数値の双曲線余弦(ハイパーボリックコサイン)を返します。
DEGREES ラジアンを度に変換します。
EVEN 指定された数値を最も近い偶数に切り上げた値を返します。
EXP eを底とする数値のべき乗を返します。
FACT 数値の階乗を返します。
FACTDOUBLE 数値の二重階乗を返します。
FLOOR 指定された基準値の倍数のうち、最も近い値に数値を切り捨てます。
FLOOR.PRECISE 指定された基準値の倍数のうち、最も近い値に数値を切り上げます。数値は正負に関係なく切り上げられます。
GCD 最大公約数を返します。
INT 指定された数値を最も近い整数に切り捨てます。
LCM 最小公倍数を返します。
LN 数値の自然対数を返します。
LOG 指定された数を底とする数値の対数を返します。
LOG10 10を底とする数値の対数(常用対数)を返します。
MDETERM 配列の行列式を返します。
MINVERSE 行列の逆行列を返します。
MMULT 2つの配列の行列積を返します。
MOD 数値を除算したときの剰余を返します。
MROUND 指定された値の倍数になるように、数値を切り上げまたは切り捨てて丸めた数値を返します。
MULTINOMIAL 指定された複数の数値の多項係数を返します。
ODD 指定された数値を最も近い奇数に切り上げた値を返します。
PI 円周率πを返します。
POWER 数値のべき乗を返します。
PRODUCT 引数リストの積を返します。
QUOTIENT 除算の商の整数部を返します。商の余り(小数部)を切り捨てます。
RADIANS 度をラジアンに変換します。
RAND 0以上1未満の乱数を返します。
RANDBETWEEN 指定された数値の範囲内の乱数を返します。
ROMAN アラビア数字を、ローマ数字を表す文字列に変換します。
ROUND 数値を四捨五入して指定された桁数にします。
ROUNDDOWN 数値を切り捨てて指定された桁数にします。
ROUNDUP 数値を切り上げて指定された桁数にします。
SERIESSUM 数式で定義されるべき級数を返します。
SIGN 数値の正負を調べます。
SIN 指定された角度のサインを返します。
SINH 数値の双曲線正弦(ハイパーボリックサイン)を返します。
SQRT 正の平方根を返します。
SQRTPI (数値*π)の平方根を返します。
SUBTOTAL リストまたはデータベースの集計値を返します。
SUM 引数を合計します。
SUMIF 指定された検索条件に一致するセルの値を合計します。
SUMIFS セル範囲内で、複数の検索条件を満たすセルの値を合計します。
SUMPRODUCT 指定された配列の対応する要素の積の合計を返します。
SUMSQ 引数の2乗の和(平方和)を返します。
SUMX2MY2 2つの配列で対応する配列要素の平方差を合計します。
SUMX2PY2 2つの配列で対応する配列要素の平方和を合計します。
SUMXMY2 2つの配列で対応する配列要素の差を2乗して合計します。
TAN 指定された角度のタンジェントを返します。
TANH 数値の双曲線正接(ハイパーボリックタンジェント)を返します。
TRUNC 数値の小数部を切り捨てて、整数または指定された桁数にします。
統計関数
AVEDEV データ全体の平均値に対するそれぞれのデータの絶対偏差の平均を返します。
AVERAGE 引数の平均値を返します。
AVERAGEA 数値、文字列、および論理値を含む引数の平均値を返します。
AVERAGEIF 範囲内の検索条件に一致するすべてのセルの平均値(算術平均)を返します。
AVERAGEIFS 複数の検索条件に一致するすべてのセルの平均値(算術平均)を返します。
BETADIST β分布の分布関数の値を返します。
BETAINV β分布の分布関数の逆関数の値を返します。
BINOMDIST 二項分布の確率関数の値を返します。
CHIDIST カイ2乗分布の片側確率の値を返します。
CHIINV カイ2乗分布の片側確率の逆関数の値を返します。
CHITEST カイ2乗(χ2)検定を行います。
CONFIDENCE 母集団に対する信頼区間を返します。
CORREL 2つの配列データの相関係数を返します。
COUNT 引数リストの各項目に含まれる数値の個数を返します。
COUNTA 引数リストの各項目に含まれるデータの個数を返します。
COUNTBLANK 指定された範囲に含まれる空白セルの個数を返します。
COUNTIF 指定された範囲に含まれるセルのうち、検索条件に一致するセルの個数を返します。
COUNTIFS 指定された範囲に含まれるセルのうち、複数の検索条件に一致するセルの個数を返します。
COVAR 共分散を返します。共分散とは、2組の対応するデータ間での標準偏差の積の平均値です
CRITBINOM 累積二項分布の値が基準値以上になるような最小の値を返します。
DEVSQ 標本の平均値に対する各データの偏差の平方和を返します。
EXPONDIST 指数分布関数を返します。
FDIST F分布の確率関数の値を返します。
FINV F分布の確率関数の逆関数の値を返します。
FISHER フィッシャー変換の値を返します。
FISHERINV フィッシャー変換の逆関数の値を返します。
FORECAST 既知の値を使用し、将来の値を予測します。
FREQUENCY 頻度分布を縦方向の数値の配列として返します。
FTEST F検定の結果を返します。
GAMMADIST ガンマ分布関数の値を返します。
GAMMAINV ガンマ分布の累積分布関数の逆関数の値を返します。
GAMMALN ガンマ関数(x)の値の自然対数を返します。
GEOMEAN 相乗平均を返します。
GROWTH 指数曲線から予測される値を返します。
HARMEAN 調和平均を返します。
HYPGEOMDIST 超幾何分布関数の値を返します。
INTERCEPT 線形回帰直線の切片の値を返します。
KURT 指定されたデータの尖度を返します。
LARGE 指定されたデータの中でk番目に大きなデータを返します。
LINEST 回帰直線の係数の値を配列で返します。
LOGEST 回帰指数曲線の係数の値を配列で返します。
LOGINV 対数正規分布の累積分布関数の逆関数の値を返します。
LOGNORMDIST 対数正規分布の累積分布関数の値を返します。
MAX 引数リストに含まれる最大の数値を返します。
MAXA 数値、文字列、および論理値を含む引数リストから最大の数値を返します。
MEDIAN 引数リストに含まれる数値のメジアン(中央値)を返します。
MIN 引数リストに含まれる最小の数値を返します。
MINA 数値、文字列、および論理値を含む引数リストから最小の数値を返します。
MODE 最も頻繁に出現する値(最頻値)を返します。
NEGBINOMDIST 負の二項分布の確率関数の値を返します。
NORMDIST 正規分布の累積分布関数の値を返します。
NORMINV 正規分布の累積分布関数の逆関数の値を返します。
NORMSDIST 標準正規分布の累積分布関数の値を返します。
NORMSINV 標準正規分布の累積分布関数の逆関数の値を返します。
PEARSON ピアソンの積率相関係数rの値を返します。
PERCENTILE 配列のデータの中で、百分位に当たる値を返します。
PERCENTRANK データの中で、百分率に基づく順位を返します。
PERMUT 与えられた標本数から指定した個数を選択する場合の順列を返します。
POISSON ポアソン確率の値を返します。
PROB 指定した範囲に含まれる値が上限と下限との間に収まる確率を返します。
QUARTILE 配列に含まれるデータから四分位数を抽出します。
RANK 数値のリストの中で、指定した数値の序列を返します。
RSQ ピアソンの積率相関係数の2乗値を返します。
SKEW 分布の歪度を返します。
SLOPE 回帰直線の傾きを返します。
SMALL 指定されたデータの中で、k番目に小さな値を返します。
STANDARDIZE 正規化された値を返します。
STDEV 引数を正規母集団の標本と見なし、標本に基づいて母集団の標準偏差の推定値を返します。
STDEVA 数値、文字列、および論理値を含む引数を正規母集団の標本と見なし、母集団の標準偏差の推定値を返します。
STDEVP 引数を母集団全体と見なし、母集団の標準偏差を返します。
STDEVPA 数値、文字列、および論理値を含む引数を母集団全体と見なし、母集団の標準偏差を返します。
STEYX 回帰直線上の予測値の標準誤差を返します。
TDIST スチューデントのt分布の値を返します。
TINV スチューデントのt分布の逆関数の値を返します。
TREND 回帰直線による予測値を配列で返します。
TRIMMEAN データの中間項の平均を返します。
TTEST スチューデントのt分布に従う確率を返します。
VAR 引数を正規母集団の標本と見なし、標本に基づいて母集団の分散の推定値(不偏分散)を返します。
VARA 数値、文字列、および論理値を含む引数を正規母集団の標本と見なし、標本に基づいて母集団の分散の推定値(不偏分散)を返します。
VARP 引数を母集団全体と見なし、母集団の分散(標本分散)を返します。
VARPA 数値、文字列、および論理値を含む引数を母集団全体と見なし、母集団の分散(標本分散)を返します。
WEIBULL ワイブル分布の値を返します。
ZTEST z検定の片側P値を返します。
財務関数
ACCRINT 定期的に利息が支払われる証券の未収利息額を返します。
ACCRINTM 満期日に利息が支払われる証券の未収利息額を返します。
AMORDEGRC 減価償却係数を使用して、各会計期における減価償却費を返します。
AMORLINC 各会計期における減価償却費を返します。
COUPDAYBS 利払期間の第1日目から受渡日までの日数を返します。
COUPDAYS 受渡日を含む利払期間内の日数を返します。
COUPDAYSNC 受渡日から次の利払日までの日数を返します。
COUPNCD 受領日後の次の利息支払日を返します。
COUPNUM 受領日と満期日の間に利息が支払われる回数を返します。
COUPPCD 受領日の直前の利息支払日を返します。
CUMIPMT 指定した期間に、貸付金に対して支払われる利息の累計を返します。
CUMPRINC 指定した期間に、貸付金に対して支払われる元金の累計を返します。
DB 定率法(Fixed-decliningBalanceMethod)を使用して、特定の期における資産の減価償却費を返します。
DDB 倍額定率法(Double-decliningBalanceMethod)を使用して、特定の期における資産の減価償却費を返します。
DISC 証券に対する割引率を返します。
DOLLARDE 分数で表されたドル単位の価格を、小数表示に変換します。
DOLLARFR 小数で表されたドル価格を、分数表示に変換します。
DURATION 定期的に利子が支払われる証券の年間のマコーレーデュレーションを返します。
EFFECT 実効年利率を返します。
FV 投資の将来価値を返します。
FVSCHEDULE 投資期間内の一連の金利を複利計算することにより、初期投資の元金の将来価値を返します。
INTRATE 全額投資された証券の利率を返します。
IPMT 投資期間内の指定された期に支払われる金利を返します。
IRR 一連の定期的なキャッシュフローに対する内部利益率を返します。
ISPMT 投資期間内の指定された期に支払われる金利を返します。
MDURATION 額面価格を$100と仮定して、証券に対する修正マコーレーデュレーションを返します。
MIRR 定期的に発生する一連の支払い(負の値)と収益(正の値)に基づいて、修正内部利益率を返します。
NOMINAL 名目年利率を返します。
NPER 投資に必要な期間を返します。
NPV 定期的に発生する一連の支払い(負の値)と収益(正の値)、および割引率を指定して、投資の正味現在価値を算出します。
ODDFPRICE 1期目の日数が半端な証券に対して、額面$100あたりの価格を返します。
ODDFYIELD 1期目の日数が半端な証券の利回りを返します。
ODDLPRICE 最終期の日数が半端な証券に対して、額面$100あたりの価格を返します。
ODDLYIELD 最終期の日数が半端な証券の利回りを返します。
PMT 定期支払額を算出します。
PPMT 指定した期に支払われる元金を返します。
PRICE 定期的に利息が支払われる証券に対して、額面$100あたりの価格を返します。
PRICEDISC 割引証券の額面$100あたりの価格を返します。
PRICEMAT 満期日に利息が支払われる証券に対して、額面$100あたりの価格を返します。
PV 投資の現在価値を返します。
RATE 投資の利率を返します。
RECEIVED 全額投資された証券に対して、満期日に支払われる金額を返します。
SLN 定額法(Straight-lineMethod)を使用して、資産の1期あたりの減価償却費を返します。
SYD 級数法(Sum-of-Year’sDigitsMethod)を使用して、特定の期における減価償却費を返します。
TBILLEQ 米国財務省短期証券(TB)の債券換算利回りを返します。
TBILLPRICE 米国財務省短期証券(TB)の額面$100あたりの価格を返します。
TBILLYIELD 米国財務省短期証券(TB)の利回りを返します。
VDB 倍額定率法または指定した方法を使用して、指定した期間における資産の減価償却費を返します。
XIRR 定期的でないキャッシュフローに対する内部利益率を返します。
XNPV 定期的でないキャッシュフローに対する正味現在価値を返します。
YIELD 利息が定期的に支払われる証券の利回りを返します。
YIELDDISC 米国財務省短期証券(TB)などの割引債の年利回りを返します。
YIELDMAT 満期日に利息が支払われる証券の利回りを返します。
エンジニアリング関数
BESSELI 修正ベッセル関数In(x)を返します。
BESSELJ ベッセル関数Jn(x)を返します。
BESSELK 修正ベッセル関数Kn(x)を返します。
BESSELY ベッセル関数Yn(x)を返します。
BIN2DEC 2進数を10進数に変換します。
BIN2HEX 2進数を16進数に変換します。
BIN2OCT 2進数を8進数に変換します。
COMPLEX 実数係数および虚数係数を”x+yi”または”x+yj”の形式の複素数に変換します。
CONVERT 数値の単位を変換します。
DEC2BIN 10進数を2進数に変換します。
DEC2HEX 10進数を16進数に変換します。
DEC2OCT 10進数を8進数に変換します。
DELTA 2つの値が等しいかどうかを調べます。
ERF 誤差関数の積分値を返します。
ERFC 相補誤差関数の積分値を返します。
GESTEP 数値がしきい値以上であるかどうかを調べます。
HEX2BIN 16進数を2進数に変換します。
HEX2DEC 16進数を10進数に変換します。
HEX2OCT 16進数を8進数に変換します。
IMABS 指定した複素数の絶対値を返します。
IMAGINARY 指定した複素数の虚数係数を返します。
IMARGUMENT 引数シータ(ラジアンで表した角度)を返します。
IMCONJUGATE 複素数の複素共役を返します。
IMCOS 複素数のコサインを返します。
IMDIV 2つの複素数の商を返します。
IMEXP 複素数のべき乗を返します。
IMLN 複素数の自然対数を返します。
IMLOG10 複素数の10を底とする対数(常用対数)を返します。
IMLOG2 複素数の2を底とする対数を返します。
IMPOWER 複素数の整数乗を返します。
IMPRODUCT 複素数の積を返します。
IMREAL 複素数の実数係数を返します。
IMSIN 複素数のサインを返します。
IMSQRT 複素数の平方根を返します。
IMSUB 2つの複素数の差を返します。
IMSUM 複素数の和を返します。
OCT2BIN 8進数を2進数に変換します。
OCT2DEC 8進数を10進数に変換します。
OCT2HEX 8進数を16進数に変換します。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です