アプリ版:「スタンプのみでお礼する」機能のリリースについて

以前ここで
A1に1,10,3という文字列があるときB1でそれを集計して14としたいと質問したところ下記の回答をいただき大変ありがたく使わせていただいているのですがA1が空白だと#VALUE!とエラーが出てしまうのですがでないようにできないでしょうか
エクセルは2016です
よろしくお願いします

B1 =SumComma(A1)

【VBA】
 Function SumComma(ByVal カンマデータ As Variant) As Variant
  SumComma = Evaluate(Replace(カンマデータ, ",", "+"))
 End Function

A 回答 (6件)

「=」の直後に「IFERROR(」と入力し、引数[エラーの場合の値]には、空白を意味する「""」を指定します。

最後の「)」を忘れずに。
    • good
    • 0

Sub 集計マクロ()


Dim セルA As Range
Dim 値 As Integer
Dim 配列() As String
Dim i As Integer

' A1の値をセルAに設定
Set セルA = Range("A1")

' A1が空白でない場合の処理
If セルA.Value <> "" Then
' カンマ区切りの文字列を配列に分割
配列 = Split(セルA.Value, ",")

' 配列の各要素を整数に変換して集計
値 = 0
For i = LBound(配列) To UBound(配列)
値 = 値 + CInt(Trim(配列(i)))
Next i

' 集計結果をB1に表示
Range("B1").Value = 値
Else
' A1が空白の場合、B1も空白にする
Range("B1").Value = ""
End If
End Sub
    • good
    • 0

こんにちは



わからないものをいじくろうとせずに、ユーザ定義関数なので、B1セルに
 =IFERROR(SumComma(A1),"")
としておけば良いのでは?
    • good
    • 2

VBAを下記のように修正する。

一応、うまく行くことを確認したのですが、環境が違う(Excel2019)ので、自信がありません。
考え方は、
・三項演算子を使う
・Trimで空白を除いて、空欄でない場合の処理(最初のiif)
・","の後ろに数値がない場合もエラーとなるので、InStrRev(後ろから","を点検、len()と一致する(つまり、最後が","の場合) 二つ目のiifで、文字列に強制的に"0"を追加した上で、オリジナルの処理をする
・蛇足ながら、","で始まるケースはエラーになりませんので、スルー

Function SumComma(ByVal カンマデータ As Variant) As Variant
SumComma = IIf(Trim(カンマデータ) <> "", IIf(InStrRev(カンマデータ, ",") = Len(カンマデータ), Evaluate(Replace(カンマデータ & "0", ",", "+")), Evaluate(Replace(カンマデータ, ",", "+"))), "")
End Function

たまたま、三項演算子なるものを使ってしまったのですが、素直にVBAらしく組んだ方が良いと思います。

Function SumComma(ByVal カンマデータ As Variant) As Variant
If Trim(カンマデータ) <> "" Then
If InStrRev(カンマデータ, ",") = Len(カンマデータ) Then
SumComma = Evaluate(Replace(カンマデータ & "0", ",", "+"))
Else
SumComma = Evaluate(Replace(カンマデータ, ",", "+"))
End If
Else
SumComma = ""
End If
End Function
    • good
    • 0

B1 =SumComma(A1)


  ↓
B1 =SumComma("0"&A1&",0")
とか。

値が無いのに Replace で演算させようとしてるからエラーになるのだから、
元の値に対して影響のない範囲で加工した値を与えてやればいいわけです。

A1に "1,10,3"  という文字列ならば、
B1は "01,10,3,0" に対してマクロを実行しようとする。
A1が 空白 ならば、
B1は "0,0" に対してマクロを実行しようとする。
これなら、マクロはエラーにならない。

(´・ω・`) 難しく考えなくても良いと思うんだ。
    • good
    • 0

既に、VBAによるユーザ定義関数を変更せずに対応する方法が複数回答されています。

現実的な対応だと思います。

VBA自体を変更するのであれば、No.5さんのお考えをユーザ定義関数に反映させて、A1が「空白」のときは#VALUE!エラーではなく、0が返るということでよいのなら、

【VBA】
Function SumComma(ByVal カンマデータ As Variant) As Variant
SumComma = Evaluate(Replace(カンマデータ & ",0", ",", "+"))
End Function

というコードに変更すればよいのではないかと思います。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A