Imprimir página | Cerrar ventana

If con varias causisticas

Impreso de: Foro de Access y VBA
Categoría: Otros de Microsoft: Windows y Office
Nombre del foro: Excel
Descripción del foro: Foro de Excel y VBA de Excel
URL: http://www.mvp-access.com/foro/forum_posts.asp?TID=85589
Fecha de impresión: 20/Abril/2024 a las 06:49


Tema: If con varias causisticas
Publicado por: algohe
Asunto: If con varias causisticas
Fecha de publicación: 06/Noviembre/2020 a las 10:10
Buenos días y gracias por la ayuda antes de todo.

Tengo un excel donde hay varios campos por los que tengo que filtrar, pero son campos opcionales si estan rellenos filtra por el campo si esta vacio lo ignora, el problema que tengo es que no se como construir el IF para que valore todo.

Seria en vba ya que es codigo que va dentro de una macro.

Pongo un ejemplo de lo que necesitaria.

campo 1 relleno--> filtro
campo 2 vacio --> lo ignoro
campo 3 relleno --> filtro
campo 4 relleno --> filtro

Aquí filtraría por todos los campos ignorando el 2, pero los 4 campos pueden estar vacios, rellenos, unos rellenos y otros vacios....

Gracias



Respuestas:
Publicado por: AnSanVal
Fecha de publicación: 06/Noviembre/2020 a las 13:46
Con los datos aportados, yo no puedo saber como son tus datos ni donde están, por tanto no puedo recrear la situación de tu modelo de datos.

Usa la Grabadora de Excel y filtra desmarcando celdas vacías.




-------------
Saludos desde Tenerife.


Publicado por: algohe
Fecha de publicación: 06/Noviembre/2020 a las 17:39
Interate explicar un poco mejor.

Tengo un excel en el cual añaden una seria de datos de un material que luego se tienen que usar para filtrar en otro excel, tengo ancho, largo, grosor, espesor, etc....

Estos campos no son obligatorios es decir puede estar relleno solo largo y buscaría solo largo en la otra lista de materiales o puede tener 3 campos rellenos y entonces tendría que filtrar por los 3.

La idea es si el campo esta vacio no filtres y si esta relleno filtras por ese campo tambien.

Digamos que lo que necesitaria es crear un If "dinamico" que filtre por los campos por datos ignorando los vacios.


Publicado por: SkaryBlondi
Fecha de publicación: 06/Noviembre/2020 a las 18:04
Yo lo resolvería a groso modo del siguiente modo
if campo1 <> "" then
   If condicion = "" then
       condicion = campo1
   else
       condicion = condicion & " or " & campo1
   end if
end if

if campo2 <> "" then
   If condicion = "" then
       condicion = campo2
   else
       condicion = condicion & " or " & campo2
   end if
end if

if campo3 <> "" then
   If condicion = "" then
       condicion = campo3
   else
       condicion = condicion & " or " & campo3
   end if
end if

if campo4 <> "" then
   If condicion = "" then
       condicion = campo4
   else
       condicion = condicion & " or " & campo4
   end if
end if

Si al final el campo condicion es nulo es que no hay ningún filtro y en caso contrario en el campo condicion tienes el filtro que hay que aplicar en el que yo he puesto la condicion OR pero que pueden ser AND

Tendrás que aplicar a cada filtro una etiqueta y luego hacer mención al rango o bien apuntar directamente a la celda que contiene el valor.

Saludos,





Publicado por: AnSanVal
Fecha de publicación: 07/Noviembre/2020 a las 12:33

1.- … hay varios campos…(¿Cuáles, como, donde?)

2.- campo 1 relleno--> filtro (¿Campo relleno:  a) toda la columna, b) sólo una celda?)

3.- campo 2 vacio --> lo ignoro (¿Campo vacío:  a) toda la columna, b) sólo una celda?)

4.- Tengo un excel1 en el cual añaden una seria de datos de un material que luego se tienen que usar para filtrar en otro Excel1, tengo ancho, largo, grosor, espesor, etc...

  (4 es prácticamente lo mismo que en 1, 2, y 3) .

 

Importante è Las instrucciones que damos en VBA (macros) deben ser totalmente precisas, incluso si le damos un rango y funciona,  pero mañana modificamos el rango la macro dejaría de funcionar con corrección. Por tanto es necesario conocer: rango correcto, si ese rango va a variar en número de filas, etc.

 

Se necesita una imagen (con datos inventados pero fieles)  y algún ejemplo claro de lo que quieres obtener en algún supuesto concreto.

 

 

1) è (para entendernos) Excel es la aplicación que te vino con OFFICE, un libro no es un Excel, un libro está compuesto de hojas.






-------------
Saludos desde Tenerife.


Publicado por: algohe
Fecha de publicación: 09/Noviembre/2020 a las 09:27
Intentare ser lo mas detallado posible:

En una hoja tengo una seria de campos (adjunto imagen), esos campos se pueden o no rellenar y hacen de filtro en otra hoja donde tengo no listado de materiales.



Con estos valores mas otros que son obligatorios (que esos simplemente hago un if en la macro) realizo una búsqueda en otra hoja y muestro los resultados.

Realizar la búsqueda de los campos obligatorios y mostrar los resulto es fácil, el problema lo tengo cuando quiero crear un if con los campos que no son obligatorios porque si contemplo todos los casos se hace un if gigantesto e imagino que habrá otra forma mas sencilla de hacerlo pero no logro encontrarla.

Se que a través de formulas en Excel se puede hacer pero necesito que sea a través de una macro porque luego con esos datos que tengo que realizar mas procedimientos.

Gracias


Publicado por: algohe
Fecha de publicación: 09/Noviembre/2020 a las 09:31
https://ibb.co/GsPvskD

este es el enlace de la imagen 


Publicado por: AnSanVal
Fecha de publicación: 09/Noviembre/2020 a las 18:37
Si tu ejemplo tiene un sólo registro, no necesitas filtrarlo.

Así entiendo que hayas ignorado lo de «... algún ejemplo claro de lo que quieres obtener...», con un sólo registro no puedes mostrar un ejemplo filtrado.

Y si tú no puedes... imagínate yo. 

Sigo a la espera de que que decidas mostrar algo más parecido a tu modelo de datos y ejemplo(s) de lo que quieres obtener. Yo sigo sin poder ver que quieres decir con:
  «... campo 1 relleno--> filtro, campo 2 vacío --> lo ignoro...». (seguramente para ti está claro).




-------------
Saludos desde Tenerife.


Publicado por: RodriguezA
Fecha de publicación: 25/Noviembre/2020 a las 16:18
Creo que si eres un poco más detallista te podemos ayudar Wink

-------------
https://barajaspkg.es/" rel="nofollow - BarajasPkg


Publicado por: Marciana
Fecha de publicación: 05/Diciembre/2020 a las 23:49
Hoa
A ver si esto puede ayudar.
Hice este ejemplo tonto:
Una tabla con datos:
q w e
1 2 1
q 3 2
1
5
1 y 2

Este código lo generé grabando la macro:
Sub filtro()
    Range("C1").Select
    Selection.AutoFilter
    ActiveSheet.Range("$A$1:$C$6").AutoFilter Field:=1, Criteria1:="1"
    ActiveSheet.Range("$A$1:$C$6").AutoFilter Field:=2, Criteria1:="2"
    ActiveSheet.Range("$A$1:$C$6").AutoFilter Field:=3
End Sub

Y este fue el resultado.


q w e
1 2 1

Para seleccionar los valores nulos (sin dato) de la columna A va esto:
ActiveSheet.Range("$A$1:$C$6").AutoFilter Field:=1, Criteria1:="="




-------------
Cordialmente, Marciana
Saludos desde la Patagonia, Argentina


Publicado por: AnSanVal
Fecha de publicación: 06/Diciembre/2020 a las 12:54
Hola RodriguezA, hola marciana, no debemos preocuparnos demasiado por este tema. algohe no está muy dispuesta/o a dejarse ayudar.

Tened en cuenta que le pedí sólo 2 cosas sencillas (para intentar ayudarle):
1.- Una imagen (con datos inventados pero fieles)
2.- Un ejemplo claro de lo que quiere obtener con el ejemplo de la imagen aportada.

Aportó la imagen pero no dijo (de esos datos) cuales quería pasar a la otra hoja, claro que con un sólo registro... no es necesario filtrar, pero... si no se deja ayudar (está en su derecho), no podemos obligarle.




-------------
Saludos desde Tenerife.



Imprimir página | Cerrar ventana