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

Autofilter con più di un criterio

996 views
Skip to first unread message

Mass8

unread,
Mar 27, 2009, 5:27:58 AM3/27/09
to
Ciao a tutti, sto cercando tramite VBA di far filtrare in modo
automatico un foglio excel basandomi su dei valori contenuti in un
altro foglio excel
Ho fatto così
Private Sub CommandButton1_Click()
Dim filtro As String
Dim riga As Integer
filtro = ""
riga = 2
Do While Range("E" & riga).Value <> ""
If filtro = "" Then
filtro = "Criteria" & riga - 1 & ":=""=" & Range("E" & riga).Value
& ""
Else
filtro = ", Operator:=xlOr, Criteria" & riga - 1 & ":=""=" & Range
("E" & riga).Value & ""
End If
riga = riga + 1
Loop
workSheets("Foglio3").Range("I1").AutoFilter Field:=9, _
filtro
End Sub

Ma mi da errore sul worksheets (gia nell'editor), non mi accetta la
mia stringa di criteri.
Come si può fare?
Grazie

Scossa

unread,
Mar 27, 2009, 2:08:51 PM3/27/09
to
In article <43bcd844-a7c9-4aa9-b3a4-
10f217...@c36g2000yqn.googlegroups.com>, Massimil...@gmail.com
says...

> Do While Range("E" & riga).Value <> ""
> If filtro = "" Then
> filtro = "Criteria" & riga - 1 & ":=""=" & Range("E" & riga).Value
> & ""
>

Considerando che le condizioni di un autofilter sono al massimo 2 io
riscriverei il tutto così:

'=======================
Option Explicit

Private Sub CommandButton1_Click()
Dim filtro1 As String
Dim filtro2 As String
Dim Rng As Range
Dim ws As Worksheet
Dim wb As Workbook

Set wb = ThisWorkbook
Set ws = wb.Worksheets("Foglio3")
Set Rng = wb.Worksheets("Foglio1").Range("E2:E3")

With Rng.Cells(1, 1)
filtro1 = .Value
End With

With Rng.Cells(2, 1)
filtro2 = .Value
End With

With ws.Range("I1")
If filtro1 <> "" Then
If filtro2 <> "" Then
.AutoFilter Field:=9, Criteria1:=filtro1, _
Operator:=xlOr, Criteria2:=filtro2
Else
.AutoFilter Field:=9, Criteria1:=filtro1
End If
Else
.AutoFilter Field:=9
End If
End With

Set Rng = Nothing
Set ws = Nothing
set wb = Nothing

End Sub

'=================

Fai sapere se e come hai risolto, grazie


--

Bye!

Scossa

Mass8

unread,
Mar 30, 2009, 4:18:50 AM3/30/09
to
On 27 Mar, 20:08, Scossa <inva...@gmai.com> wrote:
> In article <43bcd844-a7c9-4aa9-b3a4-
> 10f2177d9...@c36g2000yqn.googlegroups.com>, Massimiliano.N...@gmail.com

ci provo, grazie

Mass8

unread,
Mar 30, 2009, 4:33:53 AM3/30/09
to
On 27 Mar, 20:08, Scossa <inva...@gmai.com> wrote:
> In article <43bcd844-a7c9-4aa9-b3a4-
> 10f2177d9...@c36g2000yqn.googlegroups.com>, Massimiliano.N...@gmail.com

Provato. Funziona solo per 2 criteri, io ne potrei avere di più,
soprattutto non su righe vicine, ma deve "cercare" i valori in tutta
la colonna

scos...@gmail.com

unread,
Mar 30, 2009, 7:31:35 AM3/30/09
to
On 30 Mar, 10:33, Mass8 <Massimiliano.N...@gmail.com> wrote:
> Funziona solo per 2 criteri, io ne potrei avere di più,
> soprattutto non su righe vicine, ma deve "cercare" i valori in tutta
> la colonna


Non vedo come potresti inserire più di due criteri, visto che sono il
massimo permesso da Autofilter:

=============== DALL'HELP ==========================
Metodo AutoFilter:
espressione.AutoFilter(Field, Criteria1, Operator, Criteria2,
VisibleDropDown)
.... omissis ....
=====================================================

Per usare più condizioni devi passare al filtro avanzato ... fai una
ricerca in questo NG
(chiave: Filtro avanzato con macro )

Fai sapere se risolvi, grazie
__
Bye!

Scossa

Mass8

unread,
Mar 30, 2009, 10:22:42 AM3/30/09
to

Alla fine vorrei ottenere una cosa così
ActiveSheet.ShowAllData
range("I1").Select
Selection.AutoFilter
ActiveSheet.ListObjects("Tabella_OFFIC_2009").range.AutoFilter
Field:=9, _
Criteria1:=Array("st156", "st190", "st200", "st217", "st253",
"st257", "st388", _
"st401"), Operator:=xlFilterValues
dove i vari "st" li leggo dalla colonna del foglio 1
Non so come creare un array

Mauro Gamberini

unread,
Mar 30, 2009, 10:47:03 AM3/30/09
to
Alla fine vorrei ottenere una cosa cosě

ActiveSheet.ShowAllData
range("I1").Select
Selection.AutoFilter
ActiveSheet.ListObjects("Tabella_OFFIC_2009").range.AutoFilter
Field:=9, _
Criteria1:=Array("st156", "st190", "st200", "st217", "st253",
"st257", "st388", _
"st401"), Operator:=xlFilterValues
dove i vari "st" li leggo dalla colonna del foglio 1
Non so come creare un array
********************************************

Se(se) ho capito.

Dalla guida:

<giuda>
Criteria1 Argomento facoltativo di tipo Variant.
Il criterio (una stringa, ad esempio "101").
Utilizzare "=" per trovare i campi vuoti
oppure "<>" per trovare i campi non vuoti.
Se viene omesso, il criterio č All.
Se Operator č xlTop10Items,
Criteria1 specifica il numero di voci (ad esempio, "10").
</guida>

Non vedo si parli di Array.

--
---------------------------
Mauro Gamberini
http://www.riolab.org/
http://blog.maurogsc.eu/


Mass8

unread,
Mar 30, 2009, 11:35:56 AM3/30/09
to
On 30 Mar, 16:47, "Mauro Gamberini"
<maurogscRIMUOV...@RIMUOVEREaliceposta.it> wrote:
> Alla fine vorrei ottenere una cosa così

>     ActiveSheet.ShowAllData
>     range("I1").Select
>     Selection.AutoFilter
>     ActiveSheet.ListObjects("Tabella_OFFIC_2009").range.AutoFilter
> Field:=9, _
>         Criteria1:=Array("st156", "st190", "st200", "st217", "st253",
> "st257", "st388", _
>         "st401"), Operator:=xlFilterValues
> dove i vari "st" li leggo dalla colonna del foglio 1
> Non so come creare un array
> ********************************************
>
> Se(se) ho capito.
>
> Dalla guida:
>
> <giuda>
> Criteria1   Argomento facoltativo di tipo Variant.
> Il criterio (una stringa, ad esempio "101").
> Utilizzare "=" per trovare i campi vuoti
> oppure "<>" per trovare i campi non vuoti.
> Se viene omesso, il criterio è All.
> Se Operator è xlTop10Items,

> Criteria1 specifica il numero di voci (ad esempio, "10").
> </guida>
>
> Non vedo si parli di Array.
>
> --
> ---------------------------
> Mauro Gamberinihttp://www.riolab.org/http://blog.maurogsc.eu/

Beh io il codice che ho postato ho fatto un registra macro andando a
selezionare dal filtro nel menù a tendina vari valori e lui l'ha
tradotto come sopra
Se io riuscissi ad avere un Array e poterci scrivere dentro i valori
poi lo passerei a criteria1

Mauro Gamberini

unread,
Mar 30, 2009, 11:53:18 AM3/30/09
to
Se io riuscissi ad avere un Array e poterci scrivere dentro i valori
poi lo passerei a criteria1
**********************************************

Non capisco cosa vuoi fare.

Per ciň che riguarda gli Array.
Scrivi Array in un modulo e premi
il tasto F1.

Scossa

unread,
Mar 30, 2009, 3:24:29 PM3/30/09
to
In article <580bb937-ccd0-4461-914a-b6f027146728
@v38g2000yqb.googlegroups.com>, Massimil...@gmail.com says...

> Beh io il codice che ho postato ho fatto un registra macro andando a
> selezionare dal filtro nel menù a tendina vari valori e lui l'ha
> tradotto come sopra
> Se io riuscissi ad avere un Array e poterci scrivere dentro i valori
> poi lo passerei a criteria1
>

in foglio1 celle A2:A.. i tuoi dati
In foglio3 celle E2:E.... i valori da filtrare (p.e.: 15 30 e 40)

'===============0
Sub test()

Dim rngflt As Range
Dim cella As Range
Dim aFlT() As String
Dim j As Long

Set rngflt = ActiveWorkbook.Worksheets("Foglio3").Range("E2:E4")
For Each cella In rngflt
j = j + 1
ReDim Preserve aFlT(1 To j)
aFlT(j) = Format(cella.Value, "@")
Next
Worksheets("Foglio1").Range("$A$1:$A$7").AutoFilter Field:=1, _
Criteria1:=aFlT, Operator:=xlFilterValues

Set rngflt = nothing

End Sub
'=================

Fai sapere se hai risolto, grazie.

--

Bye!

Scossa

Mass8

unread,
Mar 31, 2009, 2:48:22 AM3/31/09
to
On 30 Mar, 21:24, Scossa <inva...@gmai.com> wrote:
> In article <580bb937-ccd0-4461-914a-b6f027146728
> @v38g2000yqb.googlegroups.com>, Massimiliano.N...@gmail.com says...

Risolto così
Private Sub filtro()
Dim riga, j As Integer
Dim filtro() As String


Dim ws As Worksheet
Dim wb As Workbook

Set wb = ThisWorkbook
Set ws = wb.Worksheets("Foglio3")

riga = 2
j = 1
Do While ActiveSheet.range("E" & riga).Value <> ""
ReDim Preserve filtro(1 To j)
filtro(j) = Format(Left(ActiveSheet.range("E" & riga).Value, 5),
"@")


riga = riga + 1

j = j + 1

Loop

ws.range("A1").AutoFilter Field:=9, _
Criteria1:=filtro, Operator:=xlFilterValues

End Sub
Adesso devo provarlo su un Excel 2003, ma non dovrebbero esserci
problemi

Mass8

unread,
Mar 31, 2009, 5:55:05 AM3/31/09
to

E invece si ci sono i problemi: questa operazione non è valida
Operator:=xlFilterValues in quanto il filtro del 2003 accetta solo un
valore di scelta, mentre il 2007 ne accetta più di uno segnandoli con
il checkbox

Mauro Gamberini

unread,
Mar 31, 2009, 6:10:22 AM3/31/09
to
E invece si ci sono i problemi: questa operazione non č valida

Operator:=xlFilterValues in quanto il filtro del 2003 accetta solo un
valore di scelta, mentre il 2007 ne accetta piů di uno segnandoli con
il checkbox
**************************************************

Che, in mancanza di tue indicazioni
sulla versione di Excel utilizzata,
era quanto ti avevo postato.

Mass8

unread,
Mar 31, 2009, 8:28:33 AM3/31/09
to
On 31 Mar, 12:10, "Mauro Gamberini"
<maurogscRIMUOV...@RIMUOVEREaliceposta.it> wrote:
> E invece si ci sono i problemi: questa operazione non è valida

> Operator:=xlFilterValues in quanto il filtro del 2003 accetta solo un
> valore di scelta, mentre il 2007 ne accetta più di uno segnandoli con

> il checkbox
> **************************************************
>
> Che, in mancanza di tue indicazioni
> sulla versione di Excel utilizzata,
> era quanto ti avevo postato.
>
> --
> ---------------------------
> Mauro Gamberinihttp://www.riolab.org/http://blog.maurogsc.eu/

Io ho il 2007, ma speravo fosse retroattivo fino almeno al 2003.
Quindi alla fine non è fattibile una cosa del genere con il filtro del
2003?

Mauro Gamberini

unread,
Mar 31, 2009, 10:07:32 AM3/31/09
to
Io ho il 2007, ma speravo fosse retroattivo fino almeno al 2003.
Quindi alla fine non è fattibile una cosa del genere con il filtro del
2003?
************************************************

E' una funzionalità introdotta con il 2007.

Mass8

unread,
Mar 31, 2009, 11:38:00 AM3/31/09
to
On 31 Mar, 16:07, "Mauro Gamberini"

Ho notato: leggevo in giro di un advacedfilter, ho provato a farlo con
i criteri, ma non funziona. Domani ci proverò per l'ennesima volta

0 new messages