[[20100318103522]] 『VBAでの計算』(ちっく) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『VBAでの計算』(ちっく) ウィンドウズXP Excel2007

A列:日付
B列:時間
C列〜DK列:0or1

ボタンを押すことにより、A列B列をソートし
C列〜DK列の「1」をカウントするように作ってもらいました。
行数は都度変わりますし、1行に「1」が複数あった場合は
左の列の「1」のみをカウントします。

最終行のみがカウントされていないようです。
どこを修正すればよいのか分かりません。
どなたかよろしくお願いします

Private Sub CommandButton1_Click()

    Dim aCount()    As Long
    Dim aTotalCnt() As Long
    Dim lDateCnt    As Long
    Dim iColorFlag  As Integer
    Dim startflg As Integer
    Dim startrow As Long
    Dim aBYcount(14) As Long
    Dim aESCAcount(14) As Long
    Dim aBYtotal(14) As Long
    Dim aESCAtotal(14) As Long

    Dim bTotalCnt(14) As Long

    startflg = 0
    atartrow = 0

    '出力カウンタ
    lDateCnt = 1

    '出力色
    bColorFlag = 15

    'データ基準位置
    cntRow = CLng(Range("A1").End(xlDown).Row)
    cntColumn = CLng(Range("IV1").End(xlToLeft).Column)

    'データがある行から端っこまでを"日付(A1)応対時刻(B1)"でソート
    '先頭はヘッダなのでA2から
    Range("A2:IV" & CStr(cntRow)).Sort _
        Key1:=Range("A1"), Key2:=Range("B1")

    '基準日付&時間
    dBasicDate = CDate(Range("A1").Offset(1, 0))
    dBasicTime = Format(Range("A1").Offset(1, 1), "HH")

    'データ配列宣言
    ReDim aCount(cntColumn - 2)
    ReDim aTotalCnt(cntColumn - 2)

    For i = 1 To cntRow - 1

        '行の日付・時間を取得
        dDate = CDate(Range("A1").Offset(i, 0))
        dTime = Format(Range("A1").Offset(i, 1), "HH")

        '行の日付・時間が変わった場合
        If Not dBasicDate = dDate Or Not dBasicTime = dTime Or i = cntRow - 1 Then
            '日付&時間出力
            Range("A1").Offset(cntRow + lDateCnt, 1) = dBasicDate & "  " & dBasicTime & "時"

            '編集開始位置の記憶
            If startflg = 0 Then
                startrow = cntRow + lDateCnt
                startflg = 1
            End If

            '基準時間を現在の行にする
            dBasicDate = dDate
            dBasicTime = dTime

            '配列のデータを出力
            For k = 1 To cntColumn - 2
                Range("A1").Offset(cntRow + lDateCnt, k + 1) = aCount(k)
                Range("A1").Offset(cntRow + lDateCnt, k + 1).Interior.ColorIndex = bColorFlag

                '総計計算
                aTotalCnt(k) = aTotalCnt(k) + aCount(k)
            Next k

            '出力データ数
            lDateCnt = lDateCnt + 1

            'データ配列初期化
            Erase aCount
            ReDim aCount(cntColumn - 2)

            'Color設定
            If bColorFlag = 15 Then
                bColorFlag = 48
            Else
                bColorFlag = 15
            End If

            '総計出力
            If i = cntRow - 1 Then
                Range("A1").Offset(cntRow + lDateCnt, 1) = lDateCnt - 1 & "件の総計"

                For k = 1 To cntColumn - 2
                    Range("A1").Offset(cntRow + lDateCnt, k + 1) = aTotalCnt(k)
                    Range("A1").Offset(cntRow + lDateCnt, k + 1).Font.Bold = 1
                    Range("A1").Offset(cntRow + lDateCnt, k + 1).Interior.ColorIndex = 43
                Next k
            End If
        End If

        For j = 2 To cntColumn - 1

            lval = Range("A1").Offset(i, j)

            If Not lval = 0 Then
              aCount(j - 1) = aCount(j - 1) + 1
              Range("A1").Offset(i, j).Interior.ColorIndex = 6
              Exit For
            End If
        Next j
    Next i

 >A列:日付 B列:時間 C列〜DK列:0or1 
 >
 >ボタンを押すことにより、A列B列をソートし C列〜DK列の「1」をカウントするように作ってもらいました。

 その処理だけでこんなに長いの?

 >最終行のみがカウントされていないようです。どこを修正すればよいのか分かりません。

 > For i = 1 To cntRow - 1
                       ^^^
 これが原因?
 (seiya)

本当は他にも処理があり、もっと長いコードなのですが、
この部分のみを抜き出しております。

時間別に集計するようにしているのですが、最終行のみが
集計範囲に入っていないようでカウントされていません

「-1」の部分をとってみましたが駄目でした。

 > For i = 1 To cntRow - 1

(ちっく)


 ご質問の内容と、ご提示のコードの関連が不明です。
 >C列〜DK列の「1」をカウントするように作ってもらいました。

 とにかく
 >cntRow = CLng(Range("A1").End(xlDown).Row)
 で最終行を取得しているので、このあたりでしょう。

 cntRow = Range("A" & Rows.Count).End(xlUp).Row
 にして、 -1 を取ると、よいような気がします。

 (seiya)


すみません。良く分かってないので質問もきちんどできません。

教えて頂いた方法でも最終行のみがカウントされていない状況です。

もう少し自分で考えてみます。ありがとうございました

(ちっく)


     '総計出力
     If i = cntRow - 1 Then
         Range("A1").Offset(cntRow + lDateCnt, 1) = lDateCnt - 1 & "件の総計"
 ここですか?
 (semm)

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.