Una famiglia di software per fogli di calcolo Microsoft con strumenti per l'analisi, la creazione di grafici e la comunicazione dei dati.
Ciao Massimo,
la mia domanda, e scusami se a volte non mi spiego bene, è che io vorrei filtrare come da tuo esempio bella e strega che sono interne al testo, non so utilizzare il carattere jolly come si fa? perche se inserisco da sinistra i caratteri non ho nessun problema,
Esempi dell'uso del joli (*) nei criteri della TextBox1:
Per filtrare ogni valore che inizia con la lettera A, utilizza il criterio A* (oppure, a*)
Il criterio Anne è*****restituirebbe, ad esempio, Anne è bella, Anne è una brutta strega e Anne è un fan di Arsenal.
Il criterio A*strega restituirebbe Anne è una brutta stregama non restituirebbe Anne è bella.
poi avrei bisogno di una textbox che calcoli quante righe o nomi ha filtrato tipo:
Else
Me.Textbox1.Text = .Listcount '========> ma non so dove metterlo eppoi listcount non è settato
Invece di utilizzare un'altra TextBox, vorrei suggerire l'uso di un controllo Label (Label1). Quindi, prova di sostituire il codice nel modulo della Userform con la seguente versione:
'=========>>
Option Explicit
Option Compare Text
Private rngDati As Range
'--------->>
Private Sub UserForm_Initialize()
Dim SH As Worksheet
Set SH = ActiveSheet
Set rngDati = SH.Range("A1").CurrentRegion
With Me
.ListBox1.List = rngDati.Value
.Label1.Caption = "Numero di Record Prima di Filtraggio = " _
& Me.ListBox1.ListCount - 1
End With
End Sub
'--------->>
Private Sub cbFiltraDati_Click()
Me.ListBox1.List = rngDati.Value
Call filterIt
End Sub
'--------->>
Private Sub cbRipristinaDati_Click()
Dim i As Long
For i = 1 To 4
Me.Controls("TextBox" & i).Value = vbNullString
Next i
With Me
.ListBox1.List = rngDati.Value
.Label1.Caption = "Numero di Record Prima di Filtraggio = " _
& Me.ListBox1.ListCount - 1
End With
End Sub
'--------->>
Private Function FilterListBox(arrList As Variant, arrCriteri() As Variant)
Dim arrIn As Variant, arrOut() As Variant, arrFilter() As Variant
Dim i As Long, j As Long, k As Long, p As Long, q As Long
Dim UB As Long, UB2 As Long
Dim blMatch As Boolean
arrIn = arrList
UB = UBound(arrIn, 1)
UB2 = UBound(arrIn, 2)
For i = 0 To UB
For j = 0 To UB2
If CStr(arrIn(i, j)) Like arrCriteri(j + 1) Then
blMatch = True
ElseIf arrCriteri(j + 1) = vbNullString Then
blMatch = True
Else
blMatch = False
End If
If Not blMatch Then
Exit For
End If
Next j
If blMatch Then
k = k + 1
ReDim Preserve arrFilter(1 To UB2 + 1, 1 To k)
For p = 0 To UB2
arrFilter(p + 1, k) = arrIn(i, p)
Next p
End If
Next i
With Me.ListBox1
Select Case k
Case 0
.Clear
Case 1
.Column = Application.Transpose(arrFilter)
Case Else
.List = Application.Transpose(arrFilter)
End Select
End With
End Function
'--------->>
Private Sub filterIt()
Dim arrCriteria() As Variant, arrData As Variant
Dim sCriteri As String
Dim i As Long, j As Long
i = Me.ListBox1.ColumnCount
ReDim arrCriteria(1 To i)
For j = 1 To i
arrCriteria(j) = Me.Controls("TextBox" & j).Value
Next j
sCriteri = Join(arrCriteria, ",")
arrData = Me.ListBox1.List
Call FilterListBox(arrData, arrCriteria())
Me.Label1.Caption = "Numero di Record Filtrati = " _
& Me.ListBox1.ListCount
End Sub
'<<=========
Troverai il file di esempio aggiornato a: http://1drv.ms/17YcBw5
===
Regards,
Norman