Pagina precedente | 1 | Pagina successiva
Vota | Stampa | Notifica email    
Autore

Calcolo della Mediana automatizzato

Ultimo Aggiornamento: 11/04/2017 09:25
Post: 336
Registrato il: 29/09/2003
Città: ACCIANO
Età: 26
Utente Senior
2003/2007
OFFLINE
04/04/2017 16:01

Salve a tutti,
ho la necessità del vostro aiuto
devo rendere automatizzato il calcolo della mediana usando VBA

In allegato il file su cui devo lavorare, considerate che è uno di tanti quindi tramite un solo pulsante da VBA dovrei calcolare la mediana su questo foglio

il calcolo della mediana dovra essere effettuato sulla differenza di data Colonna D ma per ogni codice univoco della colonna B

credo quindi che i passaggi siano.
1) filtrare in base al codice
2) calcolare la mediana dei valori nella colonna D
3) riportare codice e risultato mediana su un secondo foglio
4) ripetere le azioni per il secondo codice filtrato et...

Grazie per qualsiasi consiglio
Excel 2007 - 2010
Post: 3.821
Registrato il: 13/03/2012
Città: LIVORNO
Età: 78
Utente Master
2010
OFFLINE
06/04/2017 08:56

il tuo messaggio suona come una assegnazione di lavoro, il forum non è un luogo dove assegnare compiti gratis, ma un luogo dove chiedere VERAMENTE consigli.
Inoltre perché dovremmo sapere cosa è una mediana ?
[Modificato da patel45 06/04/2017 08:57]

----------
Win 10 - Excel 2010
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
Post: 336
Registrato il: 29/09/2003
Città: ACCIANO
Età: 26
Utente Senior
2003/2007
OFFLINE
06/04/2017 15:14

La mediana è il valore che occupa il valore centrale
ad esempio nel file che ho allecato se filtro in base al codice 45,13

ottengo nella idfferenza delle date i seguenti valori
7
7
13
13
15

la mediana corrisponde a 13
tutto questo pero lo devo rendere automatizzato con un pulsante su VBA, con la registrazione delle macro ottengo il seguente codice

Rows("1:1").Select
Selection.AutoFilter
Selection.AutoFilter Field:=2, Criteria1:="45.13"
Range("E1860").Select
ActiveCell.FormulaR1C1 = "=MEDIAN(RC[-1]:R[12437]C[-1])"

ma non conoscendo la sintassi VBA non so come modificare o adattare
ad esmepio:

1) il criterio del filtro deve essere modificato per ogni valore univoco
2) ho notato che la funzione mediana sui valori filtrati non funziona

Ringrazio anticipatamente per qualsiasi aiuto che possiate darmi
Excel 2007 - 2010
Post: 0
Registrato il: 06/04/2017
Città: MILANO
Età: 70
Utente Junior
OFFLINE
06/04/2017 15:28

Re:
[POSTQUOTE][QUOTE:134353927=patel45, 06/04/2017 08.56]il tuo messaggio suona come una assegnazione di lavoro, il forum non è un luogo dove assegnare compiti gratis, ma un luogo dove chiedere VERAMENTE consigli.
Inoltre perché dovremmo sapere cosa è una mediana ?[/QUOTE][/POSTQUOTE]


concordo, sembra un "chi me lo fa gratis"!

d
Post: 337
Registrato il: 29/09/2003
Città: ACCIANO
Età: 26
Utente Senior
2003/2007
OFFLINE
08/04/2017 06:12

In allegato sono riuscito tramite pulsante a crearmi su altro foglio
i dati univoci dei codici

adesso dovrei filtrare per ogni codice univoco

Rows("1:1").Select
Selection.AutoFilter
Selection.AutoFilter Field:=2, Criteria1:="45.13"
Range("E1860").Select
ActiveCell.FormulaR1C1 = "=MEDIAN(RC[-1]:R[12437]C[-1])"

quindi penso che a criteria 1:= dovrei inserire il riferimento
ai cdici univoci ma non so come farlo per ognuno

Grazie
Excel 2007 - 2010
Post: 1.166
Registrato il: 06/04/2013
Utente Veteran
2010
OFFLINE
08/04/2017 08:59

Ciao
ma la mediana deve essere riportata sul foglio1 o sull'altro foglio?

Nel frattempo, correggi la tua macro così:
Private Sub CommandButton1_Click()
Dim UR As Long
UR = Range("B" & Rows.Count).End(xlUp).Row
Range("B1:B" & UR).AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Sheets("Foglio1").Range("A1"), Unique:=True
Sheets("Foglio1").Select
Unload Me
End Sub

Ti ricordo che il filtro univoco vuole una intestazione di colonna, pertanto nel tuo caso partivi da B2 ed excel considerava B2 (45.25) sia come intestazione che come valore, ecco perché eri costretto ad eliminare la riga 2 nel foglio1.

Ciò premesso, ti suggerisco un modo per poter procedere:
- pulizia dei risultati precedenti della colonna MEDIANA e del foglio1

- assegni ad una variabile dichiarata range il range della col. D:
Set rng = Range("D2:D" & UR)

- dopo aver riportato i valori univoci (macro precedente), ti fai un loop (For...Next) del foglio1 assegnando ad una variabile (pe: mCod) il valore del codice da filtrare

- applichi tale filtro all'altro foglio:
........AutoFilter Field:=2, Criteria1:=mCod

- poi calcoli la media delle solo righe visibili:
mMed = Application.WorksheetFunction.Median(rng.SpecialCells(xlCellTypeVisible))
dove rng è il range valorizzato prima

- per ogni cella di tale range, riporti il valore della mediana:
For Each Cel In Range("A2:A" & UR)
If Range(Cel.Address).EntireRow.RowHeight > 0 Then
Cells(Cel.Row, 5) = mMed

Ovviamente devi prestare attenzione a quale foglio è attivo al momento di ciascuna istruzione. Al riguardo ti suggerisco di assegnare a due variabili dichiarate Worksheet il nome dei due fogli e regolarti di conseguenza, in modo tale da evitare inutili Select dei due fogli.

saluti
[Modificato da dodo47 09/04/2017 19:35]
Domenico
Win 10 - Excel 2016
Post: 338
Registrato il: 29/09/2003
Città: ACCIANO
Età: 26
Utente Senior
2003/2007
OFFLINE
10/04/2017 06:21

Grazie dei suggerimenti proverò a metterli in atto


Per la mediana devo mettere anche in ordine crescente
il risutlato del filtro sul folgio 1, dove agisco ?
[Modificato da krashone 10/04/2017 06:37]
Excel 2007 - 2010
Post: 1.170
Registrato il: 06/04/2013
Utente Veteran
2010
OFFLINE
10/04/2017 09:55

Ciao
non è necessario, il "filtro" mostra solo i valori voluti

saluti

EDIT: forse non ho capito la tua richiesta. I valori (come già chiesto) in quale foglio vanno? perché se vanno nel foglio1 a che serve la colonna MEDIANA nel foglio Istituzionale...?

Comunque sia, dopo il calcolo ordina secondo quanto vuoi ottenere.

[Modificato da dodo47 10/04/2017 11:15]
Domenico
Win 10 - Excel 2016
Post: 339
Registrato il: 29/09/2003
Città: ACCIANO
Età: 26
Utente Senior
2003/2007
OFFLINE
10/04/2017 17:25

La mediana è un valore unico e va sul secondo foglio affianco al codice usato per filtrare quindi B2, etc...

la questione è che la mediana si fa su di un'elenco crescente di dati
inoltre ho notato che sui dati cosi filtrati la funzione mediana non funziona se si prova sul mio file di esempio filtrando con il primo codice 45.25 il risutlato è 4 invece dovrebbe essere 7

infatti se copio i dati filtrati e faccio incolla pseciale come valore
e poi faccio la mediana su di questi il risultato si ottiene

come risolvo ?!

Grazie
Excel 2007 - 2010
Post: 1.173
Registrato il: 06/04/2013
Utente Veteran
2010
OFFLINE
10/04/2017 18:09

Ciao
se la fai sul filtro applicato con la formula che non può capire se una riga è nascosta o meno, è chiaro che ti restituisce un valore errato.

A parte questo, al codice: 45.25 corrispondono i seguenti valori (salvo mio errore):
201
145
3
3
206
34
94
3
7
5
5
2
10
3
1
27
la cui mediana è 6 e non 7.
E 6 è il risultato che io ottengo.(vedi anche dettaglio in foglio1 col J.

Nella uForm ho aggiunto una casella con il codice in elaborazione in quanto la stessa è un po' lunghetta.

saluti
Domenico
Win 10 - Excel 2016
Post: 340
Registrato il: 29/09/2003
Città: ACCIANO
Età: 26
Utente Senior
2003/2007
OFFLINE
11/04/2017 06:12

si hai ragione è 6 mi ero sbagliato io scriverelo sul post

ma la mediana lo hai fatti sui questi valori anche se non sono in ordine crescente ?

ok esamino il file

GRAZIE

[Modificato da krashone 11/04/2017 06:16]
Excel 2007 - 2010
Post: 1.174
Registrato il: 06/04/2013
Utente Veteran
2010
OFFLINE
11/04/2017 09:25

Re:
krashone, 11/04/2017 06.12:

ma la mediana lo hai fatti sui questi valori anche se non sono in ordine crescente ?



Ciao, si. Già ti avevo detto che non è necessario l'ordinamento


saluti



Domenico
Win 10 - Excel 2016
Vota:
Amministra Discussione: | Chiudi | Sposta | Cancella | Modifica | Notifica email Pagina precedente | 1 | Pagina successiva
Nuova Discussione
 | 
Rispondi
Cerca nel forum
Tag discussione
Discussioni Simili   [vedi tutte]
calcolo combinatorio senza ripetizioni (1 messaggio, agg.: 05/02/2020 11:08)
Feed | Forum | Bacheca | Album | Utenti | Cerca | Login | Registrati | Amministra
Tutti gli orari sono GMT+01:00. Adesso sono le 15:56. Versione: Stampabile | Mobile | Regolamento | Privacy
FreeForumZone [v.6.1] - Copyright © 2000-2024 FFZ srl - www.freeforumzone.com