Excelには便利な標準の関数であるワークシート関数があり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を右クリックし、「挿入」、「標準モジュール」を選択します。
④右ペインのウインドウに上記の関数を入力します。
⑤Excelのシートに戻り、追加した関数「=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進数に変換します。 |
コメントを残す