以前ここで
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
No.2
- 回答日時:
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
No.4
- 回答日時:
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
No.5
- 回答日時:
B1 =SumComma(A1)
↓
B1 =SumComma("0"&A1&",0")
とか。
値が無いのに Replace で演算させようとしてるからエラーになるのだから、
元の値に対して影響のない範囲で加工した値を与えてやればいいわけです。
A1に "1,10,3" という文字列ならば、
B1は "01,10,3,0" に対してマクロを実行しようとする。
A1が 空白 ならば、
B1は "0,0" に対してマクロを実行しようとする。
これなら、マクロはエラーにならない。
(´・ω・`) 難しく考えなくても良いと思うんだ。
No.6ベストアンサー
- 回答日時:
既に、VBAによるユーザ定義関数を変更せずに対応する方法が複数回答されています。
現実的な対応だと思います。VBA自体を変更するのであれば、No.5さんのお考えをユーザ定義関数に反映させて、A1が「空白」のときは#VALUE!エラーではなく、0が返るということでよいのなら、
【VBA】
Function SumComma(ByVal カンマデータ As Variant) As Variant
SumComma = Evaluate(Replace(カンマデータ & ",0", ",", "+"))
End Function
というコードに変更すればよいのではないかと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) Excel VBAでフォルダ内の全テキストファイルの任意データを取得について 7 2021/12/18 16:00
- Visual Basic(VBA) まとめシートから集計シートへA列のコードが一致したら1行コピーするマクロをネット上で見つけました。こ 1 2022/08/30 14:11
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたいの続き 5 2023/01/24 00:16
- Visual Basic(VBA) VBA 改行コードの取り方 1 2022/03/22 14:14
- Visual Basic(VBA) 超難 日付に対するクロス集計 7 2021/12/06 20:56
- Excel(エクセル) 空白行も含めてソートしたい 3 2022/02/01 23:13
- Visual Basic(VBA) クリップボードに貼付している文字列が、マクロで別ブックへ転記すると、消えてしまう 1 2023/10/15 13:36
- Excel(エクセル) Rangeメソッドは失敗しました。globalオブジェクトについて 6 2021/11/21 21:54
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/07/15 15:12
- Visual Basic(VBA) xmlドキュメントから別拡張子で保存したい 4 2023/09/12 11:08
このQ&Aを見た人はこんなQ&Aも見ています
-
プロが教える店舗&オフィスのセキュリティ対策術
中・小規模の店舗やオフィスのセキュリティセキュリティ対策について、プロにどう対策すべきか 何を注意すべきかを教えていただきました!
-
複雑なシフト表から1日ごとの出勤者、シフトを抜き出したいです
Excel(エクセル)
-
倍数の求め方? 教えてほしい。
Excel(エクセル)
-
指定した範囲から、文字A、文字Bの数をそれぞれカウントする数式が知りたいです。よろしくお願いします。
Excel(エクセル)
-
-
4
excelの数字がE+になってしまいます。 数値に変えればセルでの見え方は治ることはわかるのですが、
Excel(エクセル)
-
5
エクセルの計算式で教えてほしいことがあります 5000+1500✖️1.1✖️4 その後100のくら
Excel(エクセル)
-
6
エクセルのcountifのワイルドカードについて
Excel(エクセル)
-
7
勤怠表エクセル関数について
Excel(エクセル)
-
8
[大至急!]ExcelSheetFreeの使い方がわかりません
Excel(エクセル)
-
9
エクセルで リンクが切れない状態で文字を入れたい
Excel(エクセル)
-
10
Excel初心者です、教えてください。
Excel(エクセル)
-
11
Excelでオートフィルをした時に,値のバグについて
Excel(エクセル)
-
12
エクセルで可視セルにのみ値貼り付けをする方法があったら教えて下さい やりたいこととしては フィルター
Excel(エクセル)
-
13
こんにちは。Excelのデータ入力規則のことで教えてください。複数条件を指定したい場合の構文ですが、
Excel(エクセル)
-
14
エクセル→貼り付けのオプション→貼り付け先の書式に合わせる が急にできなくなった。 どうして?
Excel(エクセル)
-
15
こんにちは。Excelのことで教えてください。特定のセルへの入力時に、ある特定の文字の入力ができない
Excel(エクセル)
-
16
手書き日報にエクセルのデータを重ねて印刷したい
Excel(エクセル)
-
17
Excelで、改行がある場合の条件式(関数)の書き方を教えてください
Excel(エクセル)
-
18
下記のような条件付き書式はどうやって設定したら良いのか教えていただきたいです。 180時間を満たない
Excel(エクセル)
-
19
セル内の数式をVBAで書くと
Excel(エクセル)
-
20
Excelについて質問です。 タブキーを押すと編集しているセルが右隣に移りますが、私はタブキーを押し
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで、絶対値の平均を算...
-
Excelのセルの色指定をVBAから...
-
Excel オートフィルタのリスト...
-
ExcelのINDEXとMATCH関数でスピ...
-
[エクセル]連続する指定範囲か...
-
配列がとびとびである場合の書き方
-
エクセルでエラーを無視して一...
-
【VBA】ユーザーフォーム リス...
-
Split関数でLong配列に格納する...
-
array関数で格納した配列の型を...
-
CSVファイルの読み込みと表示(V...
-
VBA 配列に格納した値の平均の...
-
【VBA】 動的な変数(定数)の指定
-
Datatableへの代入
-
[VBA]改行入りのセルの値を配列...
-
【VBScript】Dictionaryの項目(...
-
.NET - 配列変数を省略可能の引...
-
VBA listBoxについて
-
DataSetから、DataTableを取得...
-
読み込みで一行おきに配列に格納
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelのセルの色指定をVBAから...
-
ExcelのINDEXとMATCH関数でスピ...
-
array関数で格納した配列の型を...
-
[エクセル]連続する指定範囲か...
-
表にフィルターをかけ、絞った...
-
VBA listBoxについて
-
エクセルで、絶対値の平均を算...
-
配列がとびとびである場合の書き方
-
DataSetから、DataTableを取得...
-
[VBA]改行入りのセルの値を配列...
-
VBA 配列に格納した値の平均の...
-
配列のSession格納、及び取得方...
-
【VBA】ユーザーフォーム リス...
-
エクセルでエラーを無視して一...
-
SUMPRODUCT関数を用いた最小値
-
Excel VBA 配列の分割について
-
Excelのオートフィルタで抽出し...
-
VB6.0 ファイルの一括読込み
-
Excel オートフィルタのリスト...
-
VBAで指定期間の範囲を抽出し、...
おすすめ情報