Moderatori: Anthony47, Flash30005
Function AnyDate(ByVal myStr As String) As Variant
Dim mySplit, I As Long, aWord As String, evData
Dim aKill, aConv
'
aConv = Array(".", "-") '<<< Caratteri da convertire
aKill = Array(":", ",", ";", "!", "?") '<<< Caratteri da eliminare
'Elimina i pericolosi:
For I = 0 To UBound(aKill)
myStr = Replace(myStr, aKill(I), " ", , , vbTextCompare)
Next I
'Converti i possibili separatori:
For I = 0 To UBound(aConv)
myStr = Replace(myStr, aConv(I), "/", , , vbTextCompare)
Next I
mySplit = Split(myStr, " ", , vbTextCompare)
For I = 0 To UBound(mySplit) - 1
evData = ""
On Error Resume Next
evData = DateValue(mySplit(I))
On Error GoTo 0
If IsDate(evData) Then
AnyDate = evData
Exit For
End If
Next I
End Function
=AnyDate(B14)
Function AnyDate(ByVal myStr As String) As String ' <===
Dim mySplit, I As Long, aWord As String, evData
Dim aKill, aConv
Dim d As String ' <===
'
aConv = Array(".", "-") '<<< Caratteri da convertire
aKill = Array(":", ",", ";", "!", "?") '<<< Caratteri da eliminare
'Elimina i pericolosi:
For I = 0 To UBound(aKill)
myStr = Replace(myStr, aKill(I), " ", , , vbTextCompare)
Next I
'Converti i possibili separatori:
For I = 0 To UBound(aConv)
myStr = Replace(myStr, aConv(I), "/", , , vbTextCompare)
Next I
mySplit = Split(myStr, " ", , vbTextCompare)
d = ""
For I = 0 To UBound(mySplit) - 1
evData = ""
On Error Resume Next
evData = DateValue(mySplit(I))
On Error GoTo 0
If IsDate(evData) Then
If Len(Trim(d)) = 0 Then ' <===
d = evData ' <===
Else ' <===
d = d & " - " & evData ' <===
End If ' <===
AnyDate = d ' <===
'Exit For ' <===
End If
Next I
Dylan ha scritto:Nel caso in cui la riga riportasse un prezzo espresso come € 10.20 (quindi con il punto) ma non una data, non creerebbe un "falso positivo"?
Function AnyDate(ByVal myStr As String) As Variant
Dim mySplit, I As Long, aWord As String, evData
Dim aKill, aConv
'
aConv = Array(".", "-") '<<< Caratteri da convertire
aKill = Array(":", ",", ";", "!", "?") '<<< Caratteri da eliminare
'Elimina i pericolosi:
For I = 0 To UBound(aKill)
myStr = Replace(myStr, aKill(I), " ", , , vbTextCompare)
Next I
'Converti i possibili:
For I = 0 To UBound(aConv)
myStr = Replace(myStr, aConv(I), "/", , , vbTextCompare)
Next I
mySplit = Split(myStr, " ", , vbTextCompare)
For I = 0 To UBound(mySplit)
If Len(mySplit(I)) > 5 Then
evData = ""
On Error Resume Next
evData = DateValue(mySplit(I))
If evData < 1 Then evData = ""
On Error GoTo 0
If IsDate(evData) Then
AnyDate = AnyDate & " - " & Format(evData, "dd-mmm-yyyy") '<<< Formato DATA
End If
End If
Next I
AnyDate = Mid(AnyDate, 4)
End Function
Torna a Applicazioni Office Windows
Supporto per sviluppo macro VBA Ordinare per data Autore: Carletto Ribolla |
Forum: Applicazioni Office Windows Risposte: 3 |
Inserire add.in nella barra di avvio veloce in excel 2003 Autore: Ricky0185 |
Forum: Applicazioni Office Windows Risposte: 4 |
Excel: problema con date se devo unirle a testi Autore: valle1975 |
Forum: Applicazioni Office Windows Risposte: 5 |
Eliminare righe diverse dalla prima data del mese Autore: dipdip |
Forum: Applicazioni Office Windows Risposte: 4 |
Visitano il forum: Nessuno e 20 ospiti