Se tudo o que você realmente precisa é o Ano, use a fórmula @robinCTS.
SE você quiser que o resultado seja "Datas reais do Excel" e
- se seus dados forem TEXTO e não forem datas reais,
- e se suas configurações de data regionais forem
DMY
, - e a coluna está formatada como
dd-mm-yyyy
você pode usar essa fórmula:
=IFERROR(IFERROR(IFERROR(DATEVALUE(A2),DATEVALUE(A2&"-01")),DATEVALUE(A2&"-01-01")),"illegal date format")
Observe que as datas anteriores a 1900 não podem ser datas reais no Excel, mas podem ser representadas como sequências de texto. Vou deixar para você ajustar a fórmula.
Se a sua saída precisar estar ciente internacionalmente de países que possuem outros formatos de data, uma solução de VBA poderá ser melhor. Se isso não for possível, colunas auxiliares para dividir os dados e, em seguida, remontar apropriadamente, ou uma fórmula muito complexa para fazer o mesmo, poderiam ser usadas.
Observe que essa UDF produzirá a data real ou apenas o ano, dependendo do segundo argumento opcional.
Option Explicit
Function ConvertToDate(S As String, Optional Yr As Boolean = False) As Variant
Dim V
Dim dtTemp As Date
V = Split(S, "-")
Select Case UBound(V)
Case 0
dtTemp = DateSerial(V(0), 1, 1)
Case 1
dtTemp = DateSerial(V(0), V(1), 1)
Case 2
If Len(V(0)) = 4 Then
dtTemp = CDate(S)
Else
dtTemp = DateSerial(V(2), V(1), V(0))
End If
End Select
If Yr = True Then
ConvertToDate = Year(dtTemp)
Else
If Year(dtTemp) < 1900 Then
ConvertToDate = Format(dtTemp, "dd-mm-yyyy")
Else
ConvertToDate = dtTemp
End If
End If
End Function
Ambos os métodos analisam o primeiro segmento e assumem que é um ano se LEN > 4
e, em seguida, examinam quantos segmentos decidir se anexam os -01
's necessários
A solução do VBA emitirá datas anteriores a 1900 como uma cadeia de texto.