Discussione:
Estrarre solo i caratteri numerici da una stringa alfanumerica
(troppo vecchio per rispondere)
draleo
2018-12-09 20:44:37 UTC
Permalink
Nella colonna B Ho una lunga serie di codici alfanumerici ; dovrei estrarre nella colonna C SOLO i numeri, in modo da poter ordinare l’elenco, in base a questa colonna C, dove dovrebbero finire i soli valori numerici. Qualcuno può suggerirmi come fare ?
10I 10
11I 11
13I 13
14I 14
15I 15
10II 10
102A 102
180B 180
102/Bx 102
180 180
11II 11
12IIa 12
37II/IIb 37
Ecc
draleo
b***@gmail.com
2018-12-09 22:30:26 UTC
Permalink
Post by draleo
Nella colonna B Ho una lunga serie di codici alfanumerici ; dovrei estrarre nella colonna C SOLO i numeri, in modo da poter ordinare l’elenco, in base a questa colonna C, dove dovrebbero finire i soli valori numerici. Qualcuno può suggerirmi come fare ?
10I 10
11I 11
13I 13
14I 14
15I 15
10II 10
102A 102
180B 180
102/Bx 102
180 180
11II 11
12IIa 12
37II/IIb 37
Ecc
draleo
Se i numeri, come nel tuo esempio, rigorosamente antecedono i caratteri non numerici prova con
=SINISTRA(A1;LUNGHEZZA(A1)-SOMMA(VAL.ERR(STRINGA.ESTRAI(A1;RIF.RIGA(INDIRETTO("A1:A" & LUNGHEZZA(A1)));1)*1)*1))
dove A1 è il tuo numero
da inserire come matriciale e trascinare fino alla fine dell'elenco
b***@gmail.com
2018-12-09 22:55:29 UTC
Permalink
Post by b***@gmail.com
Post by draleo
Nella colonna B Ho una lunga serie di codici alfanumerici ; dovrei estrarre nella colonna C SOLO i numeri, in modo da poter ordinare l’elenco, in base a questa colonna C, dove dovrebbero finire i soli valori numerici. Qualcuno può suggerirmi come fare ?
10I 10
11I 11
13I 13
14I 14
15I 15
10II 10
102A 102
180B 180
102/Bx 102
180 180
11II 11
12IIa 12
37II/IIb 37
Ecc
draleo
Se i numeri, come nel tuo esempio, rigorosamente antecedono i caratteri non numerici prova con
=SINISTRA(A1;LUNGHEZZA(A1)-SOMMA(VAL.ERR(STRINGA.ESTRAI(A1;RIF.RIGA(INDIRETTO("A1:A" & LUNGHEZZA(A1)));1)*1)*1))
dove A1 è il tuo numero
da inserire come matriciale e trascinare fino alla fine dell'elenco
Una estensione della precedente che permette di individuare non solo i valori del tuo esempio con i numeri che antecedono i caratteri non numerici ma anche quelli che in sequenza unica sono incassati all'interno della stringa è la seguente:
=STRINGA.ESTRAI(A1;CONFRONTA(0;VAL.ERR(STRINGA.ESTRAI(A1;RIF.RIGA(INDIRETTO("A1:A" & LUNGHEZZA(A1)));1)*1)*1;0);LUNGHEZZA(A1)-SOMMA(VAL.ERR(STRINGA.ESTRAI(A1;RIF.RIGA(INDIRETTO("A1:A" & LUNGHEZZA(A1)));1)*1)*1))
sempre matriciale
Funziona quindi su ABC345CD
Nessuna delle 2 formule però funziona con qualcosa del tipo:
ab34cf78y

elio
draleo
2018-12-10 07:48:56 UTC
Permalink
Post by b***@gmail.com
Post by b***@gmail.com
Post by draleo
Nella colonna B Ho una lunga serie di codici alfanumerici ; dovrei estrarre nella colonna C SOLO i numeri, in modo da poter ordinare l’elenco, in base a questa colonna C, dove dovrebbero finire i soli valori numerici. Qualcuno può suggerirmi come fare ?
10I 10
11I 11
13I 13
14I 14
15I 15
10II 10
102A 102
180B 180
102/Bx 102
180 180
11II 11
12IIa 12
37II/IIb 37
Ecc
draleo
Se i numeri, come nel tuo esempio, rigorosamente antecedono i caratteri non numerici prova con
=SINISTRA(A1;LUNGHEZZA(A1)-SOMMA(VAL.ERR(STRINGA.ESTRAI(A1;RIF.RIGA(INDIRETTO("A1:A" & LUNGHEZZA(A1)));1)*1)*1))
dove A1 è il tuo numero
da inserire come matriciale e trascinare fino alla fine dell'elenco
=STRINGA.ESTRAI(A1;CONFRONTA(0;VAL.ERR(STRINGA.ESTRAI(A1;RIF.RIGA(INDIRETTO("A1:A" & LUNGHEZZA(A1)));1)*1)*1;0);LUNGHEZZA(A1)-SOMMA(VAL.ERR(STRINGA.ESTRAI(A1;RIF.RIGA(INDIRETTO("A1:A" & LUNGHEZZA(A1)));1)*1)*1))
sempre matriciale
Funziona quindi su ABC345CD
ab34cf78y
elio
Ok. grazie .la prima funziona perfettamente (la seconda non l'ho testata, perché, per il mio caso attuale, non mi serve; servirà sicuramente in altre circostanze). Restituisce una stringa; per trasformarla in num ho moltiplicato il risultato * 1
draleo
Andrea.9
2018-12-10 08:13:53 UTC
Permalink
Post by b***@gmail.com
ab34cf78y
Ciao.
come contributo alla discussione...
questa genera la matrice di tutti i numeri anche se sono discontinui
=SE((CODICE(STRINGA.ESTRAI(A1;RIF.RIGA(INDIRETTO("A1:A"&LUNGHEZZA(A1)));1)))-48>9;"";CODICE(STRINGA.ESTRAI(A1;RIF.RIGA(INDIRETTO("A1:A"&LUNGHEZZA(A1)));1))-48)
è sicuramente ottimizzabile.
non so però dalla matrice estrarre un testo con i numeri.
Andrea
Bruno Campanini
2018-12-10 13:35:10 UTC
Permalink
Post by draleo
Nella colonna B Ho una lunga serie di codici alfanumerici ; dovrei estrarre
nella colonna C SOLO i numeri, in modo da poter ordinare l’elenco, in base a
questa colonna C, dove dovrebbero finire i soli valori numerici. Qualcuno può
suggerirmi come fare ? 10I 10 11I 11 13I 13
14I 14
15I 15
10II 10
102A 102
180B 180
102/Bx 102
180 180
11II 11
12IIa 12
37II/IIb 37
Ecc
draleo
Questa racimola tutti i numeri, comunque distribuiti nella stringa:
==============================================
Public Sub OnlyNumbers()
Dim i, j As Integer, N As String

For Each i In [Sheet4!P1:P14]
For j = 1 To Len(i)
If IsNumeric(Mid(i, j, 1)) Then
N = N & (Mid(i, j, 1))
End If
Next
i(1, 2) = N
N = ""
Next

End Sub
=================================================

Bruno
casanmaner
2018-12-10 15:48:53 UTC
Permalink
Giusto per esercizio una FDU basata su RegEx:

Function EstraiNumeriDaStringa(Stringa) As Long
Dim oRegEx As Object
Set oRegEx = CreateObject("VBScript.RegExp")
With oRegEx
.Global = True
.Pattern = "\D"
EstraiNumeriDaStringa = .Replace(Stringa, "")
End With
Set oRegEx = Nothing
End Function
b***@gmail.com
2018-12-10 21:37:05 UTC
Permalink
Post by casanmaner
Function EstraiNumeriDaStringa(Stringa) As Long
Dim oRegEx As Object
Set oRegEx = CreateObject("VBScript.RegExp")
With oRegEx
.Global = True
.Pattern = "\D"
EstraiNumeriDaStringa = .Replace(Stringa, "")
End With
Set oRegEx = Nothing
End Function
Non ci sono problemi con il VBA perché è tranquillamente possibile la concatenazione dei singoli elementi finali. Purtroppo il limite delle funzioni matriciali e che non sono responsive per quanto ne so e mi sono cimentato nella concatenazione. Presumo che la soluzione solo con formule possa avvenire solo con colonne di appoggio e per un numero massimo predefinito di caratteri della stringa.
b***@gmail.com
2018-12-11 00:14:10 UTC
Permalink
Post by b***@gmail.com
Post by casanmaner
Function EstraiNumeriDaStringa(Stringa) As Long
Dim oRegEx As Object
Set oRegEx = CreateObject("VBScript.RegExp")
With oRegEx
.Global = True
.Pattern = "\D"
EstraiNumeriDaStringa = .Replace(Stringa, "")
End With
Set oRegEx = Nothing
End Function
Non ci sono problemi con il VBA perché è tranquillamente possibile la concatenazione dei singoli elementi finali. Purtroppo il limite delle funzioni matriciali e che non sono responsive per quanto ne so e mi sono cimentato nella concatenazione. Presumo che la soluzione solo con formule possa avvenire solo con colonne di appoggio e per un numero massimo predefinito di caratteri della stringa.
gallego
2018-12-10 23:05:49 UTC
Permalink
Post by casanmaner
Function EstraiNumeriDaStringa(Stringa) As Long
Dim oRegEx As Object
Set oRegEx = CreateObject("VBScript.RegExp")
With oRegEx
.Global = True
.Pattern = "\D"
EstraiNumeriDaStringa = .Replace(Stringa, "")
End With
Set oRegEx = Nothing
End Function
non funziona con la stringa "ggg005t"
casanmaner
2018-12-11 06:41:50 UTC
Permalink
Post by gallego
non funziona con la stringa "ggg005t"
Draleo ha specificato che desidera un numero.
E che sia così lo si denota anche dal fatto che per avere la trasformazione in numero ha specificato che ha moltiplicato per 1 la formula di Elio.
Per excel "005" non è un numero ma una stringa.
Il numero corrispondente in Excel della stringa "005" è 5.
Se, invece, si desiderasse una stringa di testo composta dai numeri basterebbe dichiarare la FDU come stringa in luogo di long.
draleo
2018-12-11 11:06:29 UTC
Permalink
Post by casanmaner
Post by gallego
non funziona con la stringa "ggg005t"
Draleo ha specificato che desidera un numero.
E che sia così lo si denota anche dal fatto che per avere la trasformazione in numero ha specificato che ha moltiplicato per 1 la formula di Elio.
Per excel "005" non è un numero ma una stringa.
Il numero corrispondente in Excel della stringa "005" è 5.
Se, invece, si desiderasse una stringa di testo composta dai numeri basterebbe dichiarare la FDU come stringa in luogo di long.
Anche le soluzioni con il VBA funzionano tutte bene (benissimo). Grazie a tutti
draleo
gallego
2018-12-11 12:27:46 UTC
Permalink
Post by casanmaner
Post by gallego
non funziona con la stringa "ggg005t"
Draleo ha specificato che desidera un numero.
allora il titolo del post è sbagliato..."Estrarre solo i caratteri
numerici da una stringa alfanumerica"......
casanmaner
2018-12-11 15:29:14 UTC
Permalink
Post by gallego
allora il titolo del post è sbagliato..."Estrarre solo i caratteri
numerici da una stringa alfanumerica"......
Vabbè dati possiamo fare nostra la locuzione "rubrica legis non est lex" :)
Lorenzo
2018-12-11 18:31:28 UTC
Permalink
Post by casanmaner
Post by gallego
allora il titolo del post è sbagliato..."Estrarre solo i caratteri
numerici da una stringa alfanumerica"......
Vabbè dati possiamo fare nostra la locuzione "rubrica legis non est lex" :)
Toppo forte la "lectio magistralis".. :)

Loading...