Si puo' fare solo con macro
Si potrebbe anche far spostare la scritta senza formule nelle celle, ma poi quando la data di appartenenza scomparisse da riga 4 (perche' si va a vedere una data futura) allora la scritta scomparirebbe e ci vorrebbe uno stregone per farla ricomparire all'occorrenza)
Potresti usare la barra di scorrimento per "nascondere" le colonne prima della data che vuoi memorizzare ma se usi XL2003 (come il formato ".xls" farebbe pensare) non riusciresti a rappresentare nemmeno 1 anno
Insomma la scritta andrebbe gestita come dice w&g, tipo: in colonna G il testo, in colonna H la data di posizionamento
Poi una macro si occuperebbe di posizionare la scritta nella colonna giusta o appena viene scritta la data di colonna H o quando il cursore sposta le date da visualizzare
Ad uso dimostrativo, il file che ragiona in questo modo e' scaricabile qui:
https://www.dropbox.com/s/pwzxysa404oc5 ... 1.xls?dl=0I Commenti vanno posizionati in colonna G e in colonna H va inserita la data a cui il commento si rifersice; va messo prima il Commento e poi la data.
La prima gestione di queste informazioni e' fatta dalla macro di WorksheetChange:
- Codice: Seleziona tutto
Private Sub Worksheet_Change(ByVal Target As Range)
Dim myC As Range, dCol As String, gCOL As Long
'
dCol = "H" '<<< La colonna con la data (del Commento)
'
gCOL = Cells(3, dCol).End(xlToRight).Column
Application.EnableEvents = False
For Each myC In Target
If myC.Column = Cells(1, dCol).Column And myC.Row > 4 Then
If myC <> "" And myC.Offset(0, -1) = "" Then
beep
myC.ClearContents
ElseIf IsDate(myC.Value) Then
myMatch = Application.Match(CLng(myC.Value), Range("A3").Resize(1, 250), False)
Cells(myC.Row, gCOL).Resize(1, Columns.Count - gCOL - 1).ClearContents
If Not IsError(myMatch) Then
Cells(myC.Row, myMatch).Value = Target.Offset(0, -1).Value
End If
Else
myC.ClearContents:
Cells(myC.Row, gCOL).Resize(1, Columns.Count - gCOL - 1).ClearContents
beep
End If
End If
Next myC
Application.EnableEvents = True
End Sub
Poi ho associato alla BarraDiScorrimento la macro ReposData inserita in Modulo1:
- Codice: Seleziona tutto
Sub ReposDate()
Dim myMatch, I As Long, dCol As String, gCOL As Long
'
dCol = "H" '<<< La colonna con la data (del Commento)
'
gCOL = Cells(3, dCol).End(xlToRight).Column
Application.EnableEvents = False
For I = 5 To Cells(Rows.Count, dCol).End(xlUp).Row
If IsDate(Cells(I, dCol).Value) Then
myMatch = Application.Match(CLng(Cells(I, dCol).Value), Range("A3").Resize(1, 250), False)
Cells(I, gCOL).Resize(1, Columns.Count - gCOL - 1).ClearContents
If Not IsError(myMatch) Then
Cells(I, myMatch).Value = Cells(I, dCol).Offset(0, -1).Value
End If
Else
' Cells(I, dCol).ClearContents:
Cells(I, gCOL).Resize(1, Columns.Count - gCOL - 1).ClearContents
beep
End If
Next I
Application.EnableEvents = True
End Sub
In questo modo quando aziono la scrollbar la ReposDate va a riposizionare i commenti nelle colonne dovute
So che le colonne G e H nel tuo progetto sono usate per altri scopi, per questo la macro consente di dichiarare quale e' la colonna con le date dei commenti (vedi le istruzioni marcate <<< su ambedue le macro), mentre calcola la colonna dove comincia il "gantt" come la prima colonna in riga 3, a destra della colonna contenente la data dei commenti, che risulta compilato.
I Commenti vanno alla sinistra della colonna date.
Quanto proposto gestisce un unico Commento con relativa data; con un po' di lavoro in piu' si puo' passare a una situazione Multicommento /Multidata.
Insomma vedi se puoi adattare al tuo scopo
Ciao