Pagina precedente | 1 | Pagina successiva
Vota | Stampa | Notifica email    
Autore

Cerca numero alfanumerico più grande in un elenco

Ultimo Aggiornamento: 29/12/2022 09:28
Post: 93
Registrato il: 13/09/2013
Città: SANGINETO
Età: 59
Utente Junior
excel 2003
OFFLINE
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
Post: 93
Registrato il: 13/09/2013
Città: SANGINETO
Età: 59
Utente Junior
excel 2003
OFFLINE
18/12/2022 19:23

Allego File .rar
Post: 2.745
Registrato il: 10/10/2013
Città: VICENZA
Età: 69
Utente Veteran
365
OFFLINE
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]
Post: 94
Registrato il: 13/09/2013
Città: SANGINETO
Età: 59
Utente Junior
excel 2003
OFFLINE
18/12/2022 20:19

grazie per la risposta federico, vorrei risolvere il problema con il vba non con le formule
Post: 95
Registrato il: 13/09/2013
Città: SANGINETO
Età: 59
Utente Junior
excel 2003
OFFLINE
18/12/2022 20:21

Comunque ho provato la formula e funziona
Post: 96
Registrato il: 13/09/2013
Città: SANGINETO
Età: 59
Utente Junior
excel 2003
OFFLINE
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.
Post: 2.746
Registrato il: 10/10/2013
Città: VICENZA
Età: 69
Utente Veteran
365
OFFLINE
18/12/2022 20:32

ciao
non avevo letto che lo volevi in VBA😏
non è il mio campo lascio ad altri
Post: 97
Registrato il: 13/09/2013
Città: SANGINETO
Età: 59
Utente Junior
excel 2003
OFFLINE
18/12/2022 20:46

Ti ringrazio federico spero che qualcuno mi possa aiutare a risolvere in vba
Post: 4.869
Registrato il: 21/06/2013
Città: NAPOLI
Età: 70
Utente Master
Excel 365
OFFLINE
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
Post: 4.870
Registrato il: 21/06/2013
Città: NAPOLI
Età: 70
Utente Master
Excel 365
OFFLINE
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
Post: 98
Registrato il: 13/09/2013
Città: SANGINETO
Età: 59
Utente Junior
excel 2003
OFFLINE
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
Post: 99
Registrato il: 13/09/2013
Città: SANGINETO
Età: 59
Utente Junior
excel 2003
OFFLINE
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
Post: 100
Registrato il: 13/09/2013
Città: SANGINETO
Età: 59
Utente Junior
excel 2003
OFFLINE
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
Post: 55
Registrato il: 18/10/2016
Città: COSENZA
Età: 65
Utente Junior
Excel 2007
OFFLINE
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
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 12:57. Versione: Stampabile | Mobile | Regolamento | Privacy
FreeForumZone [v.6.1] - Copyright © 2000-2024 FFZ srl - www.freeforumzone.com