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