È soltanto un Pokémon con le armi o è un qualcosa di più? Vieni a parlarne su Award & Oscar!
 
Pagina precedente | 1 | Pagina successiva
Vota | Stampa | Notifica email    
Autore

Estrarre più numeri da una stessa stringa

Ultimo Aggiornamento: 14/03/2024 13:17
Post: 29
Registrato il: 22/04/2017
Città: UDINE
Età: 58
Utente Junior
Excel 2016
OFFLINE
14/03/2024 00:15

Ci ho provato ma non riesco ad elaborare un codice VBA che da una stringa ad esempio del tipo:

4 - RO (Adulti: 3 Bambini: 2), 6 - RO (Adulti: 4), 10 - RO (Adulti: 1 Bambini: 2), 11 - RO (Adulti: 3)

vengano estratti in una colonna di un foglio excel i soli numeri 4 - 6 - 10 - 11

Rappresentano il numero di una camera, seguita dal trattamento (Room Only) che nel mio caso è sempre RO e dalle persone che vanno nella camera.
Tenete presente che la stringa di solito è più breve ed ha solo una camera, rare volte potrebbe essere più lunga nel caso di prenotazioni di gruppi.

Nel foglio excel ci sono più prenotazioni e quindi più righe con una cella contenete una stringa simile.

Spero di essermi spiegato.

Vi ringrazio fin d'ora del vostro aiuto.

Luca
[Modificato da LucaT. 14/03/2024 00:31]
Post: 1.397
Registrato il: 16/08/2015
Città: CORDENONS
Età: 67
Utente Veteran
Excel 2016-32bit Win11
OFFLINE
14/03/2024 00:54

Presumendo che la lista abbia inizio da A1 e che il risultato vada messo in colonna B puoi provare con questa mia macro. Eventualmente adatta i range al layout del tuo progetto.
Option Explicit
Sub EstraiNumeri()
    Dim nRiga As Long                             'numero riga in elaborazione
    Dim sTesto As String                          'stringa testo da elaborare
    Dim sMatr As Variant                          'stringa matrice dopo la divisione
    Dim sNum  As String                           'stringa numeri estrapolati
    Dim x     As Long                             'contatore generico
    Dim pVirg As Long                             'posizione della virgola
    For nRiga = 1 To Cells(Rows.Count, "A").End(xlUp).Row
        sNum = ""
        sTesto = Cells(nRiga, "A")
        sMatr = Split(sTesto, " - RO ")
        sNum = sNum & sMatr(0)
        For x = 1 To UBound(sMatr) - 1
            pVirg = InStr(sMatr(x), ",")
            sNum = sNum & " -" & Right(sMatr(x), Len(sMatr(x)) - pVirg)
        Next x
        Cells(nRiga, "B") = sNum
        Cells(nRiga, "B").NumberFormat = "@"
    Next nRiga
End Sub
[Modificato da rollis13 14/03/2024 01:16]

______________________________________________________________
C'è chi fa le COSE a CASO e chi fa CASO alle COSE (Ignoto)
Post: 3.317
Registrato il: 10/10/2013
Città: VICENZA
Età: 69
Utente Master
365
OFFLINE
14/03/2024 01:01

ciao
da tirare a destra se li vuoi in un riga
=SE.ERRORE(FILTRO.XML(""&SOSTITUISCI($A1;" ";"")&"";"//s[following::*[1]='-']["&RIF.COLONNA(A$1)&"]");"")

da tirare in basso se vuoi in una colonna
=SE.ERRORE(FILTRO.XML(""&SOSTITUISCI($A1;" ";"")&"";"//s[following::*[1]='-']["&RIF.RIGA($A1)&"]");"")


se vuoi usare RO come punto fisso
=SE.ERRORE(FILTRO.XML(""&SOSTITUISCI($A1;" ";"")&"";"//s[following::*[2]='RO']["&RIF.COLONNA(A$1)&"]");"")

come noti ho messo 2 al posto di 1 perchè hai sempre - prima del RO

perchè diavolo vedo una riga centrale nella formula ?
[Modificato da federico460 14/03/2024 01:12]
Post: 1.232
Registrato il: 02/04/2018
Città: PESCARA
Età: 75
Utente Veteran
EXCEL 2016 - SPREAD32
ONLINE
14/03/2024 08:51

=SE.ERRORE(FILTRO.XML(""&SOSTITUISCI($A1;" ";"")&"";"//s[following::*[1]='-']["&RIF.COLONNA(A$1)&"]");"")

qui ho fatto un semplice copincolla
[Modificato da L2018 14/03/2024 08:54]

LEO
https://t.me/LordBrum
Post: 3.318
Registrato il: 10/10/2013
Città: VICENZA
Età: 69
Utente Master
365
OFFLINE
14/03/2024 09:36

ciao
prova colore
=SE.ERRORE(FILTRO.XML(""&SOSTITUISCI($A1;" ";"")&"";"//s[following::*[1]='-']["&RIF.COLONNA(A$1)&"]");"")
=SE.ERRORE(FILTRO.XML(""&SOSTITUISCI($A1;" ";"")&"";"//s[following::*[1]='-']["&RIF.COLONNA(A$1)&"]");"")

bene si è sistemato
[Modificato da federico460 14/03/2024 09:36]
Post: 1.233
Registrato il: 02/04/2018
Città: PESCARA
Età: 75
Utente Veteran
EXCEL 2016 - SPREAD32
ONLINE
14/03/2024 10:23

Re:
federico460, 14/03/2024 09:36:

ciao
prova colore
=SE.ERRORE(FILTRO.XML(""&SOSTITUISCI($A1;" ";"")&"";"//s[following::*[1]='-']["&RIF.COLONNA(A$1)&"]");"")
=SE.ERRORE(FILTRO.XML(""&SOSTITUISCI($A1;" ";"")&"";"//s[following::*[1]='-']["&RIF.COLONNA(A$1)&"]");"")

bene si è sistemato


se si è sistemato ok, ma io non ho mai potuto formattare testi in colore, perchè dopo aver evidenziato un testo, il tentativo di cambiare colore e/o font mi toglie l'evidenziazione, comunque ok



LEO
https://t.me/LordBrum
Post: 3.319
Registrato il: 10/10/2013
Città: VICENZA
Età: 69
Utente Master
365
OFFLINE
14/03/2024 10:34

ciao
Fulvio
ti piace la formula?
è la stessa cosa di TESTO.PRECEDENTE() del 365
l'ho imparata a forza di guerre (scherzose) con Terio
e pensare che è presente anche nelle versioni utilizzate
durante le guerre puniche
[Modificato da federico460 14/03/2024 10:37]
Post: 1.962
Registrato il: 27/07/2010
Utente Veteran
OFFLINE
14/03/2024 12:59

Re:
federico460, 14/03/2024 10:34:

ciao
...
e pensare che è presente anche nelle versioni utilizzate
durante le guerre puniche




Non mi pare che FILTRO.XML sia presente in Excel 2010, quindi direi "e pensare che è presente anche nelle versioni utilizzate durante il covid" 😊

Bye!
scossa

scossa's web site
___
Se tu hai una mela, e io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw)
Post: 3.320
Registrato il: 10/10/2013
Città: VICENZA
Età: 69
Utente Master
365
OFFLINE
14/03/2024 13:17

ciao scossa
parte dal 2013......diciamo dal risorgimento😀
Vota:
Amministra Discussione: | Chiudi | Sposta | Cancella | Modifica | Notifica email Pagina precedente | 1 | Pagina successiva
Nuova Discussione
 | 
Rispondi
Cerca nel forum
Tag discussione
Discussioni Simili   [vedi tutte]
Feed | Forum | Bacheca | Album | Utenti | Cerca | Login | Registrati | Amministra
Tutti gli orari sono GMT+01:00. Adesso sono le 19:34. Versione: Stampabile | Mobile | Regolamento | Privacy
FreeForumZone [v.6.1] - Copyright © 2000-2024 FFZ srl - www.freeforumzone.com