[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『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.