みなさん,こんにちは。
シンノユウキ(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
で行っています.値と,カッコなどの削除したい文字列の配列を渡すと,綺麗さっぱりした数字が返ってきます.まぁ,このような処理をメインルーチンの中に入れてもいいんでしょうけど,なんとなく切り分けてみました.
では,これを使ってみます:
できたので,良しとしましょう.