みなさん,こんにちは。
シンノユウキ(shinno1993)です。
今回は,Excelでカッコ内の数字を計算結果に含める方法を紹介します.
カッコ内の数字を計算結果に含めたい.こんなシチュエーションは,極力発生しないようにしたいものですが,なかなかそうもいきません.残念ながら,どうしてもやらなきゃいけない時もあるのです.
最も簡単な対処法:セルの書式設定
カッコ内の数字,たとえば,以下のようにセルの書式設定でカッコ付きの数字にしている場合,SUM関数などでも計算することができます.

カッコ付きにしたい数字全てにこのような処理を施せば,Excelで使える関数の全てで計算可能になります.これでOK!という場面も少なくないと思いますので,これを使ってもOKでしょう.
しかし,残念ながらそうとも言えない場面もある.どうしても,以下のように文字列の形式で,セルの値にまでカッコを入り込ませたい.こんな時もあるでしょう.この場合,文字列として認識されるため,計算結果には含まれなくなります.
このような場合に,どうすれば良いのでしょうか.
ユーザー定義関数を使う
様々な解決法はあるかと思います.たとえば,別のシートにカッコの含まれない状態でコピーし,そこで改めて計算する,という方法もあるでしょう.しかし,やっぱり一つのシートで完結させたいなーとの思いから,今回はユーザー定義関数での方法を紹介したいと思います.
ユーザー定義関数は,標準モジュールにFunctionプロシージャとして書いていきます.
例として,合計を返す関数を作ってみたいと思います.範囲を受け取ったら,その範囲の中にカッコを含む文字列があったとしても,そのカッコ内の数字も合計に含める,としたいと思います.
コード全体は以下のようになります:
Function MYSUM(targetRange As Range)
Dim total As Currency
Dim tmp As Currency
Dim aryFindString() As Variant
aryFindString = Array("(", ")")
Dim rng As Range
For Each rng In targetRange
'空白の場合は処理しない
If rng.value <> "" Then
tmp = replaceByArrayString(rng.value, aryFindString)
total = total + tmp
End If
Next
MYSUM = total
End Function
Function replaceByArrayString(str As String, aryFindString)
Dim findString As Variant
For Each findString In aryFindString
str = replace(str, findString, "")
Next
replaceByArrayString = str
End Function
メインの関数は「MYSUM」です.SUM関数に似せて命名してみました.
範囲に含まれる値からカッコを削除し,それを合計するといったイメージです.
削除するカッコはaryFindStringとして配列内に含めました.もし,カッコの種類としてカギ括弧や角括弧などを含めたい,となった場合は,ここに追記するだけでOKになります.
実際にカッコを削除し,カッコのない状態の数字にする処理はreplaceByArrayStringで行っています.値と,カッコなどの削除したい文字列の配列を渡すと,綺麗さっぱりした数字が返ってきます.まぁ,このような処理をメインルーチンの中に入れてもいいんでしょうけど,なんとなく切り分けてみました.
では,これを使ってみます:

できたので,良しとしましょう.