Estamos muy acostumbrados a trabajar con las últimas versiones de Excel (2007 o 2010) donde podemos asignar formatos condicionales con más de tres condiciones sobre una celda; sin embargo, no hace mucho esta posibilidad no existía en el estándar, y debíamos cosntruirnos un código o macro que ejecutara y diera los formatos deseados.
Aún hoy siguen quedando usuarios rezagados de versiones un poco 'viejas', y que requieren dar un Formato condicional con más de esas tres condiciones límites. Para dar respuesta a un lector del blog daré un código sencillo pero efectivo que replica dicho formato:
La idea es clara, buscaremos un código que asigne un color de fondo a la celda donde se encuentre algunos de los cuatro textos indicados (GUARDIA, LIBRA, PERMISO y CONSULTA)
Veamos entonces nuestro código completo, que incluiremos en un módulo del Editor de VBA:
El funcionamiento de la macro 'formato' es sencillo, indicar sobre que rango de celdas queremos aplicar los formatos de colores, y a continuación si detecta el valor indicado cambiará el color de fondo de la celda.
Podemos ver en la imagen el resultado final para el rango A1:A4, donde hemos desplegado los cuatro textos; y como al presionar un Botón al que previamente hemos asignado nuestra macro 'formato', preguntará el rango de celdas y luego asignará los colores:
En la siguiente imagen vemos el resultado final
Aún hoy siguen quedando usuarios rezagados de versiones un poco 'viejas', y que requieren dar un Formato condicional con más de esas tres condiciones límites. Para dar respuesta a un lector del blog daré un código sencillo pero efectivo que replica dicho formato:
...Por razones profesionales no puedo usar las versiones superiores a la 2000, y a veces me encuentro un poco limitado con las funciones nuevas de los programas más modernos. La pregunta es: ¿Puedo reducir a UNA sola condición, a través de fórmula, el formato de celda, en función del texto contenido? Te pongo el ejemplo: En una sola celda puedo necesitar meter distinto texto: GUARDIA, LIBRA, PERMISO, CONSULTA. Según el contenido le doy formato diferente a la celda. Pero al tener 4 tipos de texto, y el formato condicional disponer de solo 3 condiciones, ... ya no puedo hacerlo de esta forma. ¿Sería posible con una fórmula aplicar un formato diferente según el texto?... |
La idea es clara, buscaremos un código que asigne un color de fondo a la celda donde se encuentre algunos de los cuatro textos indicados (GUARDIA, LIBRA, PERMISO y CONSULTA)
Veamos entonces nuestro código completo, que incluiremos en un módulo del Editor de VBA:
Sub formato() Dim celda As Object Dim rng As Range 'con INPUTBOX seleccionamos un rango de celdas Set rng = Application.InputBox("en que rango quieres aplicar el formato??", Type:=8) 'recorremos cada celda del rango seleccionado For Each celda In rng valor = celda.Value 'asignamos colores según el valor de la celda If valor = "LIBRA" Then celda.Interior.Color = 65535 ElseIf valor = "PERMISO" Then celda.Interior.Color = 15773696 ElseIf valor = "GUARDIA" Then celda.Interior.Color = 255 ElseIf valor = "CONSULTA" Then celda.Interior.Color = 5296274 End If Next celda End Sub
El funcionamiento de la macro 'formato' es sencillo, indicar sobre que rango de celdas queremos aplicar los formatos de colores, y a continuación si detecta el valor indicado cambiará el color de fondo de la celda.
Podemos ver en la imagen el resultado final para el rango A1:A4, donde hemos desplegado los cuatro textos; y como al presionar un Botón al que previamente hemos asignado nuestra macro 'formato', preguntará el rango de celdas y luego asignará los colores:
En la siguiente imagen vemos el resultado final
Buen ejemplo, gracias por compartirlo. ¿Y para modificar el color de la fuente?
ResponderEliminarSaludos desde México.
Hola!
Eliminarpara aplicar el cambio al color de la fuente, el código sería:
celda.Font.Color = 65535
en lugar de
celda.Interior.Color = 65535
para cada valor.
UN saludo!!
Otra vez yo: tengo esta macro para eliminar lo que esta en una lista desplegable cuando selecciono algo de la lista anterior, anda estupenda:
ResponderEliminarPrivate Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = Range("Horarioentrada").Address Then
Target.Offset(0, 1).ClearContents
End If
End Sub
Ahora quiero hacer lo mismo con otra celda en la misma planilla que he llamado "Gerentes" y me da error no me deja agregar otra macro, porque puede ser?
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = Range("Gerentes").Address Then
Target.Offset(0, 1).ClearContents
End If
End Sub
Hola Nora,
Eliminarel código de esta última lo tienes incluido en la hoja correspondient 'Gerentes' en el explorador de proyectos??
date cuenta que es un evento de hoja!!
Slds
Hola.
ResponderEliminarpuedo consultar por una variante del color:
Necesito que se pinte las celdas la columna C( desde la fila 1 hasta la 10) si la columna b es mayor al valor numerico 7 y ( en c hay una forumla que divide el valor de A dividido el valor de B y a ese resultado que se obtiene en C que se pinte segun el caso:
Seria formato condicional con mas de 3 posibilades, tengo excel 2003
a b c
1 (datos numericos)
** Si b es > = 7 y
el resultado de la division (a/b) en C es = 0 entonces que se pinte c1 de rojo y el resultado seria siempre 0( ya que A es 0 y en B hay valores mayores a 0).
o
el resultado de C es entre 0.01 y 0.99, que se pinte de naranja o canela.
o
el resultado de C mayor igual 1 que se pinte el fondo de amarillo.
**O sino
que si B es menor a 7
si el resultado de C no existe porque B es 0 ( y en A es mayor a 0), que sea ponga guion ( - ) y se pinte de violeta.
o
si el resultado de C esta entre 0.01 y 0.99 que se ponga azul.
o si el resultado de C es >=1 que se pinte de celeste.
Es decir que se ejecute por cada fila desde la 1 hasta la fila 10.
Se entendio?No soy muy bueno exprando mis dudas.
Muchas gracias por su tiempo y ayuda.
Javier
Hola Javier,
Eliminarcambiando los colores, y como son relativamente pocas condiciones, se podría hacer assí:
Sub formato()
For Each celda In Range("C1:C10")
If celda.Offset(0, -1).Value > 7 And celda.Value = 0 Then
celda.Interior.Color = vbRed
ElseIf celda.Offset(0, -1).Value > 7 And celda.Value > 0.01 And celda.Value <= 0.99 Then
celda.Interior.Color = vbMagenta
ElseIf celda.Offset(0, -1).Value > 7 And celda.Value > 0.99 Then
celda.Interior.Color = vbMagenta
ElseIf celda.Offset(0, -1).Value <= 7 And celda.Value = 0 Then
celda.Interior.Color = vbCyan
ElseIf celda.Offset(0, -1).Value <= 7 And celda.Value > 0.01 And celda.Value <= 0.99 Then
celda.Interior.Color = vbBlue
ElseIf celda.Offset(0, -1).Value <= 7 And celda.Value > 0.99 Then
celda.Interior.Color = vbGreen
End If
Next celda
End Sub
Espero te sirva.
Slds
Hola muchas gracias por la rta. No me sirvio, me exprese mal. Intento aclarar mi consulta.
EliminarSi el valor de la columna B es > = 7 ( que suceda en columna C, 3 situaciones de pintar el fondo segun el resultado de C ).
y si es < 7 el valor en la columna B ( que suceda en la columna C con las mismas condiciones pero con otros colores porque en B el valor es > 7).
Entonces el resultado de la division de A/B que se ubica en la columna C, a ese valor en C , que se pinte fondo de color segun esas dos situaciones de B y luego esas situaciones en C que detallo:
Si B = 0 ( entonces la division es imposible a/b) y por lo tanto C no existe, que muestre un guion como resultado (-) fondo violeta en C.
Si A = 0 y B = 0 entonces que muestre un guion (-) fondo blanco en C.
Si B es >= 7 entonces
Si C es =0, Rojo
Si C es 0.01 y 0.99, naranja
Si C es >= 1, amarillo
Si B es < 7 entonces
Si C es = 0 Violeta
Si C es 0.01 y 0.99, azul
Si C es >=1, celeste
Bueno muchisimas gracias Isma por la rta y el tiempo.
Saludos
Javier
Hola Javier,
Eliminaren la fórmula de la columna C, tendrás que indicar las causas de error, por ejemplo, en C1:
=SI.ERROR(A1/B1;"-")
Luego ya puedes aplicar la macro anterior, sólo cambia los colores, donde pone
celda.interior.color = ...
Slds
Buensimo.
ResponderEliminarMuchas gracias Ismael. Voy a probarlo. Saludos
;-)
EliminarSlds
Hola Ismael
ResponderEliminarHe de crear una tabla con cinco columnas y la 5ª ha de dar el valor automáticamente dependiendo de los valores de las otras 4 columnas (todas basadas en NO/SI)
Q&RI? IVD? critical prod/service? high control? classificat.
no 4
sí sí 1
sí no sí no 2
sí no sí sí 3
sí no no no 3
sí no no sí 4
Y no sé cómo empezar
¿Me puedes echar una mano?
Muchas gracias
En la primera, dado que el valor es no, el resultado siempre es 4
ResponderEliminaren la segunda, dado que las dos primeras columnas son sí, el resultado es siempre 1
Hola Josefa,
Eliminarlo primero que deberás tener claro es qué regla es la que aplica... sin tener esto claro no podremos construir fórmula alguna.
En todo caso tendrás que emplear una función SI en la quinta columna, donde se calculará el valor 1,2,3 ó 4.
Sería algo así:
=SI(Y(A2="no";B2="";C2="";D2="");4;SI(Y(A2="sí";B2="sí";C2="";D2="");1; etc, etc...
el problema de hacerlo así, es que deberemos construir un criterio para cada caso, y las combinaciones de dos elementos tomados de cuatro en cuatro son bastantes... por eso lo primero sería tener claro por que es 1, 2, 3, o 4.
Espero haberte orientado.
Sdls
Hola Carmen,
ResponderEliminarparece se ha cortado tu pregunta.
Supongo quieres que cuando el dato de la columna UNDELS esté vacío la celda correspondiente de la columna ruta cambie a color blanco.
Si es así no haría falta aplicar macros, bastaría aplicar un sencillo Formato condicional con fórmula.
Tendrías que seleccionar los datos del campo RUTA (por ejemplo en A2:A50, con la celda A2 activa) e introducir la fórmula:
=$B2=""
y asignarle el formato de color que quieras...
Espero te sirva
Slds
Felicidades por este buen Foro.
ResponderEliminarTengo una duda:
If VALOR = "COLOR" Then
celda.Interior.Color = 255
'Si de esta forma la celda que tiene la palabra exacta "Color" es la que cambiara de color. Para cambiar de color la celda solo que la palabra Color esta dentro de una frase y/o conjunto de otras palabras.
Gracias :)
Muchas gracias Alexander,
EliminarPara verificar que contiene el texto 'COLOR' deberemos emplear comodines (*,?...) y el operador Like en lugar del =
Quedaría entonces así:
...
If VALOR Like "*COLOR*" Then celda.Interior.Color = 255
...
Espero te sirva.
Slds cordiales
Funciona perfectamente :) Gracias
Eliminar;-)
EliminarEscribiré un post explicando algo más sobre el tema.
Slds cordiales
Usar Formato Condicional para que se "pinte" la celda donde ocurre el cruce entre el Curso y Docente seleccionado de una tabla matriz
ResponderEliminarHola, que tal estás?
EliminarEspero te encuentres bien.
Tendrías que usar el formato condicional tipo fórmula, y en la fórmula emplear la función lógica Y.
Saludos cordiales
HOLA :
ResponderEliminarFelicitaciones por el foro, solicito su ayuda, tengo un cuadro en el cual en la celda G21 que es resultado de una busqueda (vloockup) quiero que cada vez que su resultado sea NO me arroje una alerta que me diga NO ES GGAP, esto se repetira para toda la clumna cada vez que ingrese un dato y se genere la busqueda para esta celda G21.
De antemano gracias por la colaboracion
Hola,
Eliminarsi entiendo correctamente podrías en G21 incluir ua fórmula condicionada:
=SI(VLOOKUP(...)="NO";"No es GCAP";VLOOKUP(..))
Saludos
hola que tal muy buenas tardes, perdon que moleste con mi consulta pero tengo una problematica, se que para realizar una condicionante respecto a una celda con un valor especifico basta con crear un if y poner la condicion que nosotros queramos por ejemplo:
ResponderEliminarIf range("A1").value = hola then
Entonces podriamos condicionar lo que se requiriera pero mi problematica es la siguiente:
A1 tiene el nombre de la siguiente manera: MM- APC- LCU- SX
Yo necesito condicionar el valor de A1 a que si en su nombre esta escrita la palabra "APC" entonces proceda con una macro, y si no contiene la palabra "APC" entonces no haga nada:
ejemplor: MM-LCU-LCU-SX
en este caso la condicion no aplica y no haria nada.
MM- APC- LCU- SX
en este caso la condicion aplicaria y por ejemplo, borraria la hoja activa.
Espero me puedan asesorar, gracias de ante mano. Saludos
Hola Agustín,
Eliminarprueba con la función InStr, algo así:
Sub prueba()
If InStr(1, Range("B2"), "APC") >= 1 Then MsgBox "adelante"
End Sub
Un saludo
Muchísimas gracias, era precisamente lo que buscaba, de ante mano muchas gracias, te debo las chelas Ismael.
Eliminar;-)
EliminarUn saludo
Hola Ismael. Se me hace excelente este foro y todo tu apoyo a todo mundo. de antemano muchas gracias. creo que ahora yo tengo una muy dificil que no veo que alguien preguntara antes, bueno divicil para mi, para ti seguramente será muy fácil.
ResponderEliminarRealize una Macro para un Formulario de introducción de datos Codigo-Nombre-Dirección-Telefono-Email y 5 hojas con los mismos campos.
el código se refiere a nombre de la calle de la dirección(BO-VE-FE-FR-BE) ese yo lo introduzco en el campo CODIGO, tengo 5 hojas con diferente nombre de calle (BONELLI-VENERE-FERRATO-FERRARI-BENEDETTI) y una con el nombre FORMULARIO donde se ingresan los datos, Necesito que al introducir los datos en este formulario se transfieran a la hoja correspondiente de acuerdo al código. Alguna forma de hacer esto?
Por cierto la estoy Armando en Excel 2011 para MAC
ResponderEliminarHola Fernando,
Eliminarlo primero muchas gracias por tus palabras ;-)
Respecto a tu cuestión, se trataría de construir una variable que identifique la hoja destino según la dirección seleccionada en tu ComboBox (supongo) o tu TextBox: BO-VE-FE-FR-BE
incluso quizá (ya que son sólo 5) con un select case...
así bastarái indicar la dirección, con el código, para que el select case te dirigiera el pegado de datos a una u otra hoja...
Espero haberte dado la pista.
Un cordial saludo
UPPPPS. Muchas gracias Ismael, la verdad es que soy primerizo en esto de las macros y la verdad no te entendí, pero con la pista que me das me pondré a picarle y buscar, ojala exista un modo mas sencillo de explicarlo.
EliminarMil gracias. Saludos.
Ismael. Te agradecere me pudieras dar un ejemplo para poder entenderlo mejor.
EliminarSaludos.
Hola Fernando,
Eliminarsubiré un post al blog con la explicación a tu problema...
Un saludo
SERA QUE TE MANDE MI ARCHIVO PARA QUE VEAS LO QUE HIZE?
EliminarHola,
Eliminarclaro, puedes enviarme lo que tengas a
excelforo@gmail.com
En todo caso, subiré el desarrollo al blog.
Saludos cordiales
Hola Ismael. Subiste el desarrollo en el blog?
EliminarAgradezco tu buena onda con nosotros los mortales en el excel.
Saludos?
Aún no..en unas semanas.
EliminarSaludos
Este comentario ha sido eliminado por el autor.
ResponderEliminarBuen foro amigo Ismael pero una consulta, estoy creando una hoja de calculo con condiciones por decir una clasificación, por decir es un Peruano si cumple con las condiciones tales como : vive en peru, tiene menos de 60 años y mayor a 18.
ResponderEliminares algo parecido con la formula del excel "SI" pero yo quiero en macros :) no se si me dejo entender. de ante mano Gracias .
Hola Gary,
Eliminarsi necesitas aplicar varias condiciones, lo hagas sin macros o con macros, el funcionamiento es similar.
Aquí te dejo algunos link te puedes ayudar y dar respuesta:
http://excelforo.blogspot.com.es/2009/11/vba-en-excel-if-thenelse.html
http://excelforo.blogspot.com.es/2010/04/if-then-multiple-condicional.html
y otro más
http://excelforo.blogspot.com.es/2009/11/solucion-un-problema-con-vba-selectcase.html
Seguro alguno de los ejemplos te sirve.
Saludos
si me sirve para crear una formula y si yo quiero que funcione con un botón??? como seria????
EliminarHola Gary,
Eliminarbásicamente un procedimiento Function y uno Sub se distingue en muy pocas cosas. En esencia una Function lleva las variables como argumentos de la función, y un procedimiento Sub hay que indicárselas en el código.
Saludos cordiales
amigo ismael tengo esta macro
ResponderEliminarPublic Function Clasificacion1(Proceso, Monto)
'Macro creado por Gary Bernabe Saavedra
Select Case Proceso
Case Is = "Bien"
Select Case Monto
Case 0 To 11400: Clasificacion1 = "CONTRATACION DIRECTA"
Case 11400 To 40000: Clasificacion1 = "ADJUDICACION DE MENOR CUANTIA"
Case 40000 To 200000: Clasificacion1 = "ADJUDICACION DIRECTA SELECTIVA"
Case 200001 To 399999: Clasificacion1 = "ADJUDICACION DIRECTA PUBLICA"
Case Is >= 400000: Clasificacion1 = "LICITACION PUBLICA"
End Select
Case Is = "Servicio"
Select Case Monto
Case 0 To 11400: Clasificacion1 = "CONTRATACION DIRECTA"
Case 11400 To 40000: Clasificacion1 = "ADJUDICACION DE MENOR CUANTIA"
Case 40000 To 200000: Clasificacion1 = "ADJUDICACION DIRECTA SELECTIVA"
Case 200001 To 399999: Clasificacion1 = "ADJUDICACION DIRECTA PUBLICA"
Case Is >= 400000: Clasificacion1 = "CONCURSO PUBLICO"
End Select
Case Is = "Obra"
Select Case Monto
Case 0 To 11400: Clasificacion1 = "CONTRATACION DIRECTA"
Case 11400 To 180000: Clasificacion1 = "ADJUDICACION DE MENOR CUANTIA"
Case 180000 To 900000: Clasificacion1 = "ADJUDICACION DIRECTA SELECTIVA"
Case 900001 To 1800000: Clasificacion1 = "ADJUDICACION DIRECTA PUBLICA"
Case Is >= 1800000: Clasificacion1 = "LICITACION PUBLICA"
End Select
End Select
End Function
pero quiero por decir si es un bien de 40000 es un Adjudicacion Directa Selectiva, pero me sale Adjudicacion de menor cuantia como haria???? como seria ???
De ante mano Gracias.
Hola Gary,
Eliminarcuando empleamos SELECT CASE para un intervalo de valores, debes completar en intervalos cerrados, quiero decir, y par el ejemplo que pones( solo la primera parte):
Public Function Clasificacion1(Proceso, Monto)
'Macro creado por Gary Bernabe Saavedra
Select Case Proceso
Case Is = "Bien"
Select Case Monto
Case 0 To 11399: Clasificacion1 = "CONTRATACION DIRECTA"
Case 11400 To 39999: Clasificacion1 = "ADJUDICACION DE MENOR CUANTIA"
Case 40000 To 200000: Clasificacion1 = "ADJUDICACION DIRECTA SELECTIVA"
Case 200001 To 399999: Clasificacion1 = "ADJUDICACION DIRECTA PUBLICA"
Case Is >= 400000: Clasificacion1 = "LICITACION PUBLICA"
End Select
....
Es decir, no se pueden solapar los puntos de los intervalos en los diferentes casos!!
Saludos
Hola Ismael como puedo hacer una macro para comparar entre dos columnas con numeros, es decir, si columna "A" es mayor que columna "B" entonces que se pinte de un color y si columna "A" es menor que columna "B" entonces que se pinte de otro color. Esto dentro de todas las celdas que contenga la columna "A"
ResponderEliminarHola Omar,
Eliminarno hace falta una macro para tal cosa..
Lee esta entrada del blog
http://excelforo.blogspot.com.es/2014/03/iconos-de-formato-condicional-para.html
Te dará los pasos a seguir, con una mínima modificación del formato a aplicar..
Un cordial saludo
Muchas gracias Ismael realmente me ayudo, este Blog es excelente te felicito.
Eliminar;-)
EliminarUn saludo !!
Hola Ismael
ResponderEliminarTengo un caso especial que no se si de mucho problema o no?
Necesito cambiar el formato de los valores mostrados por algunas gráficas, dependiendo de lo que se trate, todo esto me lo condiciona una (Data List), para ser mas especifico necesito que el gráfico muestre los valores con formato de numero si en la lista tengo el texto "AHT", pero sino lo es que no haga nada. Ya que el resto de las variables necesito que se muestren como porcentaje. este ultimo es el formato que se muestra en todas las gráficas.
pero los valores de AHT deben mostrarse en la gráfica con formato de numero.
Espero me puedas ayudar con una Macros para unirla a otra que tengo la cual me ajusta los axis de las gráficas. Para hacer todo en un solo botón.
de antemano muchas gracias y Saludos,
Hola Jonathan,
Eliminarentiendo te refieres a las etiquetas de datos, que cuando su punto en el eje contenga 'AHT'...
Para ello tendrás que recorrer todos los puntos de la serie, evaluando con un IF... THEN si el texto contiene AHT.. para esto podrías usar la función InStr
en caso afirmativo, simplemente formateas esa etiqueta de datos de ese punto como número.
Un ejemplo de cómo recorrer los puntos y modificar la etiqueta de datos en:
http://excelforo.blogspot.com.es/2012/02/vba-modificar-etiquetas-de-datos-en-un.html
Espero te oriente
Un saludo
Hola! Queria saber si me podrías ayudar: no se programar con lenguaje de VBA, por lo que no se como hacer una macro..
ResponderEliminarLo que tengo qe hacer es relacionar todas las hojas de excel, Segun la base de datos (que contiene el código, modelo, precio, etc..) Entonces, por ejemplo, si escribo el código X.. Se autorrellenan las otras celdas con sus características (modelo, precio, color..) .. A su vez, al agregar un código a la hoja "ventas" que este mismo disminuya o se borre del inventario (en el caso que sea compra, que aumente el inventario) Es decir, Que cada acción modifique la hoja que afecte, aunqe sean varias.. No se si me explique bien. Y si me podrías ayudar... Por favor!
Muchas gracias!
Hola Trinidad,
Eliminaren principio no haría falta programar nada con VBA.. bastaría aplicar una serie de funciones estándar, del tipo BUSCARV para relacionar información entre hojas, y por ejemplo SUMAR.SI para actualizar datos de unidades para el inventario...
Un saludo y espero haberte orientado.
Muchas Gracias!
EliminarMe ayudo mucho utilizar la funcion BUSCARV, sin embargo no entiendo mucho como usar la funcion SUMAR.SI para actualizar el inventario. No se qué rellenar en rango y criterio, por ejemplo.
Muchas gracias por tu ayuda
Saludos!
Hola Trinidad,
Eliminarse da por entendido que un inventario es la suma de entradas y salidas de un producto, por tanto, con el SUMAR.SI acumularas todas las entradas y le restaras el acumulado de todas las salidas de cada producto...
En el rango estaría la columna de los productos donde hayas registrado todas las compras/entradas, el criterio sería cada producto individual...
de manera similar con las ventas/salidas...
Espero lo veas ahora algo más claro.
Saludos
Hola Ismael
ResponderEliminartengo una pregunta, quiero saber si se puede condicionar diferentes celdas dependientes de otra
p.j.
si A1 =10 ent. B1=10,C1=10
de manera automática y que permanezcan fijas las celdas B1 y C1
y ¿Dónde colocaría la macros, en caso de serlo? ¿es en un modulo ?
Hola,
Eliminarno entiendo a qué te refieres con que 'permanezcan fijas', pero para que B1 y C1 muestre un 10 cuando en A1 introduzcas el valor 10, podrías incluir en B1 y C1 la misma fórmula:
=SI(A1=10;10;"")
Con eso sería suficiente... en principio.
Espero te sirva.
Saludos
hola de nuevo,
Eliminarlo que me refería con 'permanezcan fijas' es que si A1=10 ent B1=10 y no se podrá cambiar, pero si no lo es B1= "cualquier valor".
Tu propuesta es valida pero B1 solo puede tomar 2 valores (" " y 10) y lo que se espera es que en B1 tome cualquier valor.
saludos
Entiendo entonces que sólo cuando A1 = 10, B1 y C1 deben ser igual a 10, en el resto de casos, por ejemplo, A1=9 entonces B1 y C1 pueden ser cualquier valor (8 y 3, por ejemplo...), de manera totalmente independiente a A1.
EliminarEntonces incluiremos una macro en la ventana de código de la hoja en cuestión, con el siguiente evento _Change:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("A1")) Is Nothing Then
If Target.Value = "10" Then
Range("B1,C1").Value = 10
End If
End If
End Sub
Saludos
No agradeci tu pronta atención, muchas gracias me sirvió mucho tu respuesta.
EliminarÉxito en tu Blog, me encanta
;-)
Eliminarmuchas gracias!
me alegro te funcionara
Slds cordiales
Hola Ismael
ResponderEliminartengo un cuadro donde se teine que pintar segun la caregoria y el impacto
el calculo es lo siguiente:
si categoria es 1 y impacto es 1 el resultado seria 1 y el color verde,
si categoria es 2 y impacto es 1 el resultado seria 2 y el color verde,
si categoria es 3 y impacto es 1 el resultado seria 3 y el color rojo
como podria hacer un macro sobre esos calculos
saludos...
Hola!
Eliminarno hace falta aplicar macros para tal cosa.
Bastará que configures tres reglas de formato condicional tipo fórmula.
Entendiendo la categoría se encuentra en, por ejemplo, la celda A1 y el impacto en B1, entonces el resultado en C1 tendríamos:
=SI(B1=1;SI(A1=1;1;SI(A1=2;2;SI(A1=3;3;""))))
y la regla de formato condicional:
=Y(A1=1;B1=1)
con formato de color verde
=Y(A1=2;B1=1)
con formato de color verde
=Y(A1=3;B1=1)
con formato de color rojo....
Espero te ayude
Slds
hola muy buen dia exelente foro, yo tengo una duda algo parecida pero sin colores, el problema es el siguuiente yo tengo 4 valores a, b, c y d quiero que al momento de ´ponerle "a" en una celda en la siguiente se me despliegue una lista como a1, a2, a3,...an alguna idea de como puedo hacerle?
ResponderEliminarHola,
Eliminarse trataría de una herramienta diferente, hablaríamos de una Validación de datos anidada.
Puedes ver un ejemplo de la técnica en:
http://excelforo.blogspot.com.es/2009/10/ejemplo-de-doble-validacion.html
Saludos cordiales
Ismael, ante todo muchas gracias por tu disposición para responder a todas nuestras inquietudes.
EliminarEn mi caso intento colorear las celdas de la columna A (que tienen contenido) con los colores Verde o, Amarillo o Rojo segun correspondan a estas condiciones:
Colorear de Verde las celdas de la columna A si el contenido de las celdas de la columna A es "En Plazo" y el contenido de las celdas de la columna B es vacio.
Colorear de Verde las celdas de la columna A si el contenido de las celdas de la columna A es "Vencida" y el contenido de las celdas de la columna C con formato fecha (dd/mm/aaaa) el mes (mm) es igual al actual.
Colorear de Amarillo las celdas de la columna A si el contenido de las celdas de la columna A es "Vencida" y el contenido de las celdas de la columna B es "Replanificar".
Colorear de Rojo las celdas de la columna A si el contenido de las celdas de la columna A es "Vencida" y el contenido de las celdas de la columna B es vacio".
Intente aplicar formula con formato condicional pero no logro el resultado.
Espero no complicarte demasiado y desde ya muchas gracias.
Hola Miguel Angel,
Eliminartendrás que aplicar diferentes reglas de formato condicional.
En primer lugar seleccionamos el rango de celdas a formatear (a dar color), en tu caso la columna A (asegúrate que la celda activa es A1).
Aplicamos formato condicional de tipo fórmula.
primera regla:
fórmula: =Y($A1="En plazo";$B1="")
luego damos formato de color verde
segunda regla:
fórmula: = Y($A1="Vencida";MES($C1)=MES(HOY()))
color verde
tercera regla:
fórmula: = Y($A1="Vencida";$B1="Replanificar")
color amarillo
cuarta regla:
fórmula: =Y($A1="Vencida";$B1="")
color rojo
Saludos
Hola Ismael, perdon por la pregunta, pero como seria en codigo de macro las sentencias de formato condicional que detallas con el ejemplo?
EliminarEspero tus comentarios.
Nuevamente muchas gracias.
Saludos
Hola Miguel Angel,
Eliminartendrías que evaluar las celdas con un IF THEN
IF celda.value="Vencida" AND celda.offset(0,1).value="Replanificar" THEN...
Saludos
Hola Ismael te agradezco toda la colaboracion que nos prestas, he aprendido mucho con tus explicaciones, tengo una consulta resulta que tengo un rango de celdas que va desde B12 hasta B61. donde normalmente ingreso codigos de referencias con la siguiente estructura... 1010120, 2014515, también tengo una macro que me pasa estos datos y otros a una hoja como base de datos... lo que quiero es que antes de ejecutar la macro se recorra el rango B12 al B61 y que todos los codigos de referencia tengan los 3 digitos medios iguales es decir si se ingresan en B12 el 1010120, en B13 EL 1010125 y asi todos deben infdicar 101 en el medio, si no es asi pues detenga la macro de introduccion y de un mensaje de error. y si son iguales seguir la macro.... tener en cuenta que no siembre se rellena todo el rango y que el 101 puede ser otro codigo lo importante es que se tome como referencia la celda B12 si en sus digitos medios es decir 1010120 ... en este caso es 101 se recorra el resto de celdas y tienen que ser iguales de lo contrario dar error... Mil gracias, espero me hayas entendido
ResponderEliminarHola,
Eliminarcreo, si he entendido bien, podría ser algo de este estilo:
Sub check()
Dim med As String
med = Mid(Range("B12").Value, 3, 3)
For Each celda In Range("B12:B61")
If Mid(celda.Value, 3, 3) <> med Then
MsgBox "el valor " & celda & " no cumple la condición"
Exit Sub
End If
Next celda
End Sub
Un saludo
Hola Ismael, te consulto para ver si me podés ayudar con el siguiente problema:
ResponderEliminarTengo una matriz que contiene fórmulas que dan como resultado 0, 1 o 2. Quisiera que cada fila se pinte de un color entre los número 1 y 2. Por ejemplo si el 1 está en A5 y el 2 está en F5 entonces que todas las celdas A5, B5, C5, D5, E5 y F5 se pinten. El inconveniente es que tengo office 2003 y no lo puedo hacer con formatos condicionales ni funciones de obtención de color de fondo. ¿Podrías ayudarme con una macro?
Muchas gracias por la colaboración.
Saludos
Fedra
Hola Fedra,
Eliminarenvíame el modelo de la matriz a
excelforo@gmail.com
y le echo un vistazo, pero en principio sí se podría hacer con fórmulas y formato condicional.
Saludos
Ismael felicidades y gracias por compartir tus conocimientos, tal vez me puedes ayudar.
ResponderEliminartengo este código que aplica un formato a toda la columna C cuando exista la palabra "Total", necesito que las columnas D y E se aplique el mismo formato dependiendo de la columna C
Columns("C:C").Select
Selection.FormatConditions.Add Type:=xlTextString, String:="Total", _
TextOperator:=xlContains
Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
With Selection.FormatConditions(1).Font
.Color = -16383844
.TintAndShade = 0
End With
With Selection.FormatConditions(1).Interior
.PatternColorIndex = xlAutomatic
.Color = 13551615
.TintAndShade = 0
End With
Selection.FormatConditions(1).StopIfTrue = False
Range("C18").Select
Hola Cristobal,
Eliminarno me queda claro.. quieres aplicar el color a toda la columna C, D y E cuando exista en alguna parte/celda de la columna C la palabra 'Total'?
o sólo quieres dar formato/color a la celda que contenga 'Total'??
Si es lo segundo: dar formato sólo a la celda de la columna C donde aparezca 'Total' y su correspondiente de D y E, puedes hacerlo sin macros, basta seleccionar las columnas C:E y aplicar formato con fórmula:
=$C1="Total"
y el formato que quieras.
Saludos
Ismael
Eliminargracias por tu atencion, pero ya lo soluciones el tema era por ejemplo en la posicion C4 estaba la palabra total C4,D4 y E4 debian tomar el mismo formato y esto se debia hacer tantas veces existiera la palabra total en la columna C, desde C1 hasta C1048576, esto lo logra con un dos For uno que recorra hacia abajo y otro hacia el lado.
Muchas gracias
Hubiera sido más sencillo sin macros, como te indicaba, con formato condicional); pero si ya lo has conseguido, pues perfecto!!
EliminarUn saludo
Este comentario ha sido eliminado por el autor.
ResponderEliminarBuenos días Ismael, tengo el siguiente caso con el que te pido el favor de que me colabores.
ResponderEliminarTengo una lista desplegable (en la columna P) con los siguientes estados:
CANCELADO
PARA PUBLICAR
PUBLICADO
NO CAMBIA
PARA DEROGAR
DEROGADO
EN MODIFICACIÓN
y quisiera que cada vez que se seleccionaran algunos de los estados PUBLICADO, DEROGADO y NO CAMBIA, automáticamente me devuelva la fecha (en la columna H) del día en que se puso ese estado.
Intente realizarlo con la formula hoy() pero no me sirvió porque se actualizada automáticamente cada vez que se abría el libro.
Solicito muy amablemente tu colaboración, mil gracias. Saludos
Hola Paola,
Eliminarpara fijar una dato (en tu caso la fecha) tendrías que emplear algo de programación.
Por ejemplo un evento Change en la ventana de código de la hoja.. para que al modificar una de esas celdas en la columna P, detecte el cambio e inserte la fecha del sistema (del día en cuestión) en la celda correspondiente de la columna H.
Podría ser así:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("C:C")) Is Nothing Then
If Target.Value = "PUBLICADO" Or Target.Value = "DEROGADO" Or Target.Value = "NO CAMBIA" Then
Cells(Target.Row, "B").Value = Date
End If
End If
End Sub
Espero te sirva
Saludos
Este comentario ha sido eliminado por el autor.
EliminarMe sirvió mucho el código que me enviaste... Ahora quisiera saber como puedo unir dos códigos; Uno es el que me acabas de enviar y otro es el siguiente:
ResponderEliminarPrivate Sub Worksheet_Change(ByVal Target As Range)
If Not Application.Intersect(Target, Range("C:C")) Is Nothing Then
Range("E" & Target.Row) = Date
End If
End Sub
Como puedo unir estos dos códigos?
Este código no tiene nada que ver en el anterior... pero debe quedar formulado en la misma hoja en la que estoy trabajando.
EliminarAgradezco tu colaboración.
Hola Paola,
Eliminarbásicamente quieres que al cambiar algo en la columna C:C ponga fija la fecha en su celda correspondiente de la columna E:E...
En esencia no serían necesarios ambos códigos, ya que si juntas los dos códigos siempre aplicaría este segundo y siempre pondría la fecha.
Por tanto yo dejaría únicamente el último.
De todas formas para unirlos por en un solo evento un if then debajo del otro...
Saludos
Hola Ismael, primero felicitarte por tu maravilloso Blog, me ha sido de gran ayuda, tengo un problemita ya que debo pasar unos registros que tengo en la hoja "DATOS" si cumplen con la condición del nombre, pero sólo me funciona con la primera coincidencia, con la siguiente no funciona, son bastantes registros pero por ahora pruebo con dos,dejo lo que hecho y agradezco tu amable colaboración.
ResponderEliminarSub PasarRegistros()
Dim celda As Object
Dim rng As Range
Set rng = Range("B1:GA11")
Worksheets("DATOS").Select
Rng.Select
'recorremos cada celda del rango indicado
For Each celda In rng
valor = celda.Value
If valor Like "*comcon*" Then
Range("B1:B11").Select
Selection.Copy
Sheets("COMCON").Select
Range("B1").Select
ActiveSheet.Paste
ElseIf valor Like "*comgprs*" Then
Range("C1:AB11").Select
Selection.Copy
Sheets("COMGPRS").Select
Range("B1").Select
ActiveSheet.Paste
Next celda
End If
Next celda
End Sub
Hola Elly,
Eliminarte recomendaría si quieres trasladar datos entre hojas, aplicando condiciones, usaras simplemente un Filtro Avanzado, es mucho más rápido y sencillo.
En todo caso, he probado tu código y ajustado para que copie y pegue el rango completo B1:B11 y C1:AB11 en cada una de las hojas... aunque no veo el sentido de hacer lo que hace:
Sub PasarRegistros()
Dim celda As Object
Dim rng As Range
Set rng = Worksheets("DATOS").Range("B1:GA11")
'recorremos cada celda del rango indicado
For Each celda In rng
Worksheets("DATOS").Select
valor = celda.Value
If valor Like "*comcon*" Then
Worksheets("DATOS").Range("B1:B11").Select
Selection.Copy
Sheets("COMCON").Select
Range("B1").Select
ActiveSheet.Paste
ElseIf valor Like "*comgprs*" Then
Worksheets("DATOS").Range("C1:AB11").Select
Selection.Copy
Sheets("COMGPRS").Select
Range("B1").Select
ActiveSheet.Paste
End If
Next celda
End Sub
El problema es que con ese código vas cambiando la hoja seleccionada y al intentar recuperar el bucle no volvía a la hoja original.
Espero te oriente
Ismael, muchísimas gracias tu ayuda me fue muy útil, por eso era que no pasaba los registros, te comento, el propósito de la macro es distribuir esos registros a sus hojas correspondientes ya que la información viene toda en una sola hoja, la revisión de esos datos es un proceso repetitivo, debe hacerse cada día, la idea es automatizarlo de modo que la distribuya, calcular un promedio para que no haya caída de volumen y graficar cada portal. Jejejeje es mucha información. Muchísimas gracias por tu amable ayuda, eres un máster en este tema. ;)
EliminarMe alegra haber podido orientarte.
EliminarUn cordial saludo
Hola!
ResponderEliminarMuy buena tu página y ayudas.
Soy nuevo en esto de macros y VBA y necesito esta herramienta para aplicarla a una base de datos.
Tengo la base de datos, y a las columnas les grabo una macro aplicando formato condicional (para los datos que estan bajo el promedio)
Esto me aparece
Sub Macro2_prueba2()
'
' Macro2_prueba2 Macro
'
'
Range("D2:D61").Select
Selection.FormatConditions.AddAboveAverage
Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
Selection.FormatConditions(1).AboveBelow = xlBelowAverage
With Selection.FormatConditions(1).Font
.Color = -16383844
.TintAndShade = 0
End With
Selection.FormatConditions(1).StopIfTrue = False
End Sub
Y no sé mucho cómo modificarlo en VBA.
Agradecería vuestra ayuda
OLVIDÉ AGREGAR QUE QUIERO HACERLA CORRER PARA TODAS LAS COLUMNAS, OJALÁ CON UN CLICK
EliminarHola Ale,
Eliminargracias por tu comentario.
Comenzaré preguntándote si quieres aplicar el formato a tu base de datos (a cada registro/fila) según el valor de uno de los campos (columna D)??
En segundo lugar qué te aporta tener esta macro cuando el Formato Condicional que estás aplicando es el mismo que sin macro?
Mi recomendación en este caso es:
0- Olvídate de macros para este caso.
1- convierte tu rango de origen (tu base de datos) en Tabla
2-Selecciona tu origen y conviértelo en Tabla
3- marca toda tu tabla
4-fíjate cuál es tu celda activa (supongo es la celda A2)
5- entra en formato condicional>Nueva regla>Utilice una fórmula que determine...
6-introduce la siguiente fórmula:
=$D2>promedio(Tabla1[campo])
el concepto Tabla1[campo] te debería aparecer al seleccionar el campo de la columna D.
Y ya no te tendrás que preocupar nunca más de ese formato.. no tendrás que hacer un solo clic
Saludos
Gracias por tu pronta respuesta.
EliminarAún así continúo con algunos problemas.
Cómo te puedo enviar el excel para que me puedas orientar un poco más?
Puedes enviarlo a
Eliminarexcelforo@gmail.com
Slds
muy buena tu ayuda, espero puedas ayudarme con mi problema, paso a explicarte:
ResponderEliminartengo una fila con celdes desplegrables de los dias de la semana(lun,mar,mierc,jue,vier,sab,dom) asignados para dias de trabajo a distintas personas, quisiera por empezar (el menor de mi capricho, osea si no se puede no me vuelve loca) es que cuando en la celda desplegable ponga ej. martes, la siguiente me devuelva miercoles y asi consiguientes con todas. repito no me molesta q no se pueda, lo q verdaderamente me gustaria que haga es que, si da domingo ese dia me devuelva en cada celda de empleado en color diferente el texto o me pinte la celda, porfaaaa y desde ya muchas gracias!
Hola Cindy,
Eliminarentiendo tienes un listado de personas (en A2:A10, por ejemplo), y en B1:H1 los desplegables de la semana (lun, mar, mie, etc...).
Si es así el caso (o similar) lo que haríamos sería seleccionar el rango B2:H10 y aplicaríamos un Formato Condicional con fórmula (asegúrate que la celda activa es B2):
=B$1="dom"
y aplicas el formato que quieres (fondo de celda, fuente, etc...)
Espero haber acertado.
Saludos
si, muchas gracias y muy buena tu interpretacion, te molesto con otra consulta, tengo un libro y aplique la sigte macro
EliminarPrivate Sub Worksheet_SelectionChange(ByVal Target As Range)
On Error Resume Next
Cells.Interior.ColorIndex = 0
Target.EntireRow.Interior.ColorIndex = 42
End Sub
para q me resalte la fila donde este posicionada, pero resulta que selecciono unas celdas para protegerlas y me queda todo seleccionado con el color del macro!!!!
Hola Cindy,
Eliminarlee las siguientes entradas:
http://excelforo.blogspot.com.es/2010/10/macro-vba-cambio-color-y-tamana-celda.html
o bien sin macros
http://excelforo.blogspot.com.es/2014/03/resaltar-celda-activa-sin-macros.html
Saludos
Hola Ismael,
ResponderEliminarLo primero, decir que estoy sorprendido de la rápida e intensa atención que prestas a través de este foro a tanta gente de distintas partes del mundo. Y lo haces con respuestas claras, bien pensadas y de calidad. Eso lo agradezco mucho.
Quisiera yo también acercarme y hacerte dos preguntas, que están relacionadas entre sí.
1) Necesito crear una macro que, en primer lugar, le solicite cierta información al usuario. Luego, en base a la información dada, esta macro debiera ocultar ciertas celdas de una hoja y ocultar el resto de las hojas del libro. ¿Será esto posible?
2) Si yo compartiera copias de este libro a distintas personas, me gustaría que ellas sólo vieras las celdas y las hojas que esa macro les muestre. Y así luego, poder consolidar en un archivo "matriz" la información que estas personas completen.
Espero haber sido claro en la descripción de las preguntas. Gracias de antemano por la ayuda y atención... Slds
Hola Gonzalo,
Eliminargracias por tus palabras.. de verdad que intento dar respuestas claras a todo el mundo ;-)
En cuanto a tus preguntas,
1- Sí, claro, es posible solicitar información al usuario mediante un UserForm construido (con algunos controles - TextBox, comboBox, etc...) o si es una pregunta sencilla directamente con un INPUTBOX.
Controlando esas variables 'respuesta' podríamos ocultar celdas (OJO, solo podemos ocultar columnas o filas completas!!) con la propiedad .Hidden=True; y por supuesto podemos esconder hojas del Libro con la propiedad de hoja .Visible=False
2- esto puede ser más problemático, ya que al ir con macros como indicas, requieres la habilitación de las macros por el usuario destinatario... si las habilita, obviamente verán aquellas celdas y hojas que sus respuestas le permitan...
Espero haberte dado algo de claridad.
Saludos
Hola,
ResponderEliminarQuiero formatar con colores dieferentes unos puntos en un grafico de dispersión en excel, solo que para esto yo quiero que un determinado grupo tenga un color. Como hacer esto?
Hola Jorge,
Eliminaryo probaría con separar por series cada grupo que quieras de un color, para luego incorporarlos al gráfico de dispersión...
Un cordial saludo
Hola Ismael,
ResponderEliminarEn inicio te felicito por el gran conocimiento que tienes y a raíz de eso el éxito obtenido en la web;
Me podrías ayudar con algo que me permita validar una dirección de email en un TextBox y que antes de registrarlo sí es incorrecto aparezca un mensaje de error.
Gracias, Saludos.
Hola JES DUE,
Eliminarmuchas gracias por tus palabras.. realmente sigo aprendiendo, como todos nosotros.
En cuanto a validar un email , la cosa puede ser complicada, ya que para verficar si existe esa dirección o no habrá que lanzar algún tipo de ping o similar.
Otra cosa sería comprobar que el texto tiene forma de dirección de correo... lo que se puede hacer con esta función VBA:
Function ValidarEmail(email As String) As Boolean
Dim oRegEx As Object
Set oRegEx = CreateObject("VBScript.RegExp")
With oRegEx
.Pattern = "^[\w-\.]{1,}\@([\da-zA-Z-]{1,}\.){1,}[\da-zA-Z-]{2,3}$"
ValidarEmail = .Test(email)
End With
Set oRegEx = Nothing
End Function
Espero te sirva
Saludos
Muchas gracias Ismael, en México decimos, "eres chingon" a las personas hábiles.
EliminarSaludos.
hola buenas Tardes. genio.
ResponderEliminartengo una palabra en A2 "esta palabra es representativa" se extiende varias veces. a igual que otras que son palabras.
En las columnas B - C - D están sus valores. después saltan a M-N. en el medio de esto tengo cálculos.
pero necesito darle formato con degradado a las columnas mencionadas. tambien necesito aplicarle borde de cuadro grueso a los conjuntos de palabras .
Etapas Punzados Tope (m) Base (m)
Pta R Sup 2 Pzdo 47 3091.1 3091.7
Pta R Sup 2 Pzdo 46 3106.8 3107.6
Pta R Sup 2 Pzdo 45 3117.3 3117.9
Pta R Sup 2 Pzdo 44 3134 3134.6
Pta R Sup 2 Pzdo 43 3144.3 3144.9
Pta R Sup 1 Pzdo 42 3166.3 3167.1
Pta R Sup 1 Pzdo 41 3178.2 3179
Pta R Sup 1 Pzdo 40 3191.6 3192.4
Pta R Sup 1 Pzdo 39 3207 3207.8
Pta RM 7 Pzdo 38 3230.5 3231
Pta RM 7 Pzdo 37 3252.1 3252.7
Pta RM 7 Pzdo 36 3258.4 3259
me podrías dar una ayuda
Hola,
Eliminarselecciona primero los rangos (columnas) que quieras tenga un formato y aplica el formato de colores y bordes que quieres..
en su caso si debe estar sujeto a alguna condición, añádele un formato condicional con la regla que le atañe (no me queda claro qué regla es la que se debe aplicar por tu exposición).
Saludos
Hola, ismael excelentes tus aoprtes, en mi caso quiero hacer lo siguiente
ResponderEliminartengo codigos de mantenimiento preventivos y correctivo, asi 0101010, 0201010, 0203010,0104010,0204010,0105020,.... la idea es que cuando yo coloque algun codigo de los anteriores me coloque en otra celda si es mtto preventivo- o correctivo
Hola Manuel,
Eliminargracias!
para tu caso habría que saber qué regla cumplen esos códigos para distinguir cuáles son preventivos y cuáles correctivos.
En general y adelantando una respuesta, me imagino tendrás una tabla de equivalencias, yo emplearía una función BUSCARV para recuperar el dato asociado al código buscado... algo así:
=BUSCARV(código buscado; TablaEquiv;2;0)
Espero te oriente
Saludos
ismael, son muchos condigos, ademas que me coloque si es preventivo o correctivo quiero que me los segmente por (Rodaje, Motor, chasis, Frenos, Direccion,etc, que sucede la dinamica de los codigos es la siguiente:
ResponderEliminarel codigo q contiene los primeros 4 digitos 1010 es rodaje, los que tienen los primeros 4 digitos 2010 es Hidraulico, 2030 es electricico, 1020 motor, 1080 frenos, entonces si es posible cuando yo digite un codigo me aparezca en otra celda si comienza con 1020 me salga "motor"
con la funcion buscar v puedo hacer eso?
gracias
Hola Manuel,
Eliminardeberás tener una tabla de equivalencias con esas correspondencias:
1010____rodaje
2010____hidráulico
2030____eléctrico
etc
Entonces sobre la lista de todos los códigos podrías:
=BUSCARV(VALOR(IZQUIERDA(código BUSCADO));TABLA EQUIV;2;0)
de forma parecida para distinguir entre preventivo o correctivo.
Saludos
Hola Ismael, tengo una cuestion que me tiene dando vueltas hace varios dias y no hallo la solucion.
ResponderEliminarNecesito seleccionar celdas adyacentes a la celda activa pero que cumplan con el mismo formato de la misma . . .algo asi como usar CurrentRegion, pero en vez que este limitada por celdas vacias, este limitada por el formato de la celda activa
Gracias!
Hola,
Eliminarte diría a priori que para algo así habría que desarrollar un proceso que recorra y seleccione las celdas que cumplan esa condición...
La dificultad será determinar donde parar el recorrido...
Lo pensaré
Gracias por tu atencion a mi asunto, por este lado seguire en la busqueda
EliminarGracias!
Como recorrer celdas especificas sin alterar la información, es decir, se pretende realizar un programa de producción en el cual al colocar una OT. Se recorran las horas ya antes planeadas. Por ejemplo en la celda B-G sea 1, de la celda H-M sea 2, sin embargo si se requiere meter un 3 en la celda E-F, los numeros "1" en esas celdas se recorran quedando de la siguiente manera E-F 3 de la G-I 1 que en este caso eran las celdas E-G y de la J-O quede el 2 que anteriormente eran las celdas H-M
ResponderEliminarHola Nallely,
Eliminarcómo estás?, me alegro saludarte.
Lo siento pero no me queda claro qué necesitas.. ya que comentas que no quieres alterar la información pero por otro lado quieres modificar (celdas E-F) el valor de éstas..???
En todo caso para recorrer las celdas con macros se suele emplear un bucle-loop tipo for...next, incluyendo alguna condición con IF... THEN que evalue si se desea cambiar o no el valor de esas celdas...
Un saludo
Buenas tardes. Tengo un conjunto de normativas especiales para la realización de cuadros específicos en excel para crear indicadores en mi lugar de trabajo y quería saber si alguien me podría ayudar a crear un archivo con macros para que todos mis compañeros de trabajo trabajen con el mismo formato o bajo las mismas normas!
ResponderEliminarHola Luis,
EliminarPor supuesto cualquier lector puede echarte una mano al respecto.
Pero debes saber que los desarrollos a medida, según las indicaciones de las Normas de Uso de este blog, se presupuestan.
Si estás interesado, con gusto te proporciono un presupuesto.
Saludos cordiales
hola, ¿como puedo hacer que una celda no tenga fondo de color?, es decir, en codigo pongo vbRed y se pinta en rojo pero si quiero no tenga "sin fondo" en un excel97 que codigo hay que introducir, Gracias, un saludo. Franci
ResponderEliminarHola Franci,
Eliminaren lugar de vbRed, puede poner: xlNone para que vaya sin relleno (sin color).
Saludos
hola, como puedo hacer que al ingresar un numero o marca (x o I) en una hoja me pueda pintar la celda de otra hoja,este es el caso que tengo en hoja1 en la celda b1 ingreso un numero o marca y en la hoja2 que me pinte la celda c3 y asi sucesivamente ingesando numeros o marcas de la hoja1 a la hoja 2 y que cada celda solo pinte lo que se le indique . cual seria el codigo en visual basic excel
ResponderEliminarHola,
Eliminarcreo sería más sencillo aplicar un formato condicional seleccionando la celda que quieres 'pintar' y aplicando la regla del formato sobre el valor (x o I) de la celda de la Hoja1.
Saludos
hola ismael primero felicitarte por tu excelente foro, mi problema es el siguiente quiero habilitar una celda siempre y cuando cumpla con la condicion de que se diligencie primero la anterior. solo necesito textos.
ResponderEliminarejemplo
tengo 6 celdas
1. B1 para poder diligenciar esta celda requiero que la celda A1 este diligenciada,, que para la celda C1 debe estar diligenciada la B1,, QUE PARA LA D1 debe estar diligenciada la C1 Y asi sucesivamente como haria??
Hola,
Eliminarselecciona la primera celda B1, y entra en la validación de datos personalizada:
=SUMA(A1)>0
tras Aceptar, podrás arrastrar.(este valdrá si son valores numéricos).
Para cualquier tipo de valor introducido (texto, número...), la fórmula podría ser:
=CONTARA(A1)>0
Saludos
Hola Ismael..te agradezco tu ayuda y tiempo de antemano.
ResponderEliminarNo consigo dar con el codigo necesario.
Tengo un rango de celdas, en el cual quisiera conseguir que al hacer click con el raton en una casilla me marcara 1/2 oh 0.5, sin quitar raton del objetivo, segundo click y marcara 1 y si hiciese click por tercera vez borrase valores oh 0. Es posible? Y añadiendo color?
Gracias de nuevo. Un saludo.
Hola Sergio,
Eliminarsinceramente, no creo sea posible tal cosa.. o en su caso extremadamente complejo, ya que habría que localizar la posición del cursor, tener un contador de click sobre esa misma posición, además en el tiempo....
Saludos
Hola Ismael, y continuando con este codigo q tengo y que funciona, se le podria añadir una condición para valor 0.5.(Este código marca con ayuda de formato condicional, celda amarilla y valor 1.,si hago click en otra celda y vuelvo a hacer click en la de valor 1 y amarilla, me la vuelve transparente y valor 0)
Eliminarcodigo:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Target, Range("D8:L39,P8:X39,AB8:AJ39,D47:L78,P47:X78,AB47:AJ78")) Is Nothing Then
If Target.Interior.Color = RGB(255, 255, 0) Then
Target.Interior.ColorIndex = xlNone
Target.Value = 0
Else
Target.Interior.Color = RGB(255, 255, 0)
Target.Value = 1
End If
End If
End Sub
Gracias y perdona el tostón, un saludo
Sergio,
EliminarYa te quedó contestada en el otro comentario que lo subiste:
Target.Value=Target.Value-0.5
Saludos
Hola Ismael, estoy desarrollando un programa para puder generar horarios, a partir de un horario mensual, generar un horario semanal tengo un problema puesto que deseo agregar condicionales entonces no se como hacer para que:
ResponderEliminarSi x= 0 o 1 ó 2 ó 3 ocurra
tal vez se hace asi?
If x = 0 or 1 or 2 or 3 Them
estare atento ,
Muchas Gracias!
Hola,
Eliminarmuy cerca, más bien:
If x = 0 or x =1 or x =2 or x =3 Then
Saludos
Estimado Ismael, antes que nada felicitarte por el gran conocimiento que tenes, impresionante.
ResponderEliminarTengo una planilla en donde en la columna H, tengo con la funcion SI, indicado que si la fecha de la columna G es menor al dia de hoy, entonces aparece "VENCIDO", sino "". Necesito una macro para que si de H1 a H10 aparece la palabra "VENCIDO", me tire un alerta y un sonido de windows. Desde ya te agradezco y te felicito nuevamente.
Muchas gracias!
Eliminarpodrías incluir esta macro en la ventana de código de la hoja en cuestión:
Private Sub Worksheet_Change(ByVal Target As Range)
For Each celda In Range("H1:H10")
If celda.Value = "VENCIDO" Then
Beep
MsgBox "valor VENCIDO en celda " & celda.Address
End If
Next celda
End Sub
Espero te sirva u oriente.
Saludos
No pasa naranja... lo pego en "thisworkbook"? disculpa, no tengo conocimientos en macro
EliminarYa pude solucionarlo, como cambio para que en vez de que me aparezca la ubicacion de la celda, me aparezca el contenido de la columna A? en vez de H4, que aparezca el contenido de A4. Si es mucho lio puedo sacarlo, solo con que tire un alerta ya es suficiente.
EliminarOtra cosa, como hacer para que se ejecute automaticamente al abrir el excel?
Millones de Gracias!!! es para un cuartel de Bomberos que me pidio, pero no manejo nada de macros.
Hola Federico.
ResponderEliminarAl abris el editor en la parte iquierda esta el explorador de proyectos ahi podras ver la coleccion de objetos con las que tu libro cuenta, localiza la hoja en donde tienes el formato, das doble clic sobre ella y te mandara una ventana en blaco, en la parte de arriba te aparecen dos lista desplegables, en la primera selecciones WorkSheet y en la seguna lista seleccionas el evento worksheet_change ahi te mandara un bloque donde deberas el codigo que menciona Ismael.
Solo pegas esta parte del codigo de Ismael dentro del bloque que te aparece:
For Each celda In Range("H1:H10")
If celda.Value = "VENCIDO" Then
Beep
MsgBox "valor VENCIDO en celda " & celda.Address
End If
Next celda
o simplemente borras todo y pegas todo el codigo de ismael, funcionara de igual forma.
Espero y me haya explicado bien y sea de tu ayuda.
Saludos!!!
Para activar el editor precionas las teclas Alt + F11
ResponderEliminarmuchas gracias!!!
EliminarYa pude solucionarlo, como cambio para que en vez de que me aparezca la ubicacion de la celda, me aparezca el contenido de la columna A? en vez de H4, que aparezca el contenido de A4. Si es mucho lio puedo sacarlo, solo con que tire un alerta ya es suficiente.
ResponderEliminarOtra cosa, como hacer para que se ejecute automaticamente al abrir el excel?
Millones de Gracias!!! es para un cuartel de Bomberos que me pidio, pero no manejo nada de macros.
Hola Federico,
Eliminarreemplaza
MsgBox "valor VENCIDO en celda " & celda.Address
por
MsgBox "valor VENCIDO en celda " & cells(celda.row,"A").value
Para que se ejecute al abrir el libro añade el mismo código en
'ThisWorkbook' dentro del editor de VB, pero empleando el evento _Open:
Private Sub Workbook_Open()
' aquí el código anterior
End Sub
Saludos!
Hola me podrían ayudar con este problema por favor;
ResponderEliminarDeberás crear una formula con funciones si anidadas que cumplan con las restricciones y condiciones que a continuación se especifican:
1.- En la columna de comentarios deberá aparecer la palabra buena o excelente dependiendo de las ventas por producto.
2.-Para las ventas de lácteos mayores a 6000 se consideran buenas, si las ventas son mayores a 8000 se consideran excelentes.
3.- Para las ventas de verduras mayores a 4000 se consideran buenas, si las ventas son mayores a 6000 se consideran excelentes.
4.- La función lógica sí que utilices para generar los comentarios buena o excelente deberá de funcionar sin importar si el producto es lácteo o es verdura, esto es que si se cambia el nombre del producto de lácteo a verdura el comentario deberá cambiar de acuerdo a los puntos 2 y 3
LA TABLA ES COMO LA SIGUIENTE.
Producto Año Mes Ventas Unidades Vendedor Región Comentario
Lacteo 1997 Dic 7686 5563 Davolio Norte
Verduras 1996 Sep 2956 1242 Buchanan Oeste
Me ayudan por favor
HOLA OZIEL.
ResponderEliminarSI SUPONEMOS QUE EN LA COLUMNA A TENEMOS LOS NOMBRES DE LAS CATEGORÍAS ES DECIR LÁCTEOS Y VERDURAS.EN LA COLUMNA B LOS IMPORTES DE VENTAS Y EN LA COLUMNA C SERA DONDE SALDRÁN LOS COMENTARIOS QUE SE HARÁN EN BASE A LAS FORMULAS PODEMOS USAR LA SIGUIENTE FORMULA ANIDADA.
=SI(A2="LACTEOS",SI(B2>8000,"EXCELENTE",SI(Y(B2>6000,B2<8000),"BUENA","")),SI(A2="VERDURAS",SI(B2>6000,"EXCELENTE",SI(Y(B2>4000,B2<6000),"BUENA","")),""))
ESPERO TE FUNCIONE SALUDOS.
YA TU LA ADECUAS A LA ESTRUCTURA DE TU TABLA QUE SE MENCIONA AL FINAL.
EliminarMuchas Gracias Gilberto me sirvió de mucho tu respuesta
EliminarHola me podrian ayudar, coloco el siguiente codigo y al momento de ingresar un dato, me tira automaticamente la fecha, la pregunta es: al momento de borrar el dato ingresado, la fecha se queda grabada, existe la posibilidad que si la celda este vacia, no se ingrese la fecha.
ResponderEliminarPrivate Sub Worksheet_Change(ByVal Target As Range)
If Not Application.Intersect(Target, Range("D:D")) Is Nothing Then
Range("B" & Target.Row) = Date
End If
End Sub
A sus comentarios.
Muy Agradecido
Hola,
Eliminarpodrías incluir u nuevo condicional
IF Range("B" & Target.Row).value<>"" then Range("B" & Target.Row) = Date
dentro del otro condicional...
Saludos
Gracias Ismael, por el tiempo que te tomas y por tu pronta respuesta, soy nuevo con estos temas de VB, seria mucha molestia, que me podrias compartir como quedaria agregando el nuevo condicional que me proporcionates, dentro del condicional que te envie.
EliminarA tus comentarios, muy agradecido.
saludos,!!
Hola,
Eliminarpodría ser así:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Application.Intersect(Target, Range("D:D")) Is Nothing Then
IF Range("B" & Target.Row).value<>"" THEN Range("B" & Target.Row) = Date
End If
End Sub
lo que condiciona para completar la celda de la columna B correspondiente con la fecha es que ya tenga algo escrito previamente.
Saludos
Buen día Ismael, tu blog es muy bueno, quisiera saber si me puedes ayudar para generar una macro que me convine probabilidad e impacto para calcular la severidad y asignar un color al resultado, ejemplo:
ResponderEliminarIMPACTO * PROBABILIDAD = SEVERIDAD Color
Inferior * Muy Baja = Baja Verde
Menor * Baja = Baja Verde
Moderado * Media = Alta Naranja
Mayor * Alta = Extrema Rojo
Superior * Muy Alta = Extrema Rojo
Agradezco de antemano tu ayuda
Hola Luisa,
Eliminarno creo necesario una macro para obtener el dato, bastaría una fórmula que recupere el dato de 'Severidad'
Tal cual lo expresas paree que se podría emplear un SI condicional o incluso un BUSCARV sobre el impacto, ya que parece que con indicar el Impacto es suficiente para identificar la Severidad
=SI(celdaImpacto="Inferior";"Baja Verde";SI(celdaImpacto="Menor";"Baja Verde";SI(celdaImpacto="Moderado";"alta Naranja";SI(celdaImpacto="Mayor";"Extrema Rojo"; "Extrema Rojo"))))
Saludos
Muchas gracias Ismael, ya lo aplique y me funciono.
ResponderEliminarEste comentario ha sido eliminado por el autor.
ResponderEliminarEste comentario ha sido eliminado por el autor.
ResponderEliminarHola, buen día Ismael, gracias por la aportación. Quisiera que me ayudaras, tengo un archivo de Excel en el que tengo dos hojas, en la hoja 1 tengo una lista con muchos proveedores y cada proveedor tiene muchos materiales distintos, y en la hoja 2 tengo una tabla en la que escribo materiales, lo que quiero es que en la hoja 2 se ponga de color cada celda dependiendo del proveedor, pienso que se podría hacer con una macro ya que como son muchos materiales y proveedores distintos con reglas sería muy tardado. De antemano gracias.
ResponderEliminarHola,
Eliminarle daré una vuelta.. ya que una macro no creo aporte demasiado al asunto.
Un saludo
Buen día, cuál cree que podría ser la posible solución?
Eliminarlo pensaré.. pero a priori un formato condicional parece la respuesta más simple.
EliminarSaludos
Buen día, ¿hay alguna forma en la que en lugar de buscar sólo una palabra busque una las palabras iguales de un rango?
EliminarEn lugar de que diga libre en esta parte “If valor = "LIBRA" Then” busque en un rango de celdas y si esa palabra está en el rango le de color.
Hola Raúl,
Eliminaren un comentario más arriba comentaba a otro lector algo similar, empleando comodines:
If VALOR Like "*COLOR*" Then celda.Interior.Color = 255
Espero te de la idea.
Slds
Hola buen día, tengo un formato condicional y quiero que en automático me solicite un comentario y al terminar de colocar dicho comentario se oculte, posteriormente lo quiero extraer pero en otra pestaña del mismo archivo para generar un pareto ¿como lo puedo lograr?, muchas gracias por su ayuda..
ResponderEliminarLa verdad no lo se, tampoco se utilizar las macro
ResponderEliminarHola Patricia,
Eliminarobviamente tal cosa solo es posible con un desarrollo de programación-macros.
:(
Saludos
Hola Ismael ¿cree que tenga tispo de ayudarme con un ejemplo? ó que textos debo consultar para lograr hacer lo que necesito?
EliminarDe antemano muchas gracias. :)
Hola,
Eliminarquizá te pueda servir este ejemplo como base para lo que quieres:
http://excelforo.blogspot.com.es/2014/11/el-principio-de-pareto-con-tablas.html
El tema del comentarios aquí:
http://excelforo.blogspot.com.es/2016/02/vba-anadiendo-comentario-celda.html
saludos
Hola Ismael
ResponderEliminarTengo un tema que me viene quitando el sueño.
Tengo un validador de contraseña, tengo 3 usuarios, quiero que cada usuario pueda determinadas paginas del form (el form tiene el multipage con 3 pages)
Este es mi codigo pero no me resulta.
Dim password As Variant
Dim DatoEncontrado
Application.ScreenUpdating = False
Sheets("User").Activate
UsuarioExistente = Application.WorksheetFunction.CountIf(Range("A2:B4"), Me.TextBox1.Value)
Set rango = Range("A2:B4")
If Me.TextBox1.Value = "" Or Me.TextBox2.Value = "" Then
MsgBox "Por favor introduce usuario y contraseña", vbExclamation, Blog
Me.TextBox1.SetFocus
ElseIf UsuarioExistente = 0 Then
MsgBox "El usuario '" & Me.TextBox1 & "' no existe", vbExclamation, Blog
ElseIf UsuarioExistente = 1 Then
DatoEncontrado = rango.Find(What:=Me.TextBox1.Value, MatchCase:=True).Address
Contrasenia = Range(DatoEncontrado).Offset(0, 1).Value
If Range(DatoEncontrado).Value = Me.TextBox1.Value And Contrasenia = _
Me.TextBox2.Value Then
Cells(2, 3) = TextBox1
Sheets("Fact").Activate
MsgBox "Acceso Correcto"
'*************Aquí Tengo problemas********************************
If Range("C2").Value = "User_Factura" Then
AFacturaAStock.Show
With AFacturaAStock.MultiPage1
.Page1.Visible = True
.Page2.Visible = False
.Page3.Visible = True
End With
Else
If Range("C2").Value = "User_Stock" Then
AFacturaAStock.Show
With AFacturaAStock.MultiPage1
.Page1.Visible = False
.Page2.Visible = True
.Page3.Visible = False
End With
Else
If Range("C2").Value = "User_Jales" Then
AFacturaAStock.Show
End If
End If
End If
Unload Me
End If
Else
MsgBox "La contraseña es inválida", vbExclamation, Blog
End If
Application.ScreenUpdating = True
Hola,
Eliminarno se ve a priori ningún fallo.. tiene bastante lógica lo que has codificado...
Lo único que se me ocurre es que el TestBox1 lo has reflejado en la hoja 'User' y finalmente activas las hoja 'Fact', por lo que al comenzar tu comparativa de usuario:
If Range("C2").Value = "User_Factura" Then
etc..
en C2 de la hoja 'Fact' no encuentra lo que debería.
Especifica la hoja donde se encuentra plasmado el usuario:
If sheets("User").Range("C2").Value = "User_Factura" Then
...
debería funcionar
Saludos
Hola Ismael quisiera hacerle una consulta sería de gran ayuda. Tengo una base de datos en la hoja 1 como clientes necesitó un código en vba que me aplique un color a la fila respectiva del cliente según una condición de dos variables ejemplo las fechas de cobro tengo excel 2010. Anexo lo hize con el formato condicional pero necesitó hacer lo mismo en vba
ResponderEliminarHola Omar,
Eliminarsolo sigue las indicaciones del post, pero en el condicional añade la segunda condición
IF condición1 AND condición2 THEN ....
De todas formas es algo se puede hacer igualmente sin macros, con el formato condicional.
Un cordial saludo
Este comentario ha sido eliminado por el autor.
EliminarHola Ismael sigo con el problema, en el momento lo he hecho sin macros y funciona perfectamente, ahora quiero hacer una macro que haga lo siguiente. Un ejemplo en la hoja 2 tengo un botón que al darle clic, copie automáticamente los clientes de color amarillo por ejemplo y los pegue en la misma hoja 2.
EliminarAnexo: al hacer este proceso no me toma en cuenta el color de fondo porque lo puse como formato condicional y cuando las pinto manualmente si lo toma en cuenta ¿por qué? por eso mi necesidad de pintar las filas según 2 condiciones, creo que la macro debería llevar primero objeto range para especificar el campo de aplicación y luego los condicionales, ahora no sé si es necesario meterlo en un bucle, necesito ayuda por favor
Hola Omar,
Eliminarel problema de aplicar criterios sobre colores, cuando hay un FC por medio, es que los colores no se identifican normalmente como un formato directo.
Puedes aplicar a tus condiciones lo explicado aquí:
http://excelforo.blogspot.com.es/2014/01/vba-obtener-el-color-de-relleno-o.html
Slds
Hola Ismael Romero buenas tardes, ¿crees me puedas ayudar con una duda?
ResponderEliminartengo un dato que se obtiene de la sumatoria de otras celdas, lo que ocupo es condicionar ése resultado a que no sea menor de 2,500. podrás ayudarme que condicional tengo que hacer o si es por medio de macros. espero tu respuesta gracias.
Hola,
Eliminarno indicas qué quieres mostrar si fuera menor de 2500, pero el condicional sería:
=SI(suma(...)>=2500;suma(...);0)
esto es, si la SUMA es mayor o igual a 2500 devuelve la suma en caso contrario cero.
Saludos
hola Ismael, condicionarlo a que me envíe un mensaje o que cambie a un color diferente.
Eliminar2. la condicional la utilizamos como macro o en la celda?
Hola,
Eliminares una fórmula a introducir en una celda en la hoja de cálculo (sin macros).
Que cambie de color o no lo puedes solucionar aplicando una regla de formato condicional...
Para el envío de mensaje (por mail?, un pop up?) sí se debería emplear programación...
Saludos
Hola ismael , un saludo, no se si me pudieras ayudar con unos datos,, tengo una hoja de excell donde tengo numeros de algunas claves y me gustaria saber si hay forma de que cada que cambia la clave en la lista, se agregue una fila en blanco, los datos son muchos, pero pongo un ejemplo para comprension:
ResponderEliminarCLAVE COLOR FECHA
1 VERDE 1.12.16
1 VERDE 1.12.16
1 VERDE 1.12.16
2 ROJO 1.12.16
2 ROJO 1.12.16
3 CYAN 1.12.16
Hola,
Eliminarun truco sencillo sería aplicar la herramienta de Subtotales, según el campo CLAVE.. para una vez añadidos los subtotales, aplicar un filtro y borrar los textos y fórmulas añadidas.
Otra opción con macros
Slds
Hola me gustaría saber si me pueden ayudar para saber como hacer para validar una lista dependiente de otra cuando luego de usarla cambias el contenido de la primera celda (origen) y te queda mal la dependiente porque tal contenido se correspondía con el primer contenido de la celda de origen. No se me explico.Hay alguna forma de validarlo? Muchas gracias!!
ResponderEliminarHola,
Eliminarsí, te explicaste perfectamente ;-)
Fíjate que cuando hablamos de Validación de datos en realidad estamos restringiendo qué puedo o no escribir en una celda..
Al aplicar una validación de datos condicionada/dependiente estamos marcando un orden natural:
según UNO podré escribir/desplegar en DOS.
En todo caso, salvando ese orden, quizá se podría generar una Validación personalizada con alguna fórmula condicional... aunque eso supondría una doble relación algo confusa.
Es más probable que se encuentre la solución con algo de programación y eventos tipo _Change sobre ambas celdas.
Slds
Hola Ismael, antes de quitarte algo de tiempo con mi pregunta quiero felicitarte por el foro y lo explicativo que eres en él, me ha salvado en más de alguna ocación con las dudas que tengo.
ResponderEliminarMi pregunta es la siguiente, estoy comenzando con el tema de las macros y la que aparece aqui principalmente la utilice para una planilla y funciona perfectamente, el único problema que tengo es que cuando te aparece la opcion de indicar el rango de celdas, si presionar el boton cancelar esto me arroja un error 424 pues requiere un objeto, qué puedo hacer para que cuando presione cancelar sin indicar un rango de celdas no me genere ese error?
Hola!,
Eliminarprueba controlando el error:
Sub formato()
Dim celda As Object
Dim rng As Range
'con INPUTBOX seleccionamos un rango de celdas
On Error Resume Next
Set rng = Application.InputBox("en que rango quieres aplicar el formato??", Type:=8)
On Error GoTo 0
If rng Is Nothing Then
MsgBox "No has seleccionado rango!", vbCritical
Exit Sub
End If
'recorremos cada celda del rango seleccionado
For Each celda In rng
valor = celda.Value
'asignamos colores según el valor de la celda
If valor = "LIBRA" Then
celda.Interior.Color = 65535
ElseIf valor = "PERMISO" Then
celda.Interior.Color = 15773696
ElseIf valor = "GUARDIA" Then
celda.Interior.Color = 255
ElseIf valor = "CONSULTA" Then
celda.Interior.Color = 5296274
End If
Next celda
End Sub
Saludos!!
Hola Ismael,
ResponderEliminarGracias por todo lo compartido. Me ha ayudado.
Una consulta, he realizado 4 macros para la impresión de 15 hojas, que varían en función de un par unos parámetros.
Ahora necesitaría una macro, que me ejecute una de las 4 anteriores, en función del resultado de A1, por ejemplo. Si A1 es 1, ejecutar macro 1, si A1 es 2 macro 2 ....
Me puedes guiar?
Hola Miguel,
Eliminarpodrías crear una macro nueva de control que según la condición llame a una macro u otra de las que ya tienes:
sub nueva()
if range("A1").value=1 then
call macro1
if range("A1").value=2 then
call macro2
end if
end sub
Saludos
Buen día Ismael,
ResponderEliminarSon muy interesantes tus respuestas, por lo tanto agradezco me puedas ayudar.
Necesito una macro para:
Tengo una celda Ej: A1 (donde coloco un valor y este es el numero de decimales, ya que pueden variar). Ejemplo en celda A1 mi valor es 4.
Lo que significa que quiero 4 decimales en otra celda, ejemplo B1.
Adicionalmente si puedo configurar para que ese numero de decimales se me refleje en diferentes celdas, Ejemplo B1, B5, B7 a B15.
Gracias
Hola Anselmo,
Eliminarsi quieres trabajar con el número de decimales (y no solo de formato) que indiques en la celda A1, en las demás celdas, por ejemplo B1, B5, B7 a B15:
=REDONDEAR(número;A1)
Por otro lado, si hablamos de formato solo y no de redondeo real, con la siguiente macro:
Sub formato()
strformat = "#,##0." & Application.WorksheetFunction.Rept(0, Range("A1").Value)
Range("B1,B5,B7:B15").NumberFormat = strformat
End Sub
Saludos
Este comentario ha sido eliminado por el autor.
ResponderEliminarBuenas noches requiero de tu ayuda tengo un control de pago pero quiero que cambie el color del de los nombres de acuerdo a los pagos realizados de la siguiente maner
ResponderEliminarsi suma igual 0 rojo
si suma igual entre 1,2,3... 12 amarillo
si suma igual entre 13, 14, 15... 23 verde
si suma igual a 24 azul
te aclaro las cantidades no llevan decimales.
saludos y muchas gracias.
Pd Los numeros son referenciales.
Hola Tomás,
Eliminarla idea sería aplicar tantas reglas de formato condicional como 'colores'
Aplicaríamos las siguientes reglas de formato condicional:
1 regla: FC - Resaltar reglas - Igual a = 0 con formato rojo
2 regla: FC - Resaltar reglas - entre 1 y 12 con formato amarillo
3 regla: FC - Resaltar reglas - entre 13 y 23 con formato verde
4 regla: FC - Resaltar reglas - igual a = 24 con formato azul
Puedes usar las estándar, o bien os formatos condicionales personalizados
Espero te oriente.
Slds
hola Ismael,
ResponderEliminarhice una macro para trabajar con los datos entregados por el sistema con que trabajamos en mi oficina. Funciona muy bien, pero al final de todo necesito que la fila en que se encuentran los subtotales ("Total 1", "Total 2" y "Total 3") tenga un formato determinado.. no sé como usar el formato condicional, pero me gustaría que fuera parte de la macro para no tener que poner condiciones cada vez que se descarga un nuevo archivo. me puedes ayudar?
Hola Pepita,
Eliminarte recomendaría, para este caso, simplemente usara el asistente para replicar el código que se genera al emplear un formato condicional...
Luego simplemente adáptalo a tu caso (que la celda contenga el texto 'Total').
El código verás que te genera tres líneas donde ajustaras los rangos y poco más...
Espero te oriente.. si necesitas aclarar algo más concreto, házmelo saber
Un saludo
¡ Feliz Navidad 2016 ! Ismael,
ResponderEliminarFelicidades por este espacio de sabiduría compartida..! Excel ente ! :)
Llevo varios día intentando solventar una macro que no termina de funcionar, en base a lo que necesito, a ver si es posible que me ayudes con este problema.
Hoja de excel, con una columna "F" con varios formatos condicionales, que afecta a todas las filas.
Condiciones: "CADUCADAS" (COLOR DE FONDO ROJO)
"RETIRAR" (COLOR DE FONDO AMARILLO)
"FALTA LENTE" (COLOR DE FONDO AZUL OSCURO)
He puesto un Icono de papelera, que le aplico la macro, para que según deseo "limpie" - borre del listado esas celdas que cumplen esas condiciones.
Tengo esta macro que me funciona, pero solo con 1 sola condición.
Serias tan amable de ayudarme a completar las lineas de VBA necesarias para que funcione con el resto de condiciones..
Macro:
Sub ACTUALIZA_STOCK()
Dim RangoFuente As Range
Dim RangoBorrar As Range
Dim Celda As Range
Dim Primero As Boolean
On Error Resume Next
Set RangoFuente = Range("F7:F" & Range("F999999").End(xlUp).Row)
Primero = True
For Each Celda In RangoFuente
If Celda.Value = "FALTA LENTE" Then
If Primero Then
Set RangoBorrar = Celda.EntireRow
Primero = False
Else
Set RangoBorrar = Union(RangoBorrar, Celda.EntireRow)
End If
End If
Next
RangoBorrar.Delete
End Sub
Muchísimas Gracias Ismael por tu tiempo y conocimientos.!
Feliz Navidad !!!
Felices Fiestas para ti (y todos) también!
Eliminarsi entiendo bien quieres borrar aquellas filas que contengan alguno de los textos CADUCADAS, RETIRAR o FALTA LENTE, si es así, cambia la línea:
If Celda.Value = "FALTA LENTE" Then
por
If Celda.Value = "FALTA LENTE" OR Celda.Value = "CADUCADA" OR Celda.Value = "RETIRAR" Then
...
Debería funcionarte.
Un saludo
Estimado Ismael!
ResponderEliminarMuchas Gracias por la Felicitación de Navidad !
Acabo de ver tu Respuesta a mi macro y la he probado y funciona perfectamente. Yo lo intente con "and" pero no iba. Un Millón de Gracias!!
FELIZ NAVIDAD A TODOS !! Y PRÓSPERO AÑO NUEVO 2017
;-)
EliminarUN saludo
Hola amigos. Me podrían ayudar por favor?. El caso es que necesito dar formato condicional a una forma insertada en Excel, me explico, por ejemplo inserto un circulo o un rectángulo etc y necesito cambiar el color dependiendo del valor de una celda. Me pueden ayudar por favor?. Gracias
ResponderEliminarHola Julio César,
Eliminartendrás que asociar a un evento _Change en la ventana de código de la hoja donde se encuentre esa celda donde cambiará de valor y añadir la siguiente macro:
Private Sub Worksheet_Change(ByVal Target As Range)
If Range("A1").Value <= 10 Then
ActiveSheet.Shapes("Rectangulo1").Fill.ForeColor.RGB = RGB(0, 255, 0)
End If
End Sub
El objeto lo he llamado 'REctangulo1"
Slds
Buenas tardes, tengo la siguiente consulta, como puedo utilizar en esta función:
ResponderEliminarApplication.WorksheetFunction.SumIfs (Worksheets("Spotfire DB").Range("G2:G" & final2),, Worksheets("Chart").Range("m2:m" & final2), >= PERIOD_BEGIN, Worksheets("Chart").Range("m2:m" & final2), <=PERIOD_END)
Cuando lo intento me da error y no me arroja ningún resultado, no se como si se pueden utilizar los símbolos de <= o >= en esta función.
Gracias
Hola José Manuel,
Eliminarentiendo PERIOD_BEGIN y PERIOD_END son dos variables que previamente has definido, lo mejor que puedes hacer es incorporar las desigualdades dentro de esa variable; por ejemplo (supongo las variables son fechas):
PERIOD_BEGIN = ">=" & clong(Range("A1").value)
PERIOD_END = "<=" & clong(Range("A2").value)
Luego ya podrías:
Application.WorksheetFunction.SumIfs (Worksheets("Spotfire DB").Range("G2:G" & final2),, Worksheets("Chart").Range("m2:m" & final2), PERIOD_BEGIN, Worksheets("Chart").Range("m2:m" & final2), PERIOD_END)
Saludos
HOLA BUEN DÍA, TENGO UNA BASE DE DATOS ALGO ROBUSTA Y REQUIERO QUE DEPENDIENDO DEL ESTATUS DE LOS CLIENTES SE PINTEN LAS CELDAS DE COLOR. POR EJEMPLO LOS CLIENTES CON ESTATUS A DE ROJO, B DE AMARILLO, C DE NARANJA Y ASÍ RESPECTIVAMENTE. REQUIERO QUE LO HAGAN DE MODO AUTOMÁTICO CUANDO YO COLOQUE EL TIPO DE ESTATUS A CADA CLIENTE, ESPERO ME AYUDEN, SALUDOS
ResponderEliminarHola Karina,
Eliminarestamos hablando de emplear un Formato Condicional donde marques las reglas que necesites.
Seleccionas tu tabla sobre el campo de Estatus y aplicas un formato condicional con regla Es igual a A dándole el formato que requieras, y así repetirías la acción por cada estatus...
También podrías crear una regla de formato condicional personalizado.
Saludos
Hola Buen dia, necesito generar una condicion que sea si ingreso un valor en B9 y al dar clic a la autoforma me de la informacion de celda C7 de hoja 2, como lo podria hacer
ResponderEliminarHola César,
Eliminarcrea una macro:
Sub Macro1()
if sheets("Hoja1").range("B9").value<>"" then
msgbox sheets("Hoja2").range("C7").value
end if
End Sub
Y luego asigna la macro a tu autoforma
Saludos
Buenos días:
ResponderEliminarquería saber si es posible colorear celdas en función del color de otras, me explico
tengo una tabla excel, con filtros, en los cuales he puesto formato condicional por trimestres, rojo para las fechas comprendidas entre el 01/01/216 y el 31/03/2016 etc, ahora lo que quiero es que las celdas de al lado que contienen información y números se coloreen en función del color de la columna fecha, se puede hacer de cualquier forma?(función, macro... etc) si es asi como seria?
un saludo disculpe las molestias
hola
ResponderEliminartengo en una hoja el formulario,otra datos y otra grafico. lo que quiero es que dependiendo del texto de la tabla de datos (dependiente del formulario) cambie el color del relleno de un circulo en la hoja de grafico. por ejemplo que cuando marque abierto en el formulario, la celda ponga abierto y finalmente el relleno del circulo sea verde, lo que no consigo es cambiar el relleno del circulo. soy bastante nuevo en programacion y agradeceria la ayuda
saludos
edu