|
IROC さん、初心者です。さん、こんばんは。
>VBA を使わなくても 数式で、できそうに思えますが・・
そうですね!!
でも、VBAで作ってみました。
と言ってもマクロの記録と数式をVBA化しただけですが・・。
'===============================================================
Sub main()
Dim rng1 As Range
Dim rng2 As Range
Dim mindate
Dim maxdate
With Worksheets("sheet1")
Set rng1 = .Range("a1", .Cells(.Rows.Count, 1).End(xlUp))
End With
'↑Sheet1のA列の入力範囲を取得
With WorksheetFunction
mindate = .Min(rng1)
maxdate = .Max(rng1)
End With
'↑日付の最初と最後を取得
With Worksheets("sheet2").Cells(1, 1)
.Value = mindate
.DataSeries Rowcol:=xlColumns, Type:=xlChronological, Date:= _
xlDay, Step:=1, Stop:=maxdate, Trend:=False
End With
'↑Sheet2のA列に最初から最後の日付を設定
With Worksheets("SHEET2")
Set rng2 = .Range("A1", .Cells(.Rows.Count, 1).End(xlUp))
'↑Sheet2のA列の入力範囲を取得
With rng2
.NumberFormat = "m""月""d""日"""
.Offset(0, 1).Cells(1).FormulaArray = "=IF(COUNTIF(" & _
rng1.Address(, , , True) & ",a1)>0,AVERAGE(IF(" & _
rng1.Address(, , , True) & "=a1," & rng1.Offset(0, 1).Address(, , , True) & ")),0)"
'↑Sheet2のB1に配列数式設定
.Offset(0, 1).DataSeries Rowcol:=xlColumns, Type:=xlAutoFill, Date:=xlDay, Trend:=False
'↑オートフィル操作と同じ
.Offset(0, 1).Value = .Offset(0, 1).Value
End With
End With
End Sub
尚、「Sheet1のA列は文字列の日付ではない」という前提です。
確認して下さい。
それと今度は、コードも見せて下さいね!!
|
|