Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


11750 / 13645 ツリー ←次へ | 前へ→

【14323】Hirofumiさん、すみません。 ハルコ 04/5/26(水) 0:11 質問[未読]
【14361】Re:Hirofumiさん、すみません。 Hirofumi 04/5/26(水) 20:27 回答[未読]
【14382】Re:Hirofumiさん、すみません。 ハルコ 04/5/27(木) 15:10 お礼[未読]

【14323】Hirofumiさん、すみません。
質問  ハルコ  - 04/5/26(水) 0:11 -

引用なし
パスワード
   Hirohumiさん、こんばんは。ご無沙汰です。
以前、教えていただいた件について、どうしても分からないところがあり
改めて、ご質問させていただきました。

http://www.vbalab.net/vbaqa/c-board.cgi?cmd=one;no=13168;id=excel

当初の質問は、合計及び件数を算出するものでした。ですが、金額の欄に
文字列が一緒に入るセルが新たに追加されました。具体的には、
「*220,000」と数値の前に文字列が入ります。これについて、文字列が
入っているセルを無視して、算出したいのです。
合計は、文字列が入っているセルは無視されるのですが、件数の合計だけは
カウントされてしまします。どうやってもダメです。どのようにコードを
作ればいいのでしょうか?宜しくお願いいたします。

【14361】Re:Hirofumiさん、すみません。
回答  Hirofumi E-MAIL  - 04/5/26(水) 20:27 -

引用なし
パスワード
   F列が数値として認識出来ない場合は除外するコードを追加しました

Public Sub AddUp3()

  Dim i As Long
  Dim j As Long
  Dim lngListTop As Long
  Dim lngListEnd As Long
  Dim vntData As Variant
  Dim vntSum(3) As Variant
  Dim vntSubSum(3) As Variant
  Dim blnCalc As Boolean
  
  With ActiveSheet
    '集計開始の先頭行を設定
    lngListTop = 7
    '最終行を取得
    lngListEnd = .Cells(65536, "B").End(xlUp).Row + 1
    '先頭行から最終行まで繰り返し
    For i = lngListTop To lngListEnd
      '現在行のB〜H列の値を取得
      vntData = .Cells(i, "B").Resize(, 7).Value
      'もし、B列が""なら(日付の終り)
      If vntData(1, 1) = "" Then
        If blnCalc Then
          '小計を出力
          .Cells(i, "E").Resize(, 4).Value = vntSubSum
          '小計を計に加算、小計をクリア
          For j = 0 To 3
            vntSum(j) = vntSum(j) + vntSubSum(j)
            vntSubSum(j) = 0
          Next j
          '集計終了
          blnCalc = False
        End If
      Else
        'もし、B列が""で無いなら(日付が有る場合)
        If vntData(1, 1) <> "" Then
          '集計開始
          blnCalc = True
          '小計にF〜H列値、及びカウントを加算
          'もし、F列が数字なら小計に加算 ★修正
          If IsNumeric(Trim(vntData(1, 5))) Then
            vntSubSum(0) = vntSubSum(0) + 1
            For j = 1 To 3
              vntSubSum(j) = vntSubSum(j) _
                      + Val(vntData(1, 4 + j))
            Next j
          End If
        End If
      End If
    Next i
    '計を出力
    .Cells(i, "E").Resize(, 4).Value = vntSum
  End With
  
  Beep
  MsgBox "処理完了"
    
End Sub

【14382】Re:Hirofumiさん、すみません。
お礼  ハルコ  - 04/5/27(木) 15:10 -

引用なし
パスワード
   ▼Hirofumi さん、ありがとうございました。できました。
 こんな便利なコードがあったとは知りませんでした。
 助かりました。ありがとうございます。

11750 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free