Ho notato un problema, però: nella routine così come postata viene stampato solo il primo elemento dell'array per "x" volte
Grrr... Ci casco sempre....
Se OArr siamo certi che conterra' sempre <65000 elementi allora la Transpose va bene.
Oppure modifica il dimensionamento di OArr:
- Codice: Seleziona tutto
ReDim OArr(LBound(WArr, 1) To UBound(WArr, 1), 1 To 1)
Poi verso il fondo elimina la ReDim
- Codice: Seleziona tutto
'ReDim Preserve OArr(LBound(WArr, 1) To myOInd)
se oltre al filtro sulla lunghezza della parola (routine di Anthony che funziona perfettamente) avessi la necessità di filtrare contemporaneamente il valore di un altra colonna ?
Es. Filtra tutte le parole di colonna "A" con lunghezza = 10 che in colonna "B" contengano il carattere "N"
Devi modificare la riga che come commento contiene " <<< La regola da rispettare", che ora dice
- Codice: Seleziona tutto
If Len(WArr(I, 1)) = 4 Then '<<< La regola da rispettare
La macro carica in una matrice (WArr) il contenuto della colonna che si vuole controllare; se vuoi inserire due controlli allora la cosa piu' semplice e' che carichi in una seconda matrice il contenuto della seconda colonna e poi lavori su questa seconda matrice). Esempio
- Codice: Seleziona tutto
WArr = Cells(2, listCol).Resize(lastr, 1).Value 'Esistente
WAb = Cells(2, NumeroDiAltraColonna).Resize(lastr, 1).Value '<<< Aggiungi
Poi modifichi:
- Codice: Seleziona tutto
If Len(WArr(I, 1)) = 4 and InStr(1, WAb(I, 1), "N", vbTextCompare) Then '<<< La regola da rispettare
Ciao