Excel Forum Per condividere esperienze su Microsoft Excel

Cerca numero alfanumerico più grande in un elenco

  • Messaggi
  • OFFLINE
    Aquilarossa64
    Post: 93
    Registrato il: 13/09/2013
    Città: SANGINETO
    Età: 59
    Utente Junior
    excel 2003
    00 18/12/2022 19:20
    salve tramite il vba e possibile cercare il numero piu grande in un elenco che va dalla cella C15 nel foglio2 in giù non conoscendo la fine delle'elenco, da tenere in considerazioni che l'elenco è alfanumerico ci sono sette diverse serie. le serie sono presenti nelle celle H8:H14 del fogli1.

    Esempio serie BC e ci sono i numeri cosi composti 1 - BC, 2 - BC ecc
    Esempio serie BB e ci sono i numeri cosi composti 1 - BB, 2 - BB ecc
    Esempio serie BG e ci sono i numeri cosi composti 1 - BG, 2 - BG ecc
    Esempio serie BF e ci sono i numeri cosi composti 1 - BF, 2 - BF ecc
    Esempio serie BE e ci sono i numeri cosi composti 1 - BE, 2 - BE ecc
    Esempio serie CE e ci sono i numeri cosi composti 1 - CE, 2 - CE ecc
    Esempio serie CB e ci sono i numeri cosi composti 1 - CB, 2 - CB ecc

    Il numero deve essere memorizzato nel Foglio 1 nella cella I8:I14 a fianco alla serie allego file di esempio. Ringrazio anticipatamente
    Allego file di esempio
  • OFFLINE
    Aquilarossa64
    Post: 93
    Registrato il: 13/09/2013
    Città: SANGINETO
    Età: 59
    Utente Junior
    excel 2003
    00 18/12/2022 19:23
    Allego File .rar
  • OFFLINE
    federico460
    Post: 2.745
    Registrato il: 10/10/2013
    Città: VICENZA
    Età: 69
    Utente Veteran
    365
    00 18/12/2022 20:00
    ciao

    strano oggi ci sono state due persone con lo stesso
    problema su due forum diversi cambia solo il carattere di separazione
    matriciale CTRL MAIUSCOLO INVIO
    =SE(H8<>"";MAX(SE(DESTRA(Foglio2!$C$15:$C$37;LUNGHEZZA($H8))=$H8;SINISTRA(Foglio2!$C$15:$C$37;TROVA("-";Foglio2!$C$15:$C$37)-2)*1;0))&" - "&$H8;"")
    [Modificato da federico460 18/12/2022 20:00]
  • OFFLINE
    Aquilarossa64
    Post: 94
    Registrato il: 13/09/2013
    Città: SANGINETO
    Età: 59
    Utente Junior
    excel 2003
    00 18/12/2022 20:19
    grazie per la risposta federico, vorrei risolvere il problema con il vba non con le formule
  • OFFLINE
    Aquilarossa64
    Post: 95
    Registrato il: 13/09/2013
    Città: SANGINETO
    Età: 59
    Utente Junior
    excel 2003
    00 18/12/2022 20:21
    Comunque ho provato la formula e funziona
  • OFFLINE
    Aquilarossa64
    Post: 96
    Registrato il: 13/09/2013
    Città: SANGINETO
    Età: 59
    Utente Junior
    excel 2003
    00 18/12/2022 20:26
    ricordo che L'elenco dei numeri che si trova sul foglio2 e parte dalla cella C15 non conosco la fine dell'elenco.
  • OFFLINE
    federico460
    Post: 2.746
    Registrato il: 10/10/2013
    Città: VICENZA
    Età: 69
    Utente Veteran
    365
    00 18/12/2022 20:32
    ciao
    non avevo letto che lo volevi in VBA😏
    non è il mio campo lascio ad altri
  • OFFLINE
    Aquilarossa64
    Post: 97
    Registrato il: 13/09/2013
    Città: SANGINETO
    Età: 59
    Utente Junior
    excel 2003
    00 18/12/2022 20:46
    Ti ringrazio federico spero che qualcuno mi possa aiutare a risolvere in vba
  • OFFLINE
    alfrimpa
    Post: 4.869
    Registrato il: 21/06/2013
    Città: NAPOLI
    Età: 70
    Utente Master
    Excel 365
    00 18/12/2022 20:51
    Re:
    Aquilarossa64, 18/12/2022 20:19:

    grazie per la risposta federico, vorrei risolvere il problema con il vba non con le formule



    Francamente non capisco perchè si debba usare il VBA quando con le formule raggiungi lo stesso risultato.

    Il VBA si usa quando con le formule non si può ottenere lo stesso risultato.


    Alfredo
  • OFFLINE
    alfrimpa
    Post: 4.870
    Registrato il: 21/06/2013
    Città: NAPOLI
    Età: 70
    Utente Master
    Excel 365
    00 18/12/2022 20:51
    Re:
    Aquilarossa64, 18/12/2022 20:19:

    grazie per la risposta federico, vorrei risolvere il problema con il vba non con le formule



    Francamente non capisco perchè si debba usare il VBA quando con le formule raggiungi lo stesso risultato.

    Il VBA si usa quando con le formule non si può ottenere lo stesso risultato.


    Alfredo
  • OFFLINE
    Aquilarossa64
    Post: 98
    Registrato il: 13/09/2013
    Città: SANGINETO
    Età: 59
    Utente Junior
    excel 2003
    00 18/12/2022 22:34
    uno dei problemi e che non conosco la fine dell'intervallo, comunque volevo sapere se la formula che ha proposto federico si può fare anche con una formula non matricale
  • OFFLINE
    Aquilarossa64
    Post: 99
    Registrato il: 13/09/2013
    Città: SANGINETO
    Età: 59
    Utente Junior
    excel 2003
    00 19/12/2022 09:27
    Buongiorno volevo sapere se la formula postata da federico =SE(H8<>"";MAX(SE(DESTRA(Foglio2!$C$15:$C$37;LUNGHEZZA($H8))=$H8;SINISTRA(Foglio2!$C$15:$C$37;TROVA("-";Foglio2!$C$15:$C$37)-2)*1;0))&" - "&$H8;"")
    si puo modificare e ottenere lo stesso risultato con una formula normale
  • OFFLINE
    Aquilarossa64
    Post: 100
    Registrato il: 13/09/2013
    Città: SANGINETO
    Età: 59
    Utente Junior
    excel 2003
    00 19/12/2022 20:25
    chiedo scusa se insisto a chiedere la stessa cosa, qualcuno esperto di formule saprebbe dirmi se la formula proposta da federico460 si può modificare e ottenere lo stesso risultato con una formula normale non matricale . In attesa di una risposta ringrazio tutti
  • OFFLINE
    darionardella
    Post: 55
    Registrato il: 18/10/2016
    Città: COSENZA
    Età: 65
    Utente Junior
    Excel 2007
    00 29/12/2022 09:28
    Numero più grande
    Buongiorno Aquilarossa64,
    premetto che io reputo il VBA una ottima soluzione per molti problemi, le formule sono utilissime e efficienti, ma solo se in numero limitato nella cartella, poichè, diversamente, "appesantiscono molto" e "rallentano".
    Inoltre sono, a volte, molto complesse, e poco chiare.
    Il VBA permette di suddividere il problema in piccoli problemi, ed è più chiaro.
    Entrambe le soluzioni sono appropriate, ma per problemi complessi è preferibile il VBA, che consiglio di approfondire.
    Comunque, allego la soluzione VBA.
    Il file contiene la macro PiuGrande, che si lancia con il pulsante posto nel foglio "Serie" (ho cambiato i nomi ai fogli per chiarezza).
    Ma si può lanciare anche con ALT+F8 e cliccando "esegui" nella maschera che compare.
    Viene chiesto se ripulire la colonna NumeroPiuGrande oppure no, prima dell'esecuzione.
    Se non si ripulisce, le serie non presenti nei Dati, non vengono aggiornate.....
    riporto di seguito la macro, che è già contenuta nel file.
    Attenzione!
    Se si cambia l'etichetta "SERIE" nel foglio "Serie" e/o "NUMERO" nel foglio "Dati" la macro non funziona.
    Se si vuole cambiare, bisogna intervenire alla riga 2 e/o 7 della macro, e sostituire anche lì le etichette.
    Buon lavoro e buon anno

    Sub PiuGrande()
    Set serie = Sheets("Serie")
    Set cella = serie.Cells.Find("Serie", , , xlWhole)
    If cella Is Nothing Then Exit Sub
    riga = cella.Row: colonna = cella.Column
    Set rngserie = serie.Cells(riga, colonna).CurrentRegion.Columns(1).Cells
    Set dati = Sheets("Dati")
    Set cella = dati.Cells.Find("Numero", , , xlWhole)
    If cella Is Nothing Then Exit Sub
    riga = cella.Row: colonna = cella.Column
    Set rngdati = dati.Cells(riga, colonna).CurrentRegion.Columns(1).Cells
    With rngdati
    strser = ","
    For Each c In rngdati
    serie1 = c.Value
    mat = Split(serie1, "-")
    If UBound(mat) < 1 Then GoTo nextc
    nr = Val(Trim(mat(0)))
    ser = Trim(mat(1))
    pos = InStr(1, strser, "," & ser & ",", vbTextCompare)
    If pos > 0 Then GoTo nextc
    strser = strser & ser & ","
    Set cella = rngdati.Find("*" & ser, , , xlWhole)
    r1 = cella.Row: rfound = r1
    maxnr = 0
    Do
    serie1 = cella.Value
    mat = Split(serie1, "-")
    nr = Val(Trim(mat(0)))
    If nr > maxnr Then maxnr = nr
    Set cella = rngdati.FindNext(cella)
    rfound = cella.Row
    Loop Until rfound = r1
    strmax = strmax & "," & maxnr
    nextc:
    Next c
    End With
    strser = Replace(strser, ",", "", 1, 1)
    matserie = Split(strser, ",")
    strmax = Replace(strmax, ",", "", 1, 1)
    matmax = Split(strmax, ",")
    'MsgBox strser & vbCr & strmax
    With rngserie
    risp = MsgBox("Cancellare NumeroPiuGrande già esistenti?", vbCritical + vbYesNo)
    If risp = vbYes Then
    rngserie.Offset(1, 1).ClearContents
    End If
    'Exit Sub
    For Each ser In matserie
    Set cella = .Find(ser, , , xlWhole)
    If Not cella Is Nothing Then
    nr = Val(matmax(i))
    cella.Cells(1, 2).Value = nr
    End If
    i = i + 1
    Next ser
    End With
    End Sub