Ho questa macro che ricerca in colonna R ( copiate da col. I ) le date che hanno formato a due cifre : 34, 45, 89. Ovviamente trattandosi di dati di borsa NON possono essere 1934, 1945,1989 come talvolta capita nella conversione, anche se usato il formato gg/mm/aaaa. Quindi ho costruito la macro sotto allegata con la quale a tutti i dati < 1/1/2000 aggiungo 100 anni secchi con l'aiuto di una formula inserita in colonna T.
La macro funziona, ma avendola realizzata passo passo alla fine occupo tre colonne di appoggio. Vorrei quindi modificare la macro , inserendo nel VBA l'equivalente della formula e fare tutto nella stessa colonna (I di Imola ) nella quale arrivano i dati primari in formato stringa.
- Codice: Seleziona tutto
Option Explicit
Sub daString_a_Data()
Dim k As Long, uR As Long, R
Dim sh1 As Worksheet
Application.ScreenUpdating = False
Set sh1 = ThisWorkbook.Sheets("Isin")
sh1.Activate
uR = Cells(Rows.Count, "I").End(xlUp).Row
For k = 2 To uR
' scrive la data in una colonna di appoggio
On Error Resume Next ' controllo errore nel caso ci sia una scritta tipo perpetuo.
Cells(k, 18).Value = CDate(Cells(k, 9).Value)
On Error GoTo 0
Next k
'---------------------------------
' ricerca date anomale riportate come es 1934 e le corregge a 2034 aggiungendo 100 anni
Dim t As Date, Ing As Integer
t = "1/1/2020"
For Ing = 2 To uR
If Range("R" & Ing).Value < t Then
Range("R" & Ing).Copy
Range("S" & Ing).PasteSpecial
End If
'-------------------------------------------------------------------------------
'Nota bene in T da 2 a1000 inserire questa formula che controlla e modifica il dato di colonna S :
' =SE($S2<>"";DATA(ANNO($S2)+100;MESE($S2);GIORNO($S2));"")
'formattare la colonna T come "data"
'-------------------------------
If Range("T" & Ing).Value <> "" Then
Range("T" & Ing).Copy
Range("R" & Ing).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
End If
Next
'copia nella colonna effettiva e cancella l'appoggio
R = ActiveSheet.Range("R2")
ActiveSheet.Range("R2:R" & uR).Copy Destination:=sh1.Range("I2")
Range("I2:I" & uR).NumberFormat = "dd/mm/yyyy"
Range("R2:S" & uR).Clear
Set sh1 = Nothing
End Sub