| 
    
     |  | こなのでは? 
 表Aは、「開始日」がA列、「終了日」がB列で1行目に列見出しが有とします
 表Bは、A列1行目に「基準日」の行見出しが有る物とします
 集計用テーブル(ハッシュテーブル)を作成して集計します
 (ハッシュテーブル = 日付と配列の添え字を関連付けた配列変数)
 
 Option Explicit
 
 Public Sub Sample()
 
 Dim i As Long
 Dim lngRows As Long
 Dim rngList As Range
 Dim rngResult As Range
 Dim vntData As Variant
 Dim vntMax As Variant
 Dim vntMin As Variant
 Dim vntTable As Variant
 Dim lngDay As Long
 Dim strProm As String
 
 '◆Listの先頭セル位置を基準とする(先頭列の列見出しのセル位置)
 Set rngList = Worksheets("表A").Cells(1, "A")
 
 '◆結果出力の先頭セル位置を基準とする(先頭列の列見出しのセル位置)
 Set rngResult = Worksheets("表B").Cells(1, "A")
 
 With rngList
 '行数の取得
 lngRows = .Offset(Rows.Count - .Row).End(xlUp).Row - .Row
 If lngRows <= 0 Then
 strProm = "データが有りません"
 GoTo Wayout
 End If
 '「開始日」A列、「終了日」B列データを配列に取得
 vntData = .Offset(1).Resize(lngRows, 2).Value
 '「開始日」列、「終了日」列から最小最大の日付を取得
 vntMax = Application.WorksheetFunction.Max(.Offset(1).Resize(lngRows, 2))
 vntMin = Application.WorksheetFunction.Min(.Offset(1).Resize(lngRows, 2))
 End With
 
 '集計用テーブルを作成
 ReDim vntTable(1, vntMax - vntMin)
 
 '日付を上から下に繰り返し
 For i = 1 To lngRows
 '「開始日」が空白で無いなら
 If vntData(i, 1) <> "" Then
 'ハッシュ値を計算
 lngDay = vntData(i, 1) - vntMin
 'ハッシュの位置に集計
 vntTable(0, lngDay) = vntTable(0, lngDay) + 1
 End If
 '「終了日」が空白で無いなら
 If vntData(i, 2) <> "" Then
 'ハッシュ値を計算
 lngDay = vntData(i, 2) - vntMin
 'ハッシュの位置に集計
 vntTable(1, lngDay) = vntTable(1, lngDay) + 1
 End If
 Next i
 
 '画面更新を停止
 Application.ScreenUpdating = False
 
 '結果を出力
 With rngResult
 'データをクリア
 .Parent.UsedRange.ClearContents
 '結果を出力
 .Offset(1, 1).Resize(2, UBound(vntTable, 2) + 1).Value = vntTable
 '行見出しを出力
 For i = 1 To 3
 .Offset(i - 1).Value = Choose(i, "基準日", "開始日", "終了日")
 Next i
 '基準日を出力
 ReDim vntTable(vntMax - vntMin)
 For i = 0 To vntMax - vntMin
 vntTable(i) = vntMin + i
 Next i
 With .Offset(, 1).Resize(, UBound(vntTable) + 1)
 .NumberFormat = "m/d"
 .Value = vntTable
 End With
 End With
 
 strProm = "処理が完了しました"
 
 Wayout:
 
 '画面更新を再開
 Application.ScreenUpdating = True
 
 Set rngList = Nothing
 Set rngResult = Nothing
 
 MsgBox strProm, vbInformation
 
 End Sub
 
 |  |