Benvenuto Ospite Cerca | Topic Attivi | Utenti | | Log In | Registra

funzione MODA Opzioni
tredate
Inviato: Saturday, July 23, 2005 11:12:08 AM
Rank: Member

Iscritto dal : 7/23/2005
Posts: 0
Ciao a tutti.
Vorrei cortesemente questo aiuto per excel:
Se la funzione MODA mi restituisce il valore più ricorrente in un intervallo compreso ad es. tra 100 numeri,
come fare per ottenere una graduatoria dei 6 numeri più ricorrenti?
Per meglio spiegarmi: è possibile ottenere:
A) il numero che occupa la prima posizione di frequenza, ossia il più frequente;
B) il numero che occupa la seconda posizione di frequenza;
C) il numero che occupa la terza posizione di frequenza, ecc.

Buon w.e. a tutti e grazie anticipate a chi vorrà rispondermi.

Armando
Sponsor
Inviato: Saturday, July 23, 2005 11:12:08 AM

 
a10n11
Inviato: Saturday, July 23, 2005 6:53:00 PM

Rank: AiutAmico

Iscritto dal : 5/29/2003
Posts: 1,694
credo che sia necessario ricorrere al Vba.
una possibile soluzione può essere quella di inserire la funzione Mode all'interno di cicli for. ognu ciclo calcola la ricorrenza e cancella i records elaborati facendo in modo che ad ogni ciclo la tabella sia depurata dei valori già considerati.
Se trovi difficoltà a scriverti una macro fa sapere che troveremo un attimo per postare un esempio della amcro.
saluti
Andrea

tredate
Inviato: Saturday, July 23, 2005 10:02:50 PM
Rank: Member

Iscritto dal : 7/23/2005
Posts: 0
Grazie per la risposta, ma mi dovresti proprio aiutare; sono un nuovo "apprendista" di excel, non conosco il VBA e non ho ancora provato le macro.
Non do come fare a depurare la tabella ad ogni ciclo.
Come vedi brancolo proprio male: qui mi occorre il carro attrezzi; se te la senti aspetto la tua guida!

Buona domenica, Andrea.
a10n11
Inviato: Sunday, July 24, 2005 6:39:09 PM

Rank: AiutAmico

Iscritto dal : 5/29/2003
Posts: 1,694
ecco una possibile soluzione al tuo problema.
Calcola le prime sei maggiori ricorrenze in un range di dati.
Copia questa macro in un modulo di Visual basic.
La macro considera i dati in colonna "A" del foglio1 e necessita di spazio libero sulla colonna "A" del foglio2 per appoggiare i dati.
questa è la macro:
Sub moda()
Application.ScreenUpdating = False
Sheets("foglio1").Select
Set miorange = Range(Cells(1, 1), Cells(1, 1).End(xlDown))
miorange.Select
Selection.Copy
Sheets("foglio2").Select
Range("a1").Select
ActiveSheet.Paste
Application.CutCopyMode = False
Set miorage = Nothing

Set area = Range(Cells(1, 1), Cells(1, 1).End(xlDown))
r = Range(Cells(1, 1), Cells(1, 1).End(xlDown)).Rows.Count

r1 = Application.Mode(area)
For n = r To 1 Step -1
Range("a" & n).Select
If ActiveCell = r1 Then
ActiveCell.EntireRow.Select
Selection.Delete
End If
Next

r2 = Application.Mode(area)
For n = r To 1 Step -1
Range("a" & n).Select
If ActiveCell = r2 Then
ActiveCell.EntireRow.Select
Selection.Delete
End If
Next

r3 = Application.Mode(area)
For n = r To 1 Step -1
Range("a" & n).Select
If ActiveCell = r3 Then
ActiveCell.EntireRow.Select
Selection.Delete
End If
Next

r4 = Application.Mode(area)
For n = r To 1 Step -1
Range("a" & n).Select
If ActiveCell = r4 Then
ActiveCell.EntireRow.Select
Selection.Delete
End If
Next

r5 = Application.Mode(area)
For n = r To 1 Step -1
Range("a" & n).Select
If ActiveCell = r5 Then
ActiveCell.EntireRow.Select
Selection.Delete
End If
Next

r6 = Application.Mode(area)
For n = r To 1 Step -1
Range("a" & n).Select
If ActiveCell = r6 Then
ActiveCell.EntireRow.Select
Selection.Delete
End If
Next

Set area = Nothing
Cells.Select
Selection.ClearContents
Range("a1").Select
Sheets("foglio1").Select
Range("b1") = r1
Range("c1") = "1° in frequenza"
Range("b2") = r2
Range("c2") = "2° in frequenza"
Range("b3") = r3
Range("c3") = "3° in frequenza"
Range("b4") = r4
Range("c4") = "4° in frequenza"
Range("b5") = r5
Range("c5") = "5° in frequenza"
Range("b6") = r6
Range("c6") = "6° in frequenza"
Range("a1").Select
Application.ScreenUpdating = True
End Sub

vedi se è quanto ti è utile.
saluti
Andrea

Edited by - a10n11 on 07/25/2005 12:01:11

tredate
Inviato: Monday, July 25, 2005 10:09:54 PM
Rank: Member

Iscritto dal : 7/23/2005
Posts: 0
Grazie 1000, Andrea,
funziona perfettamente.
Ora però a me servirebbe che mi rintracciasse i dati dei numeri posti
non su una sola, ma su 6 colonne (ad esempio A-B-C-D-E-F ).
Ti chiedo sinceramente scusa di essre stato poco attento e non averlo evidenziato prima: ma si può fare?
Ed in tal caso quali modifiche apportare?
Grazie ancora se vorrai rispondere, s'intende quando ne avrai modo e tempo.
Ciao
Armando
tredate
Inviato: Monday, July 25, 2005 10:11:48 PM
Rank: Member

Iscritto dal : 7/23/2005
Posts: 0
Grazie 1000, Andrea,
funziona perfettamente.
Ora però a me servirebbe che mi rintracciasse i dati dei numeri posti
non su una sola, ma su 6 colonne (ad esempio A-B-C-D-E-F ).
Ti chiedo sinceramente scusa per essere stato io poco attento e non averlo evidenziato prima: ma si può fare?
Ed in tal caso quali modifiche apportare?
Grazie ancora se vorrai rispondere, s'intende quando ne avrai modo e tempo.
Ciao
Armando
a10n11
Inviato: Monday, July 25, 2005 10:54:56 PM

Rank: AiutAmico

Iscritto dal : 5/29/2003
Posts: 1,694
prova con questa modifica:

Sub moda()
Application.ScreenUpdating = False
Sheets("foglio1").Select
Set miorange = Range(Cells(1, 1), Cells(1, 6).End(xlDown))
miorange.Select
Selection.Copy
Sheets("foglio2").Select
Range("a1").Select
ActiveSheet.Paste
Application.CutCopyMode = False
Set miorage = Nothing

Set area = Range(Cells(1, 1), Cells(1, 6).End(xlDown))
area.Select
r1 = Application.Mode(area)
For Each cl In area
If cl = r1 Then
cl.Select
ActiveCell = ""
End If
Next

r2 = Application.Mode(area)
For Each cl In area
If cl = r2 Then
cl.Select
ActiveCell = ""
End If
Next

r3 = Application.Mode(area)
For Each cl In area
If cl = r3 Then
cl.Select
ActiveCell = ""
End If
Next

r4 = Application.Mode(area)
For Each cl In area
If cl = r4 Then
cl.Select
ActiveCell = ""
End If
Next

r5 = Application.Mode(area)
For Each cl In area
If cl = r5 Then
cl.Select
ActiveCell = ""
End If
Next

r6 = Application.Mode(area)

Set area = Nothing
Cells.Select
Selection.ClearContents
Range("a1").Select
Sheets("foglio1").Select
Range("g1") = r1
Range("h1") = "1° in frequenza"
Range("g2") = r2
Range("h2") = "2° in frequenza"
Range("g3") = r3
Range("h3") = "3° in frequenza"
Range("g4") = r4
Range("h4") = "4° in frequenza"
Range("g5") = r5
Range("h5") = "5° in frequenza"
Range("g6") = r6
Range("h6") = "6° in frequenza"
Range("a1").Select
Application.ScreenUpdating = True
End Sub

E' inutile ricordare che tutti questi cicli for appesantiscono l'elaborazioone.
saluti
Andrea

Edited by - a10n11 on 07/25/2005 23:46:04

tredate
Inviato: Tuesday, July 26, 2005 12:25:40 AM
Rank: Member

Iscritto dal : 7/23/2005
Posts: 0
<font face='Trebuchet MS'></font id='Trebuchet MS'><font face='Script MT Bold'></font id='Script MT Bold'><font face='Stencil'></font id='Stencil'><font face='Verdana'></font id='Verdana'><font face='Lucida Console'></font id='Lucida Console'><font face='Verdana'></font id='Verdana'><font face='Stencil'></font id='Stencil'><font face='Script MT Bold'></font id='Script MT Bold'><font face='Trebuchet MS'></font id='Trebuchet MS'><font face='Times New Roman'></font id='Times New Roman'><font face='Tahoma'></font id='Tahoma'>
Ottimo, Andrea.
Grazie di cuore, sei eccezionale: come bravura e disponibiità immediata.

A risentirci; tanto lo so che avrò ancora bisogno delle tue doti.

Armando
Valetudo1
Inviato: Tuesday, August 23, 2005 3:57:41 PM
Rank: Member

Iscritto dal : 7/17/2005
Posts: 0
Ciao
ho letto il tuo messaggio e poichè ho la stessa necessità ho provato ad effettuare la stessa operazione su un file excel ma senza riuscirci. Potresti dirmi dove si devono copiare i dati in vba
grazie
Valetudo
a10n11
Inviato: Wednesday, August 24, 2005 11:11:38 AM

Rank: AiutAmico

Iscritto dal : 5/29/2003
Posts: 1,694
Con il foglio di excel aperto Alt+F11 ti apre la finestra di gestione del VBA
Menu>inserisci scegli "modulo" nella finestra che si apre copiaci la routine.
di nuovo Alt+F11 torni al foglio Excel.
Per lanciare la macro Menu Stfrumenti>Macro>Macro , seleziona il nome della macro dall'elenco e clicca su esegui.
Per automatizzare l'esecuzione della macro puoi assegnarla ad un pulsante posto sul foglio.
Saluti
Andrea

Valetudo1
Inviato: Tuesday, August 30, 2005 8:18:43 AM
Rank: Member

Iscritto dal : 7/17/2005
Posts: 0
ciao Andrea
ho eseguito tutto alla lettera ma continua a darmi un errore: run time 13
if cl = r1 then
In effetti sul foglio 2 mi copia i dati ma non fa una selezione solo dei più frequenti, copia tutti così come sono riportati nel foglio 1 e poi restituisce l'errore
ciao e grazie
a10n11
Inviato: Tuesday, August 30, 2005 11:01:43 AM

Rank: AiutAmico

Iscritto dal : 5/29/2003
Posts: 1,694
ciao.
La macro per come è stata scritta, copia pari pari i valori del foglio1 e li appoggia nel foglio2 per consentire il calcolo della funzione moda. Ad ogni calcolo della funzione, cancella i valori elaborati.
L'errore 13 che ti compare molto probabilmente è dovuta al fatto che nel tuo range non esistono valori ripetuti. Se la funzione moda non trova valori che si ripetono almeno una volta restituisce un errore. Siccome la macro lancia la funzione per ben sei volte è facile che possa scaturire un errore di questo tipo. Per questo ho apportato una modifica al codice che gestisca questo tipo di errore. questa è la modifica:

R1 = Application.Mode(area)
If IsError(R1) Then
R1 = "NULLO"
For Each cl In area
If cl = R1 Then
cl.Select
ActiveCell = ""
End If
Next
End If

da copiare o modificare tutti e sei i passaggi della funzione moda.
saluti
Andrea

Valetudo1
Inviato: Wednesday, August 31, 2005 9:53:16 AM
Rank: Member

Iscritto dal : 7/17/2005
Posts: 0
Ok funziona tutto, non avevo compreso il fatto che occorreva comunque creare la funzione moda sul secondo foglio, pensavo che la macro la eseguisse in automatico
grazie mille
Utenti presenti in questo topic
Guest


Salta al Forum
Aggiunta nuovi Topic disabilitata in questo forum.
Risposte disabilitate in questo forum.
Eliminazione tuoi Post disabilitata in questo forum.
Modifica dei tuoi post disabilitata in questo forum.
Creazione Sondaggi disabilitata in questo forum.
Voto ai sondaggi disabilitato in questo forum.

Main Forum RSS : RSS

Aiutamici Theme
Powered by Yet Another Forum.net versione 1.9.1.8 (NET v2.0) - 3/29/2008
Copyright © 2003-2008 Yet Another Forum.net. All rights reserved.