Это похоже на то, что календарь Outlook может сделать.
Однако то, что вы описываете, выполнимо. Вы изучите программирование на VBA.
Кое-что из этого будет выглядеть так, чтобы поместить гантоподобный бар (пока без текста) ...
Option Explicit
Sub main()
Call InsertBar(0, 800)
End Sub
Sub InsertBar(LeftStart As Long, TotalWidth As Long)
Dim myWkSht As Worksheet
Dim myShp As Shape
Dim MaxWidth As Long, nBars As Long
Dim bDone As Boolean, iLoop As Long
Dim myStart() As Long, myWidth() As Long
If LeftStart < 0 Then Exit Sub
If TotalWidth <= 0 Then Exit Sub
Set myWkSht = Worksheets("Sheet2")
MaxWidth = myWkSht.Range("O1").Left
bDone = False
nBars = 1
ReDim myStart(1 To nBars)
ReDim myWidth(1 To nBars)
myStart(nBars) = LeftStart
myWidth(nBars) = TotalWidth
Do While Not bDone
If myStart(nBars) + myWidth(nBars) < MaxWidth Then
bDone = True
Else
nBars = nBars + 1
ReDim Preserve myStart(1 To nBars)
ReDim Preserve myWidth(1 To nBars)
myStart(nBars) = 0
myWidth(nBars - 1) = MaxWidth - myStart(nBars - 1)
myWidth(nBars) = TotalWidth - myWidth(nBars - 1)
End If
Loop
For iLoop = 1 To nBars
With myWkSht
Set myShp = .Shapes.AddShape(msoShapeRectangle, _
myStart(iLoop), .Range("A10").Offset((iLoop - 1) * 6, 0).Top, _
myWidth(iLoop), .Range("A10").Offset((iLoop - 1) * 6, 0).Height)
End With
With myShp
.Fill.ForeColor.ObjectThemeColor = msoThemeColorBackground2
.Fill.ForeColor.TintAndShade = 0
.Fill.ForeColor.Brightness = 0
.Fill.Transparency = 0
.Fill.Solid
.Line.ForeColor.ObjectThemeColor = msoThemeColorBackground2
.Line.ForeColor.TintAndShade = 0
.Line.ForeColor.Brightness = 0
.Line.Transparency = 0
End With
Next iLoop
End Sub
Мой стартовый элементарный календарь начинается следующим образом ...
... и выглядит так после запуска примера кода ...