[[20160519172859]] 『規定時間を超過した回数をカウントするマクロ』(zunzun) ページの最後に飛ぶ

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

 

『規定時間を超過した回数をカウントするマクロ』(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


βさん、mmさん
修正できました。ありがとうございました。
(zunzun) 2016/05/19(木) 18:46

 解決とのこと重畳です。

 今後のために。

 今回のテーマ、個人は縦列ですね。その個人ごとの数値の判定ですから、実際の処理は 縦方向に行いながら
 横に繰り返す。

 つまり

 列の繰り返し制御(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


βさん
おはようございます。
提示頂いた自然なコードに修正してみます。
ありがとうございました。
(zunzun) 2016/05/20(金) 10:43

コメント返信:

[ 一覧(最新更新順) ]


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