[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『規定時間を超過した回数をカウントするマクロ』(zunzun)
A列に日付、1行目に名前、B2以下に退社時間が入力されている表があります。
各人毎に、21:00以降の退社時間になった回数をカウントする下記のマクロを作成しましたが、列のカウントが累積されてしまいます。(花子も1回)
修正するヒントをいただけないでしょうか。よろしくお願いいたします。
A B C D ・・・
1 太郎 花子 次郎
2 1日 18:00 17:15 21:20
3 2日 18:00 17:15 21:00
4 3日 22:00 17:15 18:20
5 4日 18:00 17:15 19:20
・
・
40 超過 1 0 2
回数
Sub 時間超過回数() '21時を超過した回数を求める
Dim i As Long, j As Long Dim CT1 As Long, FU1 As Boolean
i = 2 Do While Not Cells(1, i) = Empty
For j = 2 To 33 If Cells(j, i) = " " Then Exit For
FU1 = Cells(j, i) > TimeValue("21:00") If (FU1 = True) Then CT1 = CT1 + 1
Cells(40, i) = CT1 Next j i = i + 1 Loop
End Sub
< 使用 Excel:Excel2010、使用 OS:Windows7 >
Do While Not Cells(1, i) = Empty CT1 = 0 '※ For j = 2 To 33 (mm) 2016/05/19(木) 18:20
コードの組み立て方自体は、改善の余地多々あるとは思いますがさておき。
コードでは 21:00超 を対象にしていますので 花子 だけではなく 次郎 も、本来 1回なのに 2回とでてしまいますね。
If (FU1 = True) Then CT1 = CT1 + 1 Cells(40, i) = CT1
これを
If (FU1 = True) Then Cells(40, i).Value = Cells(40, i).Value + 1
この1行にして試してみてください。 なお、40行目は処理開示時点では空白(数値が入っていない)という前提です。
それと、
If Cells(j, i) = " " Then Exit For
これは
If Cells(j, i) = "" Then Exit For
この間違いですね? それとも、本当に、名前がある次の列には 空白 ではなく スペース が入っているということですか?
(β) 2016/05/19(木) 18:22
解決とのこと重畳です。
今後のために。
今回のテーマ、個人は縦列ですね。その個人ごとの数値の判定ですから、実際の処理は 縦方向に行いながら 横に繰り返す。
つまり
列の繰り返し制御(For/Next であれ Do/Loopであれ) その中で 行の繰り返しによる処理 繰り返し
こうした構成が自然です。
アップされたコードは、
行の繰り返し制御 その中で 列の繰り返しによる処理 繰り返し
このようになっていますね。
ところで、βが、この処理のコードを書くとしたら
Sub 時間超過回数2() '21時を超過した回数を求める
Range("B40").Resize(, Range("A1").CurrentRegion.Columns.Count - 1).Formula = "=COUNTIF(B2:B39,"">21:00"")"
End Sub
というコードにするでしょうね。(数式を残したくなければ、40行目の値変換を1行追加)
(β) 2016/05/19(木) 19:03
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.