Excel Forum Per condividere esperienze su Microsoft Excel

Estrarre più numeri da una stessa stringa

  • Messaggi
  • OFFLINE
    LucaT.
    Post: 29
    Registrato il: 22/04/2017
    Città: UDINE
    Età: 58
    Utente Junior
    Excel 2016
    00 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]
  • OFFLINE
    rollis13
    Post: 1.397
    Registrato il: 16/08/2015
    Città: CORDENONS
    Età: 67
    Utente Veteran
    Excel 2016-32bit Win11
    00 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)
  • OFFLINE
    federico460
    Post: 3.317
    Registrato il: 10/10/2013
    Città: VICENZA
    Età: 69
    Utente Master
    365
    00 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]
  • OFFLINE
    L2018
    Post: 1.232
    Registrato il: 02/04/2018
    Città: PESCARA
    Età: 75
    Utente Veteran
    EXCEL 2016 - SPREAD32
    00 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
  • OFFLINE
    federico460
    Post: 3.318
    Registrato il: 10/10/2013
    Città: VICENZA
    Età: 69
    Utente Master
    365
    00 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]
  • OFFLINE
    L2018
    Post: 1.233
    Registrato il: 02/04/2018
    Città: PESCARA
    Età: 75
    Utente Veteran
    EXCEL 2016 - SPREAD32
    00 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
  • OFFLINE
    federico460
    Post: 3.319
    Registrato il: 10/10/2013
    Città: VICENZA
    Età: 69
    Utente Master
    365
    00 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]
  • OFFLINE
    scossa
    Post: 1.962
    Registrato il: 27/07/2010
    Utente Veteran
    00 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)
  • OFFLINE
    federico460
    Post: 3.320
    Registrato il: 10/10/2013
    Città: VICENZA
    Età: 69
    Utente Master
    365
    00 14/03/2024 13:17
    ciao scossa
    parte dal 2013......diciamo dal risorgimento😀