プロが教える店舗&オフィスのセキュリティ対策術

Excel(2002以降)で、たとえば
 セルA1に 33,2,55,764
 セルA2に 654,654,8,165,46
のように、カンマ区切りで数字が入っていて、
その数字の合計をB列に表示させるということは可能でしょうか?
試算用にB列・C列などを使い、結果をD列、などという方法でも大丈夫ですが、数字がいくつに分けられるかはわからない(極端な話100個や200個の可能性もある)ので、その分のセルを確保するのは無理です。

数字はいくつ入っているかはセルごとに違い、何も入っていない場合や1つしかない場合もあります。

カンマを+に置換して計算させるような関数があればできそうだと思ったのですが、ヘルプでは探しだせませんでした。

なにかいい方法があればお願いします。

A 回答 (7件)

すみません、No.4です。



>極端な話100個や200個の可能性もある

No.4の方法では、
セルに入っている数値の個数に限界があるようです。

ちょっとテストしてみたところ
1桁の数字で130個あたり、
3桁の数字で 65個以上ぐらいでエラーになりました。

回避策はわかりません・・・すみません。
No.5、No.6の方のユーザー定義関数を試してみてください。

>EVALUATEというのはなんなのでしょうか?
VBAのメソッドにもありますが、
この場合は、VBAの前身(?)、 EXCEL4.0マクロの関数です。
    • good
    • 1

VBAのユーザ定義関数で


Public Function add(CVS As String) 'カンマ区切りの文字列の数値を足し算する
Dim a, x, sum
a = Split(CVS, ",")
sum = 0
For Each x In a
sum = sum + x
Next
add = sum
End Function
として、
B1
=add(A1)
として下にコピー
    • good
    • 1

> 100個や200個の可能性もある)ので、その分のセルを確保するのは無理です。



そういうことであれば、VBAによるユーザー定義関数を使うよりないと思います。

宜しかったら、次の手順でテストしてみてください。


CommaSplitAdd関数の設定手順

1.Alt + F11 で VBE(Visual Basic Editor)を開きます。
2.VBE のメニューから[挿入] -->[標準モジュール] を指定します。
3.モジュールウィンドウに下記コードをコピーして貼り付けます。
4.Alt + Q (または、右上隅の×)でウィンドウを閉じ、シートに戻ります。
5.メニューから[ツール]-->[マクロ]-->[セキュリティ]で「セキュリティレベル」を
 「中」にして[OK]します。

これで、CommaSplitAdd関数が使用出来ます。


書式:
= CommaSplitAdd(カンマで区切られた文字列式)

仕様
カンマで区切られた数字を加算します。
文字列式に数字以外が含まれている場合は、その文字を無視します。

使用例:

セルA1に 33,2,55,764 が入力されているとき、

 = CommaSplitAdd(A1)

で、854 が表示されます。

一般の関数のように使用することが出来ます。

これで、如何でしょうか。

Function CommaSplitAdd(CelStr As String)
Dim N As Long
Dim WStr As String
Dim W As String
Dim ValSum As Currency
For N = 1 To Len(CelStr & ",")
  W = Mid(CelStr & ",", N, 1)
  If IsNumeric(W) Then
    WStr = WStr & W
  Else
    If W = "," Then
      ValSum = ValSum + Val(WStr)
      WStr = ""
    End If
  End If
Next N
CommaSplitAdd = ValSum
End Function
    • good
    • 0

こんにちは。



次の方法を試してみてください。
***
B1に↓を入れ、以下オートフィルでコピー
------------------------
=SUBSTITUTE(A1,",","+")
------------------------

B1セルを選択した状態で、
メニュー<挿入>-<名前>-<定義>
 ▽
いちばん上の欄に適当な名前を入力(例:keisan)
 ▽
いちばん下の「参照範囲」欄に
↓のように入力してOKをクリック(Sheet1なら)
-------------------------
=EVALUATE(Sheet1!$B1)
-------------------------
絶対参照を間違えないようにしてください。
$B1 です。
 ▽
C1に↓を入力して、以下オートフィルでコピー
----------------------------------------
=keisan
--------
C列に計算結果が表示されると思います。

空白セルの場合はエラーになりますので
それを表示させないようにするには、
↓のようにしてください。
-------------------------------
=IF(B1="","",keisan)
-------------------------------
    • good
    • 1
この回答へのお礼

まさに求めていた方法でした。ありがとうございます。
ところで、EVALUATEというのはなんなのでしょうか?
Excelのヘルプでは出てこないですが・・・。

お礼日時:2005/04/17 15:43

FIND関数を絡めて、LEFT関数や、RIGHT関数は使えませんか。

    • good
    • 0
この回答へのお礼

※カンマ区切りでは支障が出るようなので、半角スペース区切りに変更しました。

A1に  10 32 200 10
B1に  =LEFT(A2,FIND(" ",A2)-1)
C1に  =RIGHT(A2,LEN(A2)-FIND(" ",A2))
D1に  =LEFT(C2,FIND(" ",C2)-1)
E1に  =RIGHT(C2,LEN(C2)-FIND(" ",C2))



といったようにしていけば(もう少しきれいな書き方があると思いますが)、可能は可能ですが、A1に100個の数字が含まれる場合、作業領域にいったいどれだけ使う気かという状態になってしまいますし、どうしてもA1に書ける数字の個数に制限ができてしまいます・・。

最初に考えたのは
B1に  ="="&SUBSTITUTE(A2," ","+")
とし、この文字列の式を数式として計算してくれる関数があれば、と思ったのですが、存在しないのでしょうかね・・・。

お礼日時:2005/04/17 14:22

A列を選択して「CTRL+H」で置換機能を使用し「,」から「+」に置換します。


B列に「="あ"&A1」と式を組み、置換した文字列の先頭に「あ」という文字をつけます。
B列をコピーしC列に〈形式を選択して貼り付け→値)と値のみを貼り付けます。
B列の選択し「あ」から「=」に置換します。

もっとスムーズなやり方があるかもしれませんが、これぐらいしか思いつきませんね。
    • good
    • 0
この回答へのお礼

それではA列が変更するたびにB列も計算させなおさないといけませんよね。
A列は形式を変更せず(カンマで区切った0個以上の数字)、その和を隣に自動計算させたいのです。
マクロを使えばy0923さんの方法でも自動計算させられますが、もうちょっとスマートな方法がないかと考えています。

お礼日時:2005/04/17 13:51

良く解りませんが、、、



A列を選んで、データ-区切り位置でカンマを指定してやれば各セルに分割出来ますよ。
    • good
    • 0
この回答へのお礼

そのデータ(A列)自体を変更したり、すべての数値をセルに分割する方法は無理なのです。

お礼日時:2005/04/17 13:46

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

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