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

1セルにカンマで区切られた数値が入力されています。
別のセルにユーザ関数を使ってカンマ区切りのセルを指定して合計値を算出したいと思っています。
VBAはどの様に記述すればいいのでしょうか。

A 回答 (3件)

こんな感じかな?


数値に小数が含まれるかどうか判らなかったのでDouble型にしてあります。
また、文字列等数値変換できないものが混じっていた場合(例:1,A,2)は、それを除いて合計しています。

Function Sample(aRange As Range) As Double
  Dim vData, i
  vData = Split(aRange.Value, ",")
  For i = 0 To UBound(vData)
    If IsNumeric(vData(i)) Then
      Sample = Sample + CDbl(vData(i))
    End If
  Next i
End Function
    • good
    • 0
この回答へのお礼

実に完璧ですね。有難うございました。
実は、わたしもすれ違いで、数値のみのセルを扱う記述で書いていました。

お礼日時:2011/08/19 13:45

標準モジュールにコピーしてご利用ください。



使い方:
  ユーザー設定内の変数値をご自由に変更してご利用ください
  ※基本的にロジック部は触らなくても動くと思います。
  ※エラー処理は行っておりません。
  ※ユーザー設定の変数を引数とすれば関数にも利用可能です。
  

'---------- コピー(ここから)-----------------------------------------
Option Explicit

'====================================================================
' カンマ区切りのデータの合計値を算出する
'====================================================================
Public Sub calValues()

'変数宣言
Dim intTargetColNo As Long 'カンマ区切りデータ格納列No
Dim strData() As String 'カンマ区切りデータ格納用配列
Dim lngAnswer As Long 'カンマ区切りデータの合計値一次保存用
Dim i, j As Long 'For文用ループカウンタ
Dim lngWriteRowNo As Long '計算を開始する&合計値を書き込む行No
Dim lngEndRowNo As Long 'カンマ区切りデータの最終行No
Dim intWriteColNo As Integer '合計値を書き込む列No
Dim strSheetName As String '処理するシート名

'---------- ユーザー設定<始まり> ---------
'カンマ区切りのデータがある列No A列=1,B列=2・・・
intTargetColNo = 1
'合計値を書き込む列No A列=1,B列=2・・・
intWriteColNo = 2
'計算を開始する行No ヘッダーが有る場合=2, 無い場合=1
lngWriteRowNo = 1
'処理するシートの名前 ""で括って
strSheetName = "Sheet1"
'---------- ユーザー設定<終わり> ---------

'---------- ロジック部<始まり> -----------
'カンマ区切りデータの最終行を取得
lngEndRowNo = Worksheets(strSheetName).Cells(intTargetColNo, 1).End(xlDown).Row

'合計値の算出と書込み
For i = lngWriteRowNo To lngEndRowNo
'カンマ区切りデータを配列に格納
strData() = Split(Worksheets(strSheetName).Cells(i, intTargetColNo), _
",", , vbTextCompare)
'合計値の初期化
lngAnswer = 0
'合計値の算出
For j = LBound(strData) To UBound(strData)
lngAnswer = lngAnswer + CLng(strData(j))
Next j
'合計値を書き込む
Worksheets(strSheetName).Cells(lngWriteRowNo, intWriteColNo) = lngAnswer
'次の行へ移動
lngWriteRowNo = lngWriteRowNo + 1
Next i
'---------- ロジック部<終わり> -----------

End Sub
'---------- コピー(ここまで)-----------------------------------------


以上、ご参考までに・・・
    • good
    • 0

function SumofCSV(strCSV) as long


dim a as variant
dim i as integer
SumofCSV = 0
a = split(strcst,",")
for i = 0 to ubound(a)-1
SumofCSV = SumofCSV + a(i)
next i
end function

見たいな感じ? 検証、エラー処理等をおこなってから使ってください。
    • good
    • 0
この回答へのお礼

有難うございます。
実は、自分も試しにつくってみたのですが、以下誤ったとこはありますでしょうか。
上の関数も試してみます。よろしくお願いします。

Function cellkei(myCell As String)
Dim myKei As Integer
Dim myBuf() As String
Dim i As Integer

myKei = 0
myBuf = Split(myCell, ",")
For i = 0 To UBound(myBuf)
myKei = myKei + myBuf(i)
Next i
cellkei = myKei
End Function

お礼日時:2011/08/19 10:55

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