|
|
Ciao a tutti,
di seguito vi espongo i miei due quesiti:
1. come da oggetto, vorrei sapere se esiste una formula, o combinazione di esse, che mi permetta di visualizzare in una determinata cella (E2), il primo valore visualizzato nella colonna filtrata B (in particolare il range B4:xldown); possibilmente evitando macro
2. con la stessa ipotesi di prima, in una cella, mi piacerebbe visualizzare tutti i parametri (attivi) utilizzati per la colonna filtrata; ad esempio, ho una colonna con 5 volori: "A", "B", "C", "D", "E". Filtro questa colonna per "B" e "D". Nella cella E2 vorrei visualizzare in sequenza i filtri da me adottati in questo caso; eventualmente va bene anche una macro in questo caso.
Ringrazio in anticipo a chiunque mi risponda.
Ciao.
PS E' evidente che il secondo quesito include il primo, però io mi auguro che al primo quesito si possa giungere ad una formula senza macro.
1 - No
2 - Solo ricorrendo a macro
Grande! Funziona benissimo. Ho solo 2 cose da chiederti
Ma è possibile separare i vari filtri nelle relative colonne? Ad esempio tabella A1:E100, sarebbe bello poter visualizzare i filtri attivi in A105, B105, C105, D105 e E105 (dove non c'è filtro "")
Ovviamente mi interesserebbe anche limitare il campo della tabella? (se riconosce dunque solo il campo della tabella.
Ecco un esempio in cui ho filtrato solo per colonna A e colonna C:
Dato1 Dato2 Dato3 Dato4 a5 b15 c29 d37 a3 b11 c25 d34 a10 b11 c25 d35 a5 b17 c26 d35 a3 b15 c22 d33
Filtri ColA Filtri ColB Filtri ColC Filtri ColD a10,
a3,
a5,
a6c22,
c25,
c26,
c29
Grazie e scuami la pignoleria
Restando nel mio esempio, prova a sostituire il codice con questo:
Public Sub m()
Dim sh As Worksheet
Dim rng As Range
Dim rCol As Range
Dim c As Range
Dim lURiga As Long
Dim col As Collection
Dim v As Variant
Dim s As String
Dim lCol As Long
Dim lriga As Long
Dim sCriteria As String
Dim lCont As Long
Dim lRifRiga As Long
Set sh = ThisWorkbook.Worksheets("Foglio1")
lCont = 101
With sh
If .AutoFilterMode Then
Set rng = .AutoFilter.Range
lURiga = rng.SpecialCells(xlCellTypeLastCell).Row
For lCol = 1 To rng.Columns.Count
lRifRiga = .Cells(.Rows.Count, lCol).End(xlDown).Row
.Range(Cells(101, lCol), Cells(lRifRiga, lCol)).Clear
Next
If rng.Rows.Count > rng.SpecialCells(xlCellTypeVisible).Rows.Count Then
On Error Resume Next
For lCol = 1 To rng.Columns.Count
sCriteria = .AutoFilter.Filters(lCol).Criteria1
If Err.Number = 1004 Then
Err.Number = 0
Else
Set rCol = Range(rng(1, lCol), rng(lURiga, lCol)).SpecialCells(xlCellTypeVisible)
Set col = New Collection
For Each c In rCol
col.Add CStr(c.Value), CStr(c.Value)
Next
For Each v In col
's = s & v & ","
.Cells(lCont, lCol).Value = v
lCont = lCont + 1
Next
Set col = Nothing
lCont = 101
End If
Next
'.Range("F1").Value = Left(s, Len(s) - 1)
Else
'.Range("F1").Value = "Nessun criterio"
End If
End If
End With
Set c = Nothing
Set rCol = Nothing
Set col = Nothing
Set rng = Nothing
Set sh = Nothing
End Sub
NOTA. Metto i criteri da riga 101 per ciascuna colonna. Modifica come preferisci.
Ciao a tutti,
di seguito vi espongo i miei due quesiti:
1. come da oggetto, vorrei sapere se esiste una formula, o combinazione di esse, che mi permetta di visualizzare in una determinata cella (E2), il primo valore visualizzato nella colonna filtrata B (in particolare il range B4:xldown); possibilmente evitando macro
2. con la stessa ipotesi di prima, in una cella, mi piacerebbe visualizzare tutti i parametri (attivi) utilizzati per la colonna filtrata; ad esempio, ho una colonna con 5 volori: "A", "B", "C", "D", "E". Filtro questa colonna per "B" e "D". Nella cella E2 vorrei visualizzare in sequenza i filtri da me adottati in questo caso; eventualmente va bene anche una macro in questo caso.
Ringrazio in anticipo a chiunque mi risponda.
Ciao.
PS E' evidente che il secondo quesito include il primo, però io mi auguro che al primo quesito si possa giungere ad una formula senza macro.
1 - No
2 - Solo ricorrendo a macro
Ok grazie mille.
E' possibile sapere che istruzione serve per risalire al nome/criterio adottato per il filtro?
Grazie ancora in anticipo.
Per istruzione intendi: una macro che recuperi quanto chiedi?
Se è così, mi serve sapere:
Grazie.
Certo:
1. nome foglio: " As-Built register"
2. C3:C (fino all'ultima cella valore NON vuoto)
3. E2 (in realta è una cella unita C2:E2... in questo caso come faccio ad individuare questa cella unione di singole celle?)
Grazie a te.
Ciao.
Allora....
La macro qui sotto, da copia/incollare in modulo standard, recupera i vari criteri impostati nelle colonne del filtro automatico del foglio As-Built report:
Public Sub m()
Dim sh As Worksheet
Dim ftr As Filter
Dim s As String
Dim lCol As Long
lCol = 1
Set sh = ThisWorkbook.Worksheets("AS-Built register")
With sh
If .AutoFilterMode Then
For Each ftr In .AutoFilter.Filters
s = ""
If ftr.On Then
s = s & "Criterio1: " & ftr.Criteria1
If ftr.Operator Then
s = s & " - Criterio2: " & ftr.Criteria2
End If
End If
If Len(s) > 0 Then
MsgBox "Colonna del filtro: " & lCol _
& vbNewLine & s
End If
lCol = lCol + 1
Next
End If
End With
Set ftr = Nothing
Set sh = Nothing
End Sub
Partiamo da qui e, scusami, ripetimi dove dobbiamo mettere i dati che adesso vengono mostrati nelle MsgBox. Grazie.
Grazie a te Mauro.
La cella in cui dovrebbero comparire questi criteri di filtro sono contenuti nella Cella unita C2:E2.
Notavo inoltre che la macro legge fino al 2° criterio. bisogna impostare tanti if quanti sono i casi possibili?
Ciao e grazie come sempre.
Due criteri sono lo standard per tutte le versioni di Excel.
Più di due criteri sono stati introdotti con la versione 2007.
Come si può editare il risultato in una cella (C2), magari con più di due criteri?Certo:
1. nome foglio: " As-Built register"
2. C3:C (fino all'ultima cella valore NON vuoto)
3. E2 (in realta è una cella unita C2:E2... in questo caso come faccio ad individuare questa cella unione di singole celle?)
Grazie a te.
Ciao.
Allora....La macro qui sotto, da copia/incollare in modulo standard, recupera i vari criteri impostati nelle colonne del filtro automatico del foglio As-Built report:
Public Sub m()
Dim sh As Worksheet
Dim ftr As Filter
Dim s As String
Dim lCol As Long
lCol = 1
Set sh = ThisWorkbook.Worksheets("AS-Built register")
With sh
If .AutoFilterMode Then
For Each ftr In .AutoFilter.Filters
s = ""
If ftr.On Then
s = s & "Criterio1: " & ftr.Criteria1
If ftr.Operator Then
s = s & " - Criterio2: " & ftr.Criteria2
End If
End If
If Len(s) > 0 Then
MsgBox "Colonna del filtro: " & lCol _
& vbNewLine & s
End If
lCol = lCol + 1
Next
End If
End With
Set ftr = Nothing
Set sh = Nothing
End SubPartiamo da qui e, scusami, ripetimi dove dobbiamo mettere i dati che adesso vengono mostrati nelle MsgBox. Grazie.
Immetti l'ID thread del thread in cui si esegue l'unione
Per segnalare un abuso, accedi o continua senza accedere
Grazie.
|
|
|
|
Non possiedi uno di questi account?