Cerca numero alfanumerico più grande in un elenco

Versione Completa   Stampa   Cerca   Utenti   Iscriviti     Condividi : FacebookTwitter
Aquilarossa64
00domenica 18 dicembre 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
Aquilarossa64
00domenica 18 dicembre 2022 19:23
Allego File .rar
federico460
00domenica 18 dicembre 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;"")
Aquilarossa64
00domenica 18 dicembre 2022 20:19
grazie per la risposta federico, vorrei risolvere il problema con il vba non con le formule
Aquilarossa64
00domenica 18 dicembre 2022 20:21
Comunque ho provato la formula e funziona
Aquilarossa64
00domenica 18 dicembre 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.
federico460
00domenica 18 dicembre 2022 20:32
ciao
non avevo letto che lo volevi in VBA😏
non è il mio campo lascio ad altri
Aquilarossa64
00domenica 18 dicembre 2022 20:46
Ti ringrazio federico spero che qualcuno mi possa aiutare a risolvere in vba
alfrimpa
00domenica 18 dicembre 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.

alfrimpa
00domenica 18 dicembre 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.

Aquilarossa64
00domenica 18 dicembre 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
Aquilarossa64
00lunedì 19 dicembre 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
Aquilarossa64
00lunedì 19 dicembre 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
darionardella
00giovedì 29 dicembre 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
Questa è la versione 'lo-fi' del Forum Per visualizzare la versione completa clicca qui
Tutti gli orari sono GMT+01:00. Adesso sono le 16:40.
Copyright © 2000-2024 FFZ srl - www.freeforumzone.com