戻る  □一般操作のサロン  □ 使用方法  □ 新着記事  □ 新規に質問する!  □ トピック一覧  □ 検索  □ 過去ログ
[ 最新記事及び返信フォームをトピックトップへ ]
このトピック参照回数 :
利用時間の計算

    [196196] 利用時間の計算-

    ■親トピック/記事引用/メール受信=OFF■

    □投稿者/ ミケ -(2024/05/02(06:37))
    □U R L/

        A   B      C    D
      1 氏名  1日目    2日目  3日目
      2 山田  9:00     9:15 8:50
      3 山田  18:00    18:00 18:00
      4 林   9:00   8:00 7:00
      5 林   15:00    18:00 17:30
      6 森元  7:00     7:50 9:00
      7 森元  19:00    19:00 18:00

      上下で引き算をしています。

      9:00 8:45 9:10
      6:00 10:00 10:30
      12:00 11:10 9:00


      引き算の結果から8:00を引いたものが
      1:00 0:45 1:10
      0:00 2:00 2:30
      4:00 3:10 1:00

      となります。
      引き算の結果が
      <0となる場合をX
      0=2:00の場合をA
      2:00=<3:00の場合をB
      3:00<の場合をC
      としてそれぞれの記号を出すと
      A A A
      X B B
      C C A
      となります。
      それぞれの合計をだすと
      X 1 0 0
      A 1 1 2
      B 0 1 1
      C 1 1 0
      結果がとなります。



        A   B      C    D
      1 氏名  1日目    2日目  3日目
      2 山田  9:00     9:15 8:50
      3 山田  18:00    18:00 18:00
      4 林   9:00   8:00 7:00
      5 林   15:00    18:00 17:30
      6 森元  7:00     7:50 9:00
      7 森元  19:00    19:00 18:00

      この状態から次の結果を出すマクロを作成してください。
       
      10 A   B   C    D

      11 X  1 0 0
      12 A  1 1 2
      13 B  0 1 1
      14 C  1 1 0




    [196197] Re[1]: 利用時間の計算-

    記事引用/メール受信=OFF■

    □投稿者/ 半平太 -(2024/05/02(16:48))
    □U R L/
      こんな事かな?
      
      Sub test()
          Dim r As Range, RW As Long, CL As Long
          Dim Ary, V, AryRW, Ret() As Long
          
          Ary = Array(-2000, 480, 600, 660)
          
          Set r = Range("B2:D7")
          ReDim Ret(1 To 4, 1 To r.Columns.Count)
          
          With Application
              For CL = 1 To r.Columns.Count
                  For RW = 1 To r.Rows.Count Step 2
                      V = .Round((r(RW + 1, CL) - r(RW, CL)) * 1440, 0)
                      AryRW = .Match(V, Ary)
                      Ret(AryRW, CL) = Ret(AryRW, CL) + 1
                  Next RW
              Next CL
          End With
          
          '結果表示
          Range("A11:A14") = [{"X";"A";"B";"C"}]
          Range("B11").Resize(4, UBound(Ret, 2)) = Ret
      End Sub


      この記事にはVBAのコードが含まれています。

      緑の太文字→注釈
      茶色の太文字→条件分岐
      赤の太文字→ループ
      青の太文字→その他




    [196198] Re[2]: 利用時間の計算-

    解決!!ありがとうございました! / 記事引用/メール受信=OFF■

    □投稿者/ ミケ -(2024/05/02(22:18))
    □U R L/

      ありがとうございます。
      自分では到底できませんでした。
      まだわかないところはありますが、勉強してわかるようにします。

      もし可能でしたら名前の隣のセルに(A列)に赤と青としてグループを入れて



         A   B     C     D
      1  グループ 氏名  1日目    2日目  3日目
      2  赤   山田  9:00     9:15   8:50
      3  赤   山田  18:00    18:00  18:00
      4  赤   林   9:00     8:00   7:00
      5  赤   林   15:00    18:00   17:30
      6  青   森元  7:00     7:50   9:00
      7  青   森元  19:00    19:00  18:00



      この状態から次の結果を出すマクロを作成してください。
      よろしくお願いいたします。


      11〜14行目に赤グループを
      16〜19行目に青グループの結果を出したいです。
       
      10 A  B   C    D

      11 X  1 0 0
      12 A 1 1 1
      13 B 0 1 1
      14 C 0 0 0

      16 X 0 0 0
      17 A 0 0 1
      18 B 0 0 0
      19 C 1 1 0




    [196199] Re[3]: 利用時間の計算-

    記事引用/メール受信=OFF■

    □投稿者/ 半平太 -(2024/05/02(23:24))
    □U R L/
      こんな事かな?
      
      Sub test()
          Dim r As Range, rG As Range, RW As Long, CL As Long
          Dim Ary, V, AryRW, Ret() As Long
          
                            '8:00,10:00,11:00
          Ary = Array(-2000, 480, 600, 660)   '時間境界(1440倍して整数の分の配列とする)                                    '-
      
          Set r = Range("C2:E7")
          Set rG = r.Offset(, -2).Resize(, 1)  'グループ範囲(A列)
          
          ReDim Ret(1 To 9, 1 To r.Columns.Count) '9行の結果配列に変更する
          
          With Application
              For CL = 1 To r.Columns.Count
                  For RW = 1 To r.Rows.Count Step 2
                      V = .Round((r(RW + 1, CL) - r(RW, CL)) * 1440, 0)
                      
                      AryRW = .Match(V, Ary)
                      '青なら、5行下を加算対象に変更する
                      AryRW = AryRW + IIf(rG(RW, 1) = "青", 5, 0)
                      
                      Ret(AryRW, CL) = Ret(AryRW, CL) + 1
                  Next RW
              Next CL
          End With
          
          '結果表示
          Range("A11:A19") = [{"X";"A";"B";"C";"空行";"X";"A";"B";"C"}]
          Range("B11").Resize(9, UBound(Ret, 2)) = Ret
          Range("A15").Resize(1, UBound(Ret, 2) + 1) = Empty
      End Sub


      この記事にはVBAのコードが含まれています。

      緑の太文字→注釈
      茶色の太文字→条件分岐
      赤の太文字→ループ
      青の太文字→その他




    [196204] Re[4]: 利用時間の計算-

    記事引用/メール受信=OFF■

    □投稿者/ ミケ -(2024/05/04(05:18))
    □U R L/

      ありがとうございます。
      説明も書いていただいて、助かります。
      これから勉強していきます。
      またご縁がありましたら教えてください。



このトピック内容の全ページ数 / [0]

このトピックに書きこむ
Name/
E-Mail/

└>このツリーのレス記事をメールで受信しますか? YES/ NO/
Title/
URL/
Comment/ 通常モード->  図表モード-> (←の場合適当に改行を入れて下さい)
タグが使用できます。例 ⇒ <font color="blue">文字</font>
解決!!ありがとうございました! 解決       保留中です・・・ 保留        迷宮入りorほかあたって見ます・・ 迷宮入       すいませ〜ん。誰か〜! Help! ←※回答者専用
解決したらチェック       保留(コードテスト中など・・)         解決不可orレスが全く付かなくてほかのサイトに行くときなど・・
削除キー/
(半角8文字以内) 


- Child Forum -
Edit:ゆう-G