Discussione:
Estrapolare dato da una stringa con struttura variabile
(troppo vecchio per rispondere)
Final Job
2024-03-27 15:43:15 UTC
Permalink
Buongiorno nuovamente.

In un campo di una tabella trovano spazio alcune stringhe dalle quali mi
interessa estrapolare solo la parte finale (4 caratteri) ma solo se
questi 4 caratteri corrispondono ad una caratteristica che, in questo
caso, è l'indicazione di un anno. Quando la stringa non presenta, nei
suoi ultimi 4 caratteri, un'indicazione coerente al presupposto, ho
bisogno che la formula non produca risultato (quindi "").

Esempi:

"parte di stringa non interessante 111,750" 2017
devo estrapolare 2027

"parte di stringa non interessante 111,750"
non serve restituire risultato ma con la formula che applico io mi
restituisce ,750 risultato che mi scombina tutto.

Vi ringrazio
Ale
casanmaner
2024-03-27 15:51:07 UTC
Permalink
Post by Final Job
"parte di stringa non interessante 111,750" 2017
devo estrapolare 2027
Immagino intendessi "2017"

Per curiosità tu che formula applichi?
Final Job
2024-03-27 16:21:43 UTC
Permalink
Post by casanmaner
Post by Final Job
"parte di stringa non interessante 111,750" 2017
devo estrapolare 2027
Immagino intendessi "2017"
Per curiosità tu che formula applichi?
si, scusa, 2017
SE.ERRORE(DESTRA(SOSTITUISCI(ANNULLA.SPAZI(B1200);" ";"");4);"")
casanmaner
2024-03-27 16:29:02 UTC
Permalink
Post by Final Job
SE.ERRORE(DESTRA(SOSTITUISCI(ANNULLA.SPAZI(B1200);" ";"");4);"")
In questa non avari mai errori ma sempre l'estrazione di 4 caratteri o
meno se la stringa ne contiene meno.

Io proverei con qualcosa del genere:

=SE.ERRORE(--SOSTITUISCI(DESTRA(B1200;4);",";"@");"")

al limite se può essere che dopo il numero vi siano degli spazi

=SE.ERRORE(--SOSTITUISCI(DESTRA(ANNULLA.SPAZI(B1200);4);",";"@");"")
issdr
2024-03-27 21:11:07 UTC
Permalink
Post by Final Job
In un campo di una tabella trovano spazio alcune stringhe dalle quali
mi interessa estrapolare solo la parte finale (4 caratteri) ma solo se
questi 4 caratteri corrispondono ad una caratteristica che, in questo
caso, è l'indicazione di un anno. Quando la stringa non presenta, nei
suoi ultimi 4 caratteri, un'indicazione coerente al presupposto, ho
bisogno che la formula non produca risultato (quindi "").
"parte di stringa non interessante 111,750" 2017
devo estrapolare 2027
"parte di stringa non interessante 111,750"
non serve restituire risultato ma con la formula che applico io mi
restituisce ,750 risultato che mi scombina tutto.
--8<---------------cut here---------------start------------->8---
Function CaudAnno(stringa As String)
With CreateObject("vbscript.regexp")
.Pattern = "\d{4}$"
If .Test(stringa) Then
CaudAnno = .Execute(stringa)(0)
Else
CaudAnno = ""
End If
End With
End Function
--8<---------------cut here---------------end--------------->8---

la stringa deve terminare con quattro cifre. se necessario si possono
porre altre condizioni, basta modificare il pattern.
casanmaner
2024-03-28 06:53:06 UTC
Permalink
Post by issdr
.Pattern = "\d{4}$"
Lo scopo del $ qual è (che non me lo ricordo)?
issdr
2024-03-28 08:17:46 UTC
Permalink
Post by casanmaner
Post by issdr
.Pattern = "\d{4}$"
Lo scopo del $ qual è (che non me lo ricordo)?
indica il fine riga.
Bruno Campanini
2024-03-28 20:08:21 UTC
Permalink
Post by issdr
Post by Final Job
In un campo di una tabella trovano spazio alcune stringhe dalle quali
mi interessa estrapolare solo la parte finale (4 caratteri) ma solo se
questi 4 caratteri corrispondono ad una caratteristica che, in questo
caso, è l'indicazione di un anno. Quando la stringa non presenta, nei
suoi ultimi 4 caratteri, un'indicazione coerente al presupposto, ho
bisogno che la formula non produca risultato (quindi "").
"parte di stringa non interessante 111,750" 2017
devo estrapolare 2027
"parte di stringa non interessante 111,750"
non serve restituire risultato ma con la formula che applico io mi
restituisce ,750 risultato che mi scombina tutto.
--8<---------------cut here---------------start------------->8---
Function CaudAnno(stringa As String)
With CreateObject("vbscript.regexp")
.Pattern = "\d{4}$"
If .Test(stringa) Then
CaudAnno = .Execute(stringa)(0)
Else
CaudAnno = ""
End If
End With
End Function
--8<---------------cut here---------------end--------------->8---
la stringa deve terminare con quattro cifre. se necessario si possono
porre altre condizioni, basta modificare il pattern.
Public Sub Test()
Dim S As String, Y As String
S = " 111,750 2017 "
S = Trim(S)
Y = CStr(Mid(S, Len(S) - 4))
If IsDate(Y & "/1/1") Then MsgBox Y
End Sub

Bruno
Final Job
2024-03-28 21:42:55 UTC
Permalink
Post by Bruno Campanini
Public Sub Test()
Dim S As String, Y As String
S = " 111,750 2017  "
S = Trim(S)
Y = CStr(Mid(S, Len(S) - 4))
If IsDate(Y & "/1/1") Then MsgBox Y
End Sub
Bruno
scusa ma come la applico questa?
Ale
Bruno Campanini
2024-03-28 22:30:46 UTC
Permalink
Post by Final Job
Post by Bruno Campanini
Public Sub Test()
Dim S As String, Y As String
S = " 111,750 2017  "
S = Trim(S)
Y = CStr(Mid(S, Len(S) - 4))
If IsDate(Y & "/1/1") Then MsgBox Y
End Sub
Bruno
scusa ma come la applico questa?
Ale
Il mio scopo era quello di mostrare a issdr
una più semplice procedura.

Comunque:
=====================
Public Function NumberAsYear(S As String)
Dim Y As String
S = Trim(S)
Y = CStr(Mid(S, Len(S) - 4))
If IsDate(Y & "/1/1") Then
NumberAsYear = Y
End If
End Function
=======================

Bruno

PS
Così come esposto, l'uscita è String.
Può essere Integer con Function(...) As Integer e CInt(Y)
ovvero Date con As Date e CDate(Y).
issdr
2024-03-28 23:25:02 UTC
Permalink
Il mio scopo era quello di mostrare a issdr una più semplice
procedura.
grazie Bruno.

la semplicità è anche nell'occhio di chi guarda. questa FDU è ridotta
all'osso, modificando il pattern si possono estrarre stringhe
arbitrarie:

--8<---------------cut here---------------start------------->8---
Function REstrai(stringa As String)
REstrai = ""
With CreateObject("vbscript.regexp")
.Pattern = "\d{4}$"
On Error Resume Next
REstrai = .Execute(stringa)(0)
End With
End Function
--8<---------------cut here---------------end--------------->8---
Final Job
2024-03-28 23:40:07 UTC
Permalink
Funzionano.
Grazie a tutti per l'attenzione.
Ale

Loading...