Excelでカッコ内の数字も計算に含める方法

Excel・Excel VBA

みなさん,こんにちは.
シンノユウキ(y_stadio)です.

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

では,これを使ってみます:

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

タイトルとURLをコピーしました