aiuto macro excel
Hai un problema con Excel? 
aiuto macro excel
di zlafe (utente non iscritto) data: 11/10/2012 16:21:52
Ciao ragazzi!! Ho bisogno di aiuto..
Devo costruire un foglio excel per fare le seguenti operazioni.
1. Chiede in input un valore di riferimento, e l'inserimento di altri valori (in numero maggiore di 10) in una colonna di una tabella (colonna 1). --> OK
2. Calcola la percentuale del valore inserito rispetto al valore di riferimento, ed inserisce il valore nella colonna a fianco (colonna 2), quindi percentuale in corrispondenza del valore. --> OK
3. Ordine le colonne in ordine crescente in funzione della percentuale. --> OK
4. Calcola la media delle percentuali, e due valori range maggiorati/minorati di una certa percentuale rispetto alla media (diciamo il 20% in più e in meno, ma questo è indifferente). --> OK
5. Riporta nella colonna successiva (colonna 3) solamente i valori percentuali compresi nel range indicato. --> 1° PROBLEMA
6. Calcola il 50° percentile (mediana) dei valori rimasti. Quindi se sono in numero dispari sarà il valore centrale, mentre se sono in numero pari sarà la media tra i due valori centrali. --> 2° PROBLEMA (come distinguere i due casi, dispari e pari)
Qualcuno riesce a darmi una mano?
Forse può essere utile un esempio per chiarire meglio la procedura.
Esempio:
1. Forniamo come valore di riferimento 500, e inseriamo poi nella prima colonna i valori 350, 400, 450, 430, 270, 290, 310, 340, 330, 370, 300.
2. Vengono calcolate le rispettive percentuali, ovvero 70%, 80%, 90%, 86%, 54%, 58%, 62%, 68%, 66%, 74%, 60%.
3. Vengono ordinate le prime due colonne in ordine crescente di percentuale, quindi 54%, 58%, 60%, 62%, e così via..
4. Calcola la media delle percentuali, ovvero 69,82% e i due valori ottenuti sommando e sottraendo il 20%, quindi rispettivamente 83,784% e 55,856%.
5. Taglia i valori percentuali esterni a questo range e riporta nella colonna successiva solamente i valori desiderati, ovvero in questo caso 58%, 60%, 62%, ... , 74%, 80%.
6. Restano 8 valori percentuali, e per calcolare il 50° percentile viene considerata la media tra i due valori centrali, ovvero la media tra 66% e 68%, ovvero 67%.
Questo ovviamente è un esempio banale, ma è questa la serie di funzioni che vorrei poter eseguire!
P.S. l'ho postato anche prima ma invece che come nuova discussione è finito in risposta ad un messaggio che non avevo neache mai letto!! Boh?!?
di HarryBosch data: 11/10/2012 17:49:56
Ciao zlafe
in effetti la tua richiesta era finita sotto la discussione aperta di un altro utente.
Hai fatto bene a riaprire un nuovo thread.
Prima di analizzare la tua richiesta passo per passo, sarebbe interessante sapere se hai tentato qualcosa, ed eventualmente postare il tuo codice.
Probabilmente capiresti meglio le modifiche corrette dal tuo tentativo, che non una sub nuova di zecca; poi magari lo ottimizziamo.
Oppure alleghi direttamente il file se hai fatto un tentativo.
E se ci dici anche la versione di Excel che usi, meglio...
di Vecchio Frac data: 11/10/2012 18:27:06
Giusto quello che dice Vanni.
Come promemoria aggiungo, riguardo al punto 6, che esiste già la funzione di Excel "=MEDIANA" che risolverà in modo semplice il tuo problema ^_^
di zlafe (utente non iscritto) data: 12/10/2012 09:28:13
Grazie! Mi ero dimenticato della funzione MEDIANA e cercavo di implementarla in qualche modo..
Riguardo al punto 5 non sò proprio come fare. Fin lì ovviamente tutto ok.. ma poi non ho idea di come proseguire!
Le mie conoscenze sono abbastanza deboli e sono da autodidatta (ho iniziato da pochissimo.. l'unico linguaggio di programmazione che conosco è il C).
Se riusciste a darmi una mano vi sarei grato!
La mia versione di Excel è la 2007 SP2
di zlafe (utente non iscritto) data: 12/10/2012 10:17:20
Alla fine ho risolto con una funzione utilizzando alcune condizioni SE senza utilizzare macro e codice VBA visto che non ero in grado!
di Vecchio Frac data: 12/10/2012 11:41:39
Ottima soluzione e se vuoi un consiglio personale lascia perdere C e annessi... vai su Python, a meno che non sia per scuola ^_^
di HarryBosch data: 12/10/2012 15:59:16
Ho preparato un piccolo esempio in VBA di quello che chiedevi, quindi senza l'utilizzo delle formule sul foglio.
@ zlafe
Ho inserito anche un commento ad ognuno dei 6 punti che avevi elencato, in modo da renderti più chiaro il funzionamento della sub.
Trovi l'allegato qua in alto a destra.
di Vecchio Frac data: 12/10/2012 16:35:27
@Vanni
bravo! semplice e pulito. Ottimo lavoro.
Mi dà soddisfazione vedere che hai applicato il metodo di Evaluate, sia qui:
'conto i valori inseriti nella colonna A
numeri = [COUNTA(A:A)] - 1
che qui:
'4.calcolo la media e i range in base alla % minore e maggiore
M = "=AVERAGE(B:B)"
[E1].Value = Evaluate(M)
ma, in questo caso (e nel caso della mediana) è buffo che non hai spinto il meccanismo dell'eval implicito che è identico a [COUNTA()]:
'4.calcolo la media e i range in base alla % minore e maggiore
[E1] = [AVERAGE(B:B)]
semplice e immediato ^_^
di HarryBosch data: 12/10/2012 17:16:35
@VecchioFrac
Verissimo! Lo sai che sono strano... prima ottimizzo e poi riestendo :)
E il "trucchetto" del Counta lo uso sempre da quando me lo avevi mostrato: molto più rapido dei vari "while.. end.. down - up.."
Vuoi Approfondire?