Saltar al contenido
PROGRAMAR EN VBA MACROS DE EXCEL

Como FILTRAR EXCEL al PRESIONAR ENTER con Filtro AVANZADO con Macro Excel VBA #557

Filtro avanzado con macro al presionar enter

APLICAR FILTRO AVANZADO CON MACRO PRESIONANDO ENTER

En este post se muestra como se puede aplicar un filtro automático con macro al presionar la tecla enter, el ejemplo muestra como en una celda se escribe los datos que se quieren filtrar sea la palabra entera o un par de caracteres y luego presionando enter se ejecuta una macro que realiza un filtro automático mediante macros de Excel VBA.

Necesitas dominar la planilla de cálculos más usada a nivel mundial, click acá, si quieres aprender sobre Excel en inglés, entonces debes hacer click here. Si lo que necesitas es aprender o profundizar sobre la programación de macros con VBA este es unos de los mejores cursos on line que he visto en internet, te lo recomiendo no te arrepentirás.

  
 

Mira la macro en acción, una explicación más detallada de su codificación y funcionamiento, recomiendo observar para una más fácil comprensión de la macro; suscribe a nuestro canal de You Tube, mira el playlist con  vídeos relacionados donde podrás ver la macros relacionadas en acción con una explicación en forma visual que ayudará a entender el ejemplo en forma más fácil.

FILTRO AVANZADO CON MACRO PRESIONANDO ENTER O RETURN

Al abrir el libro, en la hoja inicio se encuentra una celda de color rojo, en dicha celda se debe escribir el valor a buscar, en este caso se trata de marcas de producto.

Se puede escribir un par de caracteres o la marca del producto en forma integra, posteriormente se debe presionar enter y la macro creará un filtro avanzado, filtrando los datos coincidentes con lo escrito y la columna de marca de producto de la Hoja DB.

La búsqueda de los datos se empieza a ejecutar al presionar Enter, encontrado o filtrado los datos coincidentes, los cuales son copiados en la hoja inicio.

Se debe tener presente que la macro funciona tanto al presionar la tecla Enter propiamente dicha que es la que está en el teclado numérico y la tecla Return que es la que está en el teclado alfanumérico.

Explicación del código para crear un filtro avanzado en Excel con macro y al presionar enter

El código primero detecta que la modificación de la celda se produzca en la celda «C1», en este ejemplo es la celda de color rojo y donde se debe ingresar marca del producto que se requiere filtrar, lo mencionado se hace con este código:

If Target.Row = 1 And Target.Column = 3 Then

Posteriormente se asigna a la tecla «Enter» y la tecla «Return», la macro busca, esto hace que cuando se detecte que se haya presionado Enter o Return, en vez de tener el comportamiento normal que se realizaría al presionar estas teclas, se ejecutará el código asignado, en este caso ejecutar la macro «Busca», lo mencionado se realiza con el siguiente código:

Application.OnKey «{ENTER}», «Busca»

Application.OnKey «{RETURN}», «Busca»

 

 

Código VBA filtrar Excel al presionar Enter o Return

Código insertado en Worksheet (hoja donde se requiere insertar los datos filtrados)

Sub Worksheet_Change(ByVal Target As Range)
If Target.Row = 1 And Target.Column = 3 Then Application.OnKey «{ENTER}», «Busca»: Application.OnKey «{RETURN}», «Busca»
End Sub

Bien cuando se presiona Enter se asigna y ejecuta la macro «Busca», dicha macro contiene el procedimiento para realizar el filtro avanzado con macro

Se crea un objeto con la hoja donde se copiarán los datos filtrados y otro con la hoja donde está la base de datos, así:

Set a = Sheets(«Inicio»)
Set b = Sheets(«DB»)

Luego se crean en forma temporal los critrios de validación, para ello se escribe en al columna J1 y J2 de la hoja base de datos, cuales son los criterios del filtro avanzado, en J1 se escribe por que se está filtrando, en este caso «Marca» y en J2 se copian los caracteres escritos en la celda J2, pero concatenando con caracteres comodines que usa el filtro automático, para que busque la cadena de texto escrita, delante, en medio o detrás de la cadena de texto que conforma la marca del producto, se usan los siguientes códigos:


b.Range(«J1»).Value = a.Range(«B1»)
b.Range(«J2»).Value = «*» & a.Range(«C1») & IIf(a.Range(«C1») = «», «», «*»)

Limpia las celdas donde se van a copiar los datos, con los siguientes códigos:

ufa = a.Range(«A» & Rows.Count).End(xlUp).Row
If ufa < 3 Then ufa = 3
a.Range(«A3:H» & ufa).Clear

Luego se establece la última fila con datos en la base de datos, para que la búsqueda se realice hasta esa fila, el código es:

uf = b.Range(«A» & Rows.Count).End(xlUp).Row

Posteriormente se crean objetos con el rango de datos, el rango de criterios y el rango donde se van a pegar los datos filtrados, el código es el que sigue:


Set Rng = b.Range(«A1:H» & uf) ‘rango datos
Set d = b.Range(«J1:J2») ‘rango criterios
Set e = a.Range(«A3:H3») ‘rango donde copiar

Luego se aplica el filtro automático, copiándose los datos filtrados en la celda indicada, el código es el siguiente:


Rng.AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=d, CopyToRange:=e, Unique:=1

Se borra la celda donde se escribió el criterio de filtro en forma temporal, así:

b.Range(«J:J»).Clear

Por último se devuelve a la tecla Enter y Return las funciones originales que tienen estas teclas.


Application.OnKey «{ENTER}» ‘devuelve funcion a enter teclado numérico
Application.OnKey «{RETURN}» ‘devuelve funcion a enter teclado alfabético



Código insertado en un módulo

#If VBA7 And Win64 Then
‘Si es de 64 bits
Public Declare PtrSafe Function ShellExecute Lib «shell32.dll» Alias «ShellExecuteA» (ByVal hwnd As LongPtr, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As LongPtr
Public Declare PtrSafe Function FindWindow Lib «USER32» Alias «FindWindowA» (ByVal lpClassName As String, ByVal lpWindowName As String) As LongPtr
Public Declare PtrSafe Function GetWindowLongPtr Lib «USER32» Alias «GetWindowLongPtrA» (ByVal hwnd As LongPtr, ByVal nIndex As Long) As LongPtr
Public Declare PtrSafe Function SetWindowLongPtr Lib «USER32» Alias «SetWindowLongPtrA» (ByVal hwnd As LongPtr, ByVal nIndex As Long, ByVal dwNewLong As LongPtr) As LongPtr
Public Declare PtrSafe Function DrawMenuBar Lib «USER32» (ByVal hwnd As Long) As LongPtr
Public Declare PtrSafe Function RegOpenKeyA Lib «advapire32.dll» (ByVal hKey As LongPtr, ByVal lpSubKey As String, phkResult As LongPtr) As LongPtr
#Else
‘Si es de 32 bits
Public Declare Function ShellExecute Lib «shell32.dll» Alias «ShellExecuteA» (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
Public Declare Function FindWindow Lib «USER32» Alias «FindWindowA» (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Public Declare Function GetWindowLong Lib «USER32» Alias «GetWindowLongA» (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Public Declare Function SetWindowLong Lib «USER32» Alias «SetWindowLongA» (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Public Declare Function DrawMenuBar Lib «USER32» (ByVal hwnd As Long) As Long
Public Declare Function RegOpenKeyA Lib «advapire32.dll» (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long
#End If

‘*********** by marcrodos **** https://programarexcel.com *** https://www.youtube.com/c/programarexcel?sub_confirmation=1 ********
Sub Busca()
On Error Resume Next
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Set a = Sheets(«Inicio»)
Set b = Sheets(«DB»)
b.Range(«J1»).Value = a.Range(«B1»)
b.Range(«J2»).Value = «*» & a.Range(«C1») & IIf(a.Range(«C1») = «», «», «*»)

ufa = a.Range(«A» & Rows.Count).End(xlUp).Row
If ufa < 3 Then ufa = 3
a.Range(«A3:H» & ufa).Clear

uf = b.Range(«A» & Rows.Count).End(xlUp).Row
Set Rng = b.Range(«A1:H» & uf) ‘rango datos
Set d = b.Range(«J1:J2») ‘rango criterios
Set e = a.Range(«A3:H3») ‘rango donde copiar
Rng.AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=d, CopyToRange:=e, Unique:=1

b.Range(«J:J»).Clear
Application.OnKey «{ENTER}» ‘devuelve funcion a enter teclado numerico
Application.OnKey «{RETURN}» ‘devuelve funcion a enter teclado alfabetico
Application.ScreenUpdating = True
Application.DisplayAlerts = True
End Sub



Descarga el libro usado como ejemplo en la macro «Como aplicar filtro avanzado en Excel al presionar Enter»

Descarga el Libro de Excel usado como ejemplo en este post y en el vídeo explicativo, el mismo es totalmente gratuito y libre su uso, solicito aportar para sostener esta web, si está dentro de tus posibilidades, desde ya muchas gracias.

Si te fue de utilidad puedes INVITARME UN CAFÉ y de esta manera ayudar a seguir manteniendo la página, CLICK para descargar en ejemplo en forma gratuita.

If this post was helpful INVITE ME A COFFEE and so help keep up the page, CLICK to download free example.

Donate:
Cuenta Paypal: https://paypal.me/programarexcel
Cuenta Bitcoin: 1KBGGb8fyDzyR3X1Rie6m7VguzaAfngNbd
Cuenta Ether: 0x41Bbd24556914C83a31217eBb3BC49789b66e407