こんばんは。
昔、若い時に、派遣の人の仕事から覚えたことですが、どんなにマクロができても、入力を得意とする人には敵わないです。定型業務の場合は、マクロが良いのですが、そうでない場合は、手入力のほうが早いことが多いです。
とりあえず、試してください。コマンドボタンなどに設置すると便利だと思います。
'標準モジュール
'--------------------------------------------------------
Sub ListUpMacro()
Dim rng As Range
Dim flg As Boolean
Dim i As Long, m As Long, n As Long, k As Long
Dim r As Variant
Dim cnt As Integer
Dim Dif As Date
Dim buf As String, buf2 As String, tmp As String
Const F As String = "A1" 'データの左端上
Const L As String = "A20" 'コピー先
Const iCLR As Integer = 3 '赤
Dim Stock() As Variant
Dif = Val(Range(F).Cells(3, 1).Value) - Val(Range(F).Cells(2, 1).Value)
If Dif <= 0 Then MsgBox "基準以外の表です", 48: Exit Sub
Range(L).CurrentRegion.ClearContents 'コピー先の削除
k = -1
With Range(F).CurrentRegion
Set rng = .Offset(1, 1).Resize(, .Columns.Count - 1)
End With
For Each r In rng.Columns
For i = 1 To r.Rows.Count
If r.Cells(i, 1).Font.ColorIndex = iCLR And _
r.Cells(i, 1).Value <> "" And _
flg = False Then
m = i: flg = True: cnt = cnt + 1
buf = r.Cells(i, 1).Value
ElseIf r.Cells(i, 1).Font.ColorIndex = iCLR And _
r.Cells(i, 1).Value <> "" And _
flg = True Then
n = i: cnt = cnt + 1
ElseIf Trim(r.Cells(i, 1).Value) = "" Then
If flg = True Then n = i
flg = False
End If
If n > 0 And flg = False Then
buf2 = Format(rng.Cells(m, 1).Offset(, -1).Value, "hh:mm") & " - " & _
Format(rng.Cells(m, 1).Offset(, -1).Value + Dif * cnt, "hh:mm")
If tmp <> buf Then
k = k + 1
ReDim Preserve Stock(1, k)
Stock(0, k) = buf
tmp = buf
Stock(1, k) = buf2
Else
Stock(1, k) = Stock(1, k) & ", " & buf2
End If
flg = False: m = 0: n = 0: cnt = 0
End If
Next i
buf = "": buf2 = "": tmp = ""
Next
If k > -1 Then
Range(L).Value = Range(F).Value
Range(L).Offset(1).Resize(UBound(Stock(), 2) + 1, 2).Value = _
Application.Transpose(Stock())
End If
Set rng = Nothing
End Sub
お礼
遅くなりましたが 本当にありがとうございました。 急遽諸事情で この仕事に向かう事が一時的に出来なくなっていましたが 又、舞戻って来れたのでゆっくり考えたいと思います。 とりあえず この件は今の断念せざるを得ないと考えました。せっかくお時間いただいたのにすいません。しかし今後の参考にしたいと思います。