Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

ordinamento colonne

16 views
Skip to first unread message

Daniele

unread,
Dec 22, 2007, 7:45:37 PM12/22/07
to
Supponiamo di avere in colonna A un elenco di nomi ordinati alfabeticamente
ed in colonna B dei valori
Esempio
Bianchi 4
Gialli 7
Neri 12
Rossi 17
Verdi 4

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


rick2

unread,
Dec 22, 2007, 10:59:10 PM12/22/07
to

"Daniele" <danger21...@tin.it> ha scritto nel messaggio
news:476dafb6$0$4786$4faf...@reader4.news.tin.it...


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


stirner

unread,
Dec 23, 2007, 1:16:05 AM12/23/07
to

====================================
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

fernando cinquegrani

unread,
Dec 23, 2007, 1:52:04 AM12/23/07
to
"Daniele" <danger21...@tin.it> ha scritto nel messaggio
news:476dafb6$0$4786$4faf...@reader4.news.tin.it...
> Supponiamo di avere in colonna A un elenco di nomi ordinati
> alfabeticamente ed in colonna B dei valori
> Ora si vorrebbe avere in altre 2 coonne E ed F un ordinamento in base al
> valore di B

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


fernando cinquegrani

unread,
Dec 23, 2007, 2:22:05 AM12/23/07
to

"stirner" <santoc...@alice.it> ha scritto nel messaggio
news:27c598b8-e0af-475d...@l6g2000prm.googlegroups.com...
ciao striner,
non avevo visto il tuo post quando ho risposto.
ora che lo vedo, vedo anche che il problema dei
valori uguali continua a sfuggirti :-)
è lo stesso problema di 'numeri casuali'
.f


stirner

unread,
Dec 23, 2007, 7:51:19 AM12/23/07
to
On 23 Dic, 08:22, "fernando cinquegrani" <f.cinquegr...@xroxxmxxxa.it>
wrote:
> "stirner" <santocaris...@alice.it> ha scritto nel messaggionews:27c598b8-e0af-475d...@l6g2000prm.googlegroups.com...

> On 23 Dic, 01:45, "Daniele" <danger21SPARI...@tin.it> wrote:
> In E1:
> =INDICE($A$1:$A$5;CONFRONTA(GRANDE($B$1:$B$5;RIF.RIGA());$B$1:$B$5;0))
> e trscini in basso.
> ---
> ciao striner,
> non avevo visto il tuo post quando ho risposto.
> ora che lo vedo, vedo anche che il problema dei
> valori uguali continua a sfuggirti :-)
> è lo stesso problema di 'numeri casuali'
>                                               .f
=================================
Ciao fernando,
per i problema dei "numeri casuali" ho seguito con molto ilnteresee il
tuo post che mi ha tolto qualche dubbio.
Qui, invece il problema non mi era affatto sfuggito visto il modo in
cui era stata posta la domanda (anche in effetti sui "numeri casuali"
era molto asciutta).Ma se si vuole risolvere il problema degli
eventuali doppioni...non c'è problema direbbero dalle mie parti.

=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

fernando cinquegrani

unread,
Dec 23, 2007, 8:24:11 AM12/23/07
to

"stirner" <santoc...@alice.it> ha scritto nel messaggio
news:036600c6-4bee-421b...@s12g2000prg.googlegroups.com...

era molto asciutta).Ma se si vuole risolvere il problema degli
eventuali doppioni...non c'è problema direbbero dalle mie parti.
----

=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))

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!

stirner

unread,
Dec 23, 2007, 9:59:31 AM12/23/07
to
On 23 Dic, 14:24, "fernando cinquegrani" <f.cinquegr...@xroxxmxxxa.it>
wrote:
> "stirner" <santocaris...@alice.it> ha scritto nel messaggionews:036600c6-4bee-421b...@s12g2000prg.googlegroups.com...
=================================

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

Daniele

unread,
Dec 23, 2007, 10:36:33 AM12/23/07
to
Ok funziona.
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.
Ho provato con SE ma sembra non lo tenga in consideazione...

"fernando cinquegrani" <f.cinq...@xroxxmxxxa.it> ha scritto nel
messaggio news:eRuZwBTR...@TK2MSFTNGP04.phx.gbl...

stirner

unread,
Dec 23, 2007, 11:28:24 AM12/23/07
to
On 23 Dic, 16:36, "Daniele" <danger21SPARI...@tin.it> wrote:
> Ok funziona.
> 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.
===================================

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

fernando cinquegrani

unread,
Dec 23, 2007, 11:38:08 AM12/23/07
to

"stirner" <santoc...@alice.it> ha scritto nel messaggio
news:0d9d82a4-34e5-4443...@e4g2000hsg.googlegroups.com...

On 23 Dic, 14:24, "fernando cinquegrani" <f.cinquegr...@xroxxmxxxa.it>
wrote:
> "stirner" <santocaris...@alice.it> ha scritto nel
> messaggionews:036600c6-4bee-421b...@s12g2000prg.googlegroups.com...
=================================

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


fernando cinquegrani

unread,
Dec 23, 2007, 11:43:10 AM12/23/07
to
"fernando cinquegrani" <f.cinq...@xroxxmxxxa.it> ha scritto nel
messaggio news:OmCZlJYR...@TK2MSFTNGP03.phx.gbl...
>

> ----
> 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


fernando cinquegrani

unread,
Dec 23, 2007, 11:46:57 AM12/23/07
to

"fernando cinquegrani" <f.cinq...@xroxxmxxxa.it> ha scritto nel
messaggio news:%23$VkrLYRI...@TK2MSFTNGP02.phx.gbl...

> "fernando cinquegrani" <f.cinq...@xroxxmxxxa.it> ha scritto nel
> 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.

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


Daniele

unread,
Dec 23, 2007, 12:18:04 PM12/23/07
to
L'errore appare su tutte le celle...

"stirner" <santoc...@alice.it> ha scritto nel messaggio
news:1cd130e0-dc3b-4f99...@s19g2000prg.googlegroups.com...

giovanna

unread,
Dec 23, 2007, 12:43:05 PM12/23/07
to
Il 23/12/2007, Daniele ha detto :

> L'errore appare su tutte le celle...
>

>> 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
.........................


0 new messages