Ora si vorrebbe avere in altre 2 coonne E ed F un ordinamento in base al
valore di B
Rossi 17
Neri 12
Bianchi 4
Gialli 7
Verdi 4
I dati vengono inseriti nella colonna A mentre la B si ottiene tramite un
calcolo.
Ho provato con una macro che ordini /copia/incolla ma non fiunziona come
vorrei...
Consigli?
Grazie
Sub Macroordina ()
Range("A1:B5").Select
Selection.Copy
Range("E1").Select
ActiveSheet.Paste
Application.CutCopyMode = False
Selection.Sort Key1:=Range("F1"), Order1:=xlDescending, Header:=xlGuess,
_
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
End Sub
Ciao Rick
====================================
Ciao,
di macro non capisco un tubo ma se tu volessi una soluzione con
formule...
In F1:
=GRANDE($B$1:$B$5;RIF.RIGA()) e trascini in basso
In E1:
=INDICE($A$1:$A$5;CONFRONTA(GRANDE($B$1:$B$5;RIF.RIGA());$B$1:$B$5;0))
e trscini in basso.
------------
Stirner
in A1 'Nomi'
in a2:a6 i tuoi nomi
in B1 'Valori'
in b2:b6 i tuoi valori
con una colonna d'appoggio
in C2 =RANGO(B2;$B$2:$B$6)+CONTA.SE(B2:$B$2;B2)-1
e trascini fino a C6
in D2 =INDICE(A$2:A$6;CONFRONTA(RIF.RIGA()-1;$C$2:$C$6;0))
e trascini fino a E6
o
senza colonna d'appoggio
in C2:C6
=INDICE(A$2:A$6;CONFRONTA(GRANDE($B$2:$B$6-RIF.RIGA($B$2:$B$6)/10^10;RIF.RIGA()-1);$B$2:$B$6-RIF.RIGA($B$2:$B$6)/10^10;0))
[inserire con Ctrl+Maiusc+Invio]
quindi copiare C2:C6 in D2:D6
.f
fernando cinquegrani
http://www.prodomosua.eu
=INDICE(A$2:A$20;CONFRONTA(GRANDE(SE($B$2:$B$20<>0;$B$2:$B$20+1/
RIF.RIGA($B$2:$B$20));RIF.RIGA(A1));$B$2:$B$20+1/RIF.RIGA($B$2:$B$20);
0))
Attenzione:adattare i riferimenti!!!
Copiare a destra ed in basso. Attenzione la formula è matriciale!!!
Ancora una cosa per Fernando: Una volta ti chiesi il significato di
quel CONTA.SE dopo RANGO. Inutilmete aspettai una risposta.
Adesso che lo so tu quasi mi rimproveri per le "sfuggitine".
E' NATALE. Auguri
---------------
Stirner
bene. ora però fai una prova.
in C2:D2000 inserisci la tua formula
=INDICE(A$2:A$2000;CONFRONTA(GRANDE(SE($B$2:$B$2000<>0;$B$2:$B$2000+1/RIF.RIGA($B$2:$B$2000));RIF.RIGA(A1));$B$2:$B$2000+1/RIF.RIGA($B$2:$B$2000);0))
e in E2:F2000 inserisci la formula che ho suggerito io
=INDICE(A$2:A$2000;CONFRONTA(GRANDE($B$2:$B$2000-RIF.RIGA($B$2:$B$2000)/10^10;RIF.RIGA()-1);$B$2:$B$2000-RIF.RIGA($B$2:$B$2000)/10^10;0))
[attenzione: la modalità di immissione è diversa: la tua formula
richiede un ctrl-maiusc+invio nella cella C2, la mia un unico
ctrl+maiusc+invio dopo aver selezionato E2:E2000]
e poi misura i tempi
Option Explicit
Sub time()
Dim tstart As Date
tstart = Now
ActiveSheet.Range("C2:D2000").Calculate
MsgBox Format(Now - tstart, "s")
tstart = Now
ActiveSheet.Range("E2:F2000").Calculate
MsgBox Format(Now - tstart, "s")
End Sub
-----
Ancora una cosa per Fernando: Una volta ti chiesi il significato di
quel CONTA.SE dopo RANGO. Inutilmete aspettai una risposta.
Adesso che lo so tu quasi mi rimproveri per le "sfuggitine".
-----
mi sembrava di aver risposto:
http://groups.google.com/group/microsoft.public.it.office.excel/browse_frm/thread/c1b109146731df08
[e comunque non era certo un rimprovero :-), anzi...]
----
E' NATALE. Auguri
----
auguri anche a te!
Ciao fernando,
fra intendimenti e fraentendimenti è rimasta solo una cosa:
> Option Explicit
> Sub time()
> Dim tstart As Date
> tstart = Now
> ActiveSheet.Range("C2:D2000").Calculate
> MsgBox Format(Now - tstart, "s")
> tstart = Now
> ActiveSheet.Range("E2:F2000").Calculate
> MsgBox Format(Now - tstart, "s")
> End Sub
Questa cosa qui dove la devo incollare e poi quale comando devo
eseguire?
Grazie
---------------
Stirner
"fernando cinquegrani" <f.cinq...@xroxxmxxxa.it> ha scritto nel
messaggio news:eRuZwBTR...@TK2MSFTNGP04.phx.gbl...
Puoi usare la formattazione condizionale per nascondere l'errore
Seleziona l'intera colonna che ti interessa (es. B)
Formato>Formattazione condizionale>
>La formula è: =VAL.ERRORE(B1)> seleziona il colore bianco.
Ciao
Stirner
Ciao fernando,
fra intendimenti e fraentendimenti è rimasta solo una cosa:
> Option Explicit
> Sub time()
> Dim tstart As Date
> tstart = Now
> ActiveSheet.Range("C2:D2000").Calculate
> MsgBox Format(Now - tstart, "s")
> tstart = Now
> ActiveSheet.Range("E2:F2000").Calculate
> MsgBox Format(Now - tstart, "s")
> End Sub
----
clic destro sulla linguetta del foglio dove sono le formule
quindi visualizza codice
incolli la routine nell'editor
torni nel foglio e da menu:
strumenti :: macro :: macro... [time]...esegui
.f
> ----
> clic destro sulla linguetta del foglio dove sono le formule
> quindi visualizza codice
> incolli la routine nell'editor
> torni nel foglio e da menu:
> strumenti :: macro :: macro... [time]...esegui
dimenticavo (pure ero sicuro di averlo scritto),
devi impostare il calcola a manuale
da menu:
strumenti :: opzioni :: calcolo [x] manuale
altrimenti il foglio viene ricalcolato sempre.
.f
anzi...meglio che lo faccia la routine stessa
Option Explicit
Sub time()
Dim tstart As Date
Application.Calculation = xlCalculationManual
tstart = Now
ActiveSheet.Range("C2:D2000").Calculate
MsgBox Format(Now - tstart, "s")
tstart = Now
ActiveSheet.Range("E2:F2000").Calculate
MsgBox Format(Now - tstart, "s")
Application.Calculation = xlCalculationAutomatic
End Sub
.f
"stirner" <santoc...@alice.it> ha scritto nel messaggio
news:1cd130e0-dc3b-4f99...@s19g2000prg.googlegroups.com...
>> Se pero' metto
>> =INDICE(A$2:A$200;CONFRONTA(GRANDE(SE($B$2:$B$200<>0;$B$2:$B$200+1/RIF.RIGA($B$2:$B$200));RIF.RIGA(A1));$B$2:$B$200+1/RIF.RIGA($B$2:$B$200);0))
>> e i miei valori arrivano fino ad A120 ottengo un errore #ND in quanto tenta
>> di ordinare celle vuote.
ciao daniele
è un po' strano, dovresti avere il valore di errore #NUM! in caso di
celle vuote.
Come immetti la formula?
Da immettere in una cella e poi trascinare-copiare sotto.
--
ciao
giovanna
.......................
www.riolab.org
.........................