Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

Determ gli n valori più alti da più intervalli disgiunti

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

Determ gli n valori più alti da più intervalli disgiunti

Postdi mikecodadilupo » 11/03/07 12:53

ciao a tutti...

mi serve un aiuto sui seguenti due importanti problemi....

PRIMO PROBLEMA: grazie a questo forum imparai tempo addietro come, data una matrice generica contenente dei numeri qualsiasi, si potessero evidenziare i primi 20 numeri più elevati, ed il codice era il seguente:

Range("C9:S19").Select
Selection.FormatConditions.Delete
Selection.FormatConditions.Add Type:=xlExpression, _
Formula1:="=RANGO(C9;$C$9:$S$19)<=20"
With Selection.FormatConditions(1).Font
.Bold = True
.Italic = True
.ColorIndex = 46
End With

questo codice, in pratica, seleziona i numeri nell'intervallo c9:s19 e mi formatta a mio piacimento i primi 20 più alti in valore.

Il mio problema adesso è il seguente:
devo ripetere lo stesso ragionamento, ovvero formattare i 20 valori più elevati, ma stavolta non in un unico intervallo c9:s19 ma nei due sotto intervalli c9:g19 e p9:s19
quindi vorrei formattare i 20 valori più elevati relativi a queste due matrici più piccole (mentre nel caso precedete era una unica matrice).
spero di essere stato chiaro...

SECONDO PROBLEMA
Una volta che nei due sotto insiemi c9:g19 e p9:s19 ho formattato (in particolare in grassetto) i numeri che soddisfano il criterio di selezione, vorrei che nelle celle a1 e b1 fossero riportati il numero di elementi che soddisfavano la condizione di essere in grassetto rispettivamente per c9:g19 in a1 e per p9:s19 in b1.
ad esempio: se dei 20 valori piu elevati che cerco, 7 sono in c9:g19 e 13 sono in p9:s19, dovrà essere il valore della cella A1=7 e il valore della cella B1=13.

grazie tante
mikecodadilupo
Utente Junior
 
Post: 38
Iscritto il: 18/04/06 10:52

Sponsor
 

Postdi Anthony47 » 12/03/07 01:57

Per il problema 1 puoi utilizzare lo stesso approccio, con l' unica avvertenza che prima definiamo un range che comprende ambedue le aree che ti interessano.
Quindi: Menu /Inserisci /Nome /Definisci; digiti nello spazio superiore il nome che vuoi assegnare, es pippo, e nell' area inferiore "Riferito a" digiti gli indirizzi =Foglio1!$C$9:$G$19;Foglio1!$P$9:$S$19 (compreso nome foglio, che ovviamente inserirai come da tue esigenze).
Poi come codice userai
Codice: Seleziona tutto
Sub Top20()
' Range("pippo").Select
Application.Goto Reference:="pippo"
Selection.FormatConditions.Delete
Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _
        "=RANGO(P9;pippo)<=20"
With Selection.FormatConditions(1).Font
    .Bold = True
    .Italic = False
End With
Selection.FormatConditions(1).Interior.ColorIndex = 46
Range("C3").Select
End Sub


Per il secondo problema, non potendo contare le celle formattate, calcoleremo quante celle rispondono al criterio con MATR.SOMMA.PRODOTTO; quindi
in A1
Codice: Seleziona tutto
=MATR.SOMMA.PRODOTTO((RANGO(C9:G19;pippo)<=20)*1)

ib B1
Codice: Seleziona tutto
=MATR.SOMMA.PRODOTTO((RANGO(P9:S19;pippo)<=20)*1)


Ciao.
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13904
Iscritto il: 21/03/06 16:03
Località: Ivrea

Postdi mikecodadilupo » 12/03/07 10:31

l'ho provato e funziona ameraviglia...


dirvi grazie è sempre poco.... :P
mikecodadilupo
Utente Junior
 
Post: 38
Iscritto il: 18/04/06 10:52

Postdi mikecodadilupo » 14/04/07 13:32

ciao a tutti.....

ho un altro piccolo problema...

dunque..... io ho questa sequenza di codice....


Application.Goto Reference:="TUTTO"
Selection.FormatConditions.Delete
Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _
"=RANGO(C9;TUTTO)<=A"
With Selection.FormatConditions(1).Font
.Bold = True
.Italic = False
.ColorIndex = 46
End With

questa sequenza fa le seguenti cose:
- seleziona l'intervallo "TUTTO"
- formatta gli "A" numeri più elevati in tale intervallo.

o meglio....dovrebbe formattarli.....

infatti...se ad A sostituisco ad esempio un numero...tipo 8...allora mi formatta gli 8 numeri più grandi ma se dichiaro A come intero ed associo ad A il valore di una cella ecco che non mi fa proprio niente.

in altre parlo il problema è questo: io non so a priori se devo formattare i primi 3 valori dell'intervallo o i primi 4 o i primi 100...

io lo so solo tramite la cella A1. Se nella cella A1 c'è scritto 9 ...significa che VBA deve formattarmi i 9 valori più elevati dell'intervallo TUTTO.

io ho usato quel codice, ho definito A come intero e ho assegnato il valore della cella A1 ad A....ma non fa niente.

dove sbaglio???? :(
mikecodadilupo
Utente Junior
 
Post: 38
Iscritto il: 18/04/06 10:52

Postdi archimede » 14/04/07 14:07

mikecodadilupo ha scritto:dove sbaglio?
Non l'ho provato, ma direi qualcosa tipo "=RANGO(C9;TUTTO)<=" & A

HTH.

Alessandro
archimede
Moderatore
 
Post: 2755
Iscritto il: 07/11/02 12:41
Località: Genova

Postdi mikecodadilupo » 15/04/07 07:39

ottimo..... 8) grazie mille

e dire che non l'avevi nemmeno provato :D
mikecodadilupo
Utente Junior
 
Post: 38
Iscritto il: 18/04/06 10:52


Torna a Applicazioni Office Windows


Topic correlati a "Determ gli n valori più alti da più intervalli disgiunti":


Chi c’è in linea

Visitano il forum: alfrimpa, giorgio1979 e 8 ospiti