• ベストアンサー

Excelでカンマ区切りの合計をユーザ関数で得たい

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

質問者が選んだベストアンサー

  • ベストアンサー
  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.2

こんな感じかな? 数値に小数が含まれるかどうか判らなかったので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

Pitch-don
質問者

お礼

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

その他の回答 (2)

回答No.3

標準モジュールにコピーしてご利用ください。 使い方:   ユーザー設定内の変数値をご自由に変更してご利用ください   ※基本的にロジック部は触らなくても動くと思います。   ※エラー処理は行っておりません。   ※ユーザー設定の変数を引数とすれば関数にも利用可能です。    '---------- コピー(ここから)----------------------------------------- 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 '---------- コピー(ここまで)----------------------------------------- 以上、ご参考までに・・・

  • ShowMeHow
  • ベストアンサー率28% (1424/5027)
回答No.1

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 見たいな感じ? 検証、エラー処理等をおこなってから使ってください。

Pitch-don
質問者

お礼

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

関連するQ&A