Formato condicional bordes

Oye otra preguntota para poder hacer los bordes resulta que tengo una "matriz" por ejemplo A2=a A3:b A4=e A5=f etc... Y tengo B1 = a, C1 = b, D1=3, E1=4
pero lo que quiero que haga mi formato condicional es que si B1 tiene un valor y ademas A2 tiene valor en la celda B2 me ponga el borde, pero si uno no cumple con la condición que no me ponga nada, no se como hacerlo, ¿con fórmula o macro y como?
Para explicarme mejor te pongo otro ejemplo:
Si A3 y B1 tienen valor el que sea, que en la celda B3 me ponga el formato
Si C1 y A2 tienen valor, que en la celda C2 me ponga el borde. Pero tiene que cumplir a fuerza esas dos condiciones, si nada más c1 tiene valor y A2 no, no me tiene que poner los bordes. Espero que me hayas entendido
espero que me puedas ayudar, la otra ocasión si resolviste mi duda, pero ahora tengo este otro problemilla y ya he buscado en varios lados. Gracias. Te lo agradecería mucho si me contestaras

1 Respuesta

Respuesta
1
La verdad que no sabía a quien iva dirigida tu pregunta pues de las 3 que has hecho cada una te la hemos contestado uno diferente, pero en fin recojo el testigo y te aclaro tu pregunta, la macro es bien sencilla las condiciones las pones tú, y no importan el numero que necesites, tan solo las incluyes en tu código y excel si comprueba que todas se cumplen seguirá realizando las instrucciones que le pongas, quedaría algo así acomodaló a tus necesidades, de todas maneras te la explico:
Private Sub validar()
'Nos situamos en la celda que queremos cambiar los bordes
Range("B3").Select
'Ponemos las condiciones
If Range("A3").Value = "5" And Range("B1").Value = "A" Then
'Si se cumple aplicamos los bordes
With Selection.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.Weight = xlThick
.ColorIndex = 3
End With
With Selection.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.Weight = xlThick
.ColorIndex = 3
End With
With Selection.Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.Weight = xlThick
.ColorIndex = 3
End With
With Selection.Borders(xlEdgeRight)
.LineStyle = xlContinuous
.Weight = xlThick
.ColorIndex = 3
End With
End If
End Sub
Si no se cumplen las condiciones pasará a la linea de codigo End If y después terminará la macro End Sub
>Un saludo
>Julio
Hola, Gracias por contestar tan rápido, tu código si me fue de mucha utilidad, aunque en lugar de poner valores exactos o ya establecidos en la condición quiero que ponga. (SI A3 tiene algo y B1 tiene algo) then, ya que los valores irán cambiando, pero no se como indicarle eso, ¿según yo es este símbolo no? <>"" Pero me sale error de compilación, y otra pregunta, ¿hay manera de hacer un ciclo que vaya aumentandome la celda que sirve de condición de uno en uno?, para no hacer tantas líneas de código y al igual que me vaya aumentando de uno en uno la celda hacia abajo de donde se aplicará el borde. Es que son muchísimas celdas a las que aplicaré eso, son 2000 x 254 más o menos a las celdas que aplicaré esta macro. Muchas Gracias, espero tu respuesta
Una aclaración, los dos rangos son independientes, o sea que podemos hacer cumplir las condiciones en una rango (B3=bordes si hay valores en A3 y B1) independiente del otro (C2=bordes si C1 y A2 tienen valores) o tienen que realizarse los dos.
Otra cosa puede que existan celdas sin valor intercalados en todas las filas que tienes que recorrer o cuando por ejemplo en A3 y en C1 estén vacíos que se pare la macro.
>Un saludo
>Julio
Hola, Gracias por contestar y si, los rangos son independientes, ya que están intercalados y si, eso es lo que quiero que cuando A3 y C1 estén vacíos se pare la macro y ya no me haga borde. Algo así, no se si salga bien:
A B C D E
1 algo algo algo nada
2 algo BORDE BORDE BORDE LLANADA
3 algo BORDE BORDE BORDE LLANADA
4  nada         YANADA      YANADA     YANADA    YANADA
y los valores de ("algo") van a acambiar, pero de todas maneras si si tiene algo en A2 y B1 que me ponga en B2 el borde,
Donde dice:: ("YANADA") es donde ya no quiero que me ponga el borde, porque ya no tengo datos, entonces que ya no me ponga los bordes. En sí eso es lo que quiero que haga la macro.
Ahora ya si me has hecho un lio, antes decías que querías ir bajando una celda hacia abajo entiendo que en todas las referencias y ahora me aparece las columna DE con bordes que antes no aparecía. Aclarame así
B3=Borde Sí A3 y B1 tienen valor
C2=Borde Sí C1 y A2 tienen valor
XX=Borde Si XX y XX tienen valor
>Un saludo
>Julio
Hola, es que esos datos de donde dice:: "algo" "algo" ... etc, esos dependen de otra hoja, y van cambiando, osea que pueden variar, lo que te puse primero era como un ejemplo, ya que puede variar si hay o no datos.
Se supone que en otra hoja diferente a la que quiero los bordes, en ella tengo una tabla y yo modifico ahí los datos entonces esos datos con un botón con macro me los pega en la hoja en donde quiero los bordes.
Osea que no te puedo poner todos los bordes porque son como 2000 filas por 250 columnas que quiero que compare para ver si va un borde o no, y lo que no quiero es tener que poner celda por celda, porque pues nunca acabaría, por eso te preguntaba si podía hacer un contador que fuera bajando fila por fila, para hacer aunque sea 250 macros, osea una por columna, o si se puede ir cambiando de fila a fila y de columna a columna para que el macro sepa en donde esta posicionada la celda y así no poner condiciones celda por celda, porque serían muchísimas macros, sino que la macro lo haga solita, pero así con eso que te puse en la otra aclaración así me entenderás más fácil.
Pues no lo que quiero es la relación entre las celdas que condicionantes existen ya te lo he explicado si tomamos una hoja de excel lo quiero ( si sabes la relación) es cuando tengo que aplicar bordes, bajar filas es fácil y tomar variables a los valores también pero tengo que saber donde están esos valores, por eso te puse las condiciones. Me pides en una condición una celda POR ponemos bordes si la contigua por la izquierda y 2 más arriba tienen valor.
Otra condición según tu ejemplo una celda POR ponemos bordes si la de arriba y la otra estará 2 filas por encima y 2 columnas a la izquierda. Es que si no existe relación alguna y los datos aparecen aleatorios en la hoja no tenemos posibilidad de movernos por la hoja no tendríamos referencias.
Mirate tu hoja y comprueba que relación debe de existir entre la que has de poner bordes y las dos celdas que quieres que tengan datos.
>Un saludo
>Julio
Ok, hay te va, te voy a poner otro ejemplo, ¿así cómo dices que te diga okas?
Mira:: primero hay que suponer que ya tenemos estos datos, que son los que jalo de otra hoja, cualquier valor, sea el que sea, ya que varía:
B1,C1,D1,E1 = "valor o algo, dependera de la otra hoja"
A2,A3,A4,A5 = "valor o algo, dependera de la otra hoja"
ahora, las dos celdas a condicionar tienen que tener valor si no no hace borde::
B2 = Borde si A2 y B1 tienen valor
B3 = Borde si A3 y B1 tienen valor
B4 = Borde si A4 y B1 tienen valor
B5 = Borde si A5 Y B1 tienen valor
C2 = Borde si A2 y C1 tienen valor
C3 = Borde si A3 y C1 tienen valor
C4 = Borde si A4 y C1 tienen valor
C5 = Borde si A5 y C1 tienen valor.....
D2 = Borde si A2 y D1 tienen valor
D3 = Borde si A3 y D1 tienen valor
D4 = Borde si A4 y D1 tienen valor
D5 = Borde si A5 y D1 tienen valor... y así sucesivamente
Si estas condiciones no se cumplen no poner ningún borde, para que no sobren celdas con bordes. Espero haber aclarado tu duda
Ya era hora, te das cuenta que en ninguna de tus aclaraciones me habías puesto que las celdas B1, C1 y D1 eran fijas que esas siempre son las mismas y las que cambian son las otras (las del borde y la que otra que van bajando). Ya me he enterado pero te advierto que las únicas columnas que voy a tener en cuenta son B, C y DE no me has hablado que las columnas sean más.
Me pongo con la macro tan solo para esas columnas hasta que la celda de A2, A3, A4... Ax tengan valor si están en blanco se parará la macro.
Si no estas de acuerdo hazme otra aclaración antes de que te la ponga aquí.
>Un saludo
>Julio
Sí así esta bien, esperare a que escribas la macro. Aunque te sigo recordando que no te hablo de más columnas porque el administrador cada día va a cambiar el numero de datos de las columnas, a veces puede ser hasta la DE, a veces hasta la AA, y así, es indefinido, pero creo que ya nos estamos entendiendo, espero tu respuesta, muchas gracias. Saludos
Aquí va tu macro, si necesitas algo más vuelve a preguntar si te sirvió puntúa y finaliza la pregunta.
Private Sub Comprobar_Cambiar_Borde()
Dim celB, celC, celD As String
Dim bol, con, dat As String
Range("B1").Select
celB = ActiveCell.Address
Range("C1").Select
celC = ActiveCell.Address
Range("D1").Select
celD = ActiveCell.Address
Range("B2").Select
bol = ActiveCell.Address
If ActiveCell.Offset(0, -1).Value <> "" And Range(celB).Value <> "" Then
With Selection.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.Weight = xlThick
.ColorIndex = 3
End With
With Selection.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.Weight = xlThick
.ColorIndex = 3
End With
With Selection.Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.Weight = xlThick
.ColorIndex = 3
End With
With Selection.Borders(xlEdgeRight)
.LineStyle = xlContinuous
.Weight = xlThick
.ColorIndex = 3
End With
End If
Range("C2").Select
con = ActiveCell.Address
If ActiveCell.Offset(-1, 0).Value <> "" And Range(celC).Value <> "" Then
With Selection.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.Weight = xlThick
.ColorIndex = 3
End With
With Selection.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.Weight = xlThick
.ColorIndex = 3
End With
With Selection.Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.Weight = xlThick
.ColorIndex = 3
End With
With Selection.Borders(xlEdgeRight)
.LineStyle = xlContinuous
.Weight = xlThick
.ColorIndex = 3
End With
End If
Range("D2").Select
dat = ActiveCell.Address
If ActiveCell.Offset(-1, 0).Value <> "" And Range(celD).Value <> "" Then
With Selection.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.Weight = xlThick
.ColorIndex = 3
End With
With Selection.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.Weight = xlThick
.ColorIndex = 3
End With
With Selection.Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.Weight = xlThick
.ColorIndex = 3
End With
With Selection.Borders(xlEdgeRight)
.LineStyle = xlContinuous
.Weight = xlThick
.ColorIndex = 3
End With
End If
Range(bol).Select
Do While ActiveCell.Offset(0, -1).Value <> ""
ActiveCell.Offset(1, 0).Select
bol = ActiveCell.Address
If ActiveCell.Offset(0, -1).Value <> "" And Range(celB).Value <> "" Then
With Selection.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.Weight = xlThick
.ColorIndex = 3
End With
With Selection.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.Weight = xlThick
.ColorIndex = 3
End With
With Selection.Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.Weight = xlThick
.ColorIndex = 3
End With
With Selection.Borders(xlEdgeRight)
.LineStyle = xlContinuous
.Weight = xlThick
.ColorIndex = 3
End With
End If
Loop
Range(con).Select
Do While ActiveCell.Offset(0, -2).Value <> ""
ActiveCell.Offset(1, 0).Select
con = ActiveCell.Address
If ActiveCell.Offset(0, -2).Value <> "" And Range(celC).Value <> "" Then
With Selection.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.Weight = xlThick
.ColorIndex = 3
End With
With Selection.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.Weight = xlThick
.ColorIndex = 3
End With
With Selection.Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.Weight = xlThick
.ColorIndex = 3
End With
With Selection.Borders(xlEdgeRight)
.LineStyle = xlContinuous
.Weight = xlThick
.ColorIndex = 3
End With
End If
Loop
Range(dat).Select
Do While ActiveCell.Offset(0, -3).Value <> ""
ActiveCell.Offset(1, 0).Select
dat = ActiveCell.Address
If ActiveCell.Offset(0, -3).Value <> "" And Range(celD).Value <> "" Then
With Selection.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.Weight = xlThick
.ColorIndex = 3
End With
With Selection.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.Weight = xlThick
.ColorIndex = 3
End With
With Selection.Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.Weight = xlThick
.ColorIndex = 3
End With
With Selection.Borders(xlEdgeRight)
.LineStyle = xlContinuous
.Weight = xlThick
.ColorIndex = 3
End With
End If
Loop
End Sub
>Un Saludo
>Julio
Perfecto, nos hemos entendido, no creí que el código fuera tan complicado, no le entiendo muy bien, ahora lo tengo que analizar para poder adaptarlo a mi hoja, ya que a ti te lo dije así para que me entendieras, y probarlo, pero ahora lo tengo que adaptar hasta la columna "IT" y empiezo desde la columna E en lugar de la B. y comparo con E5, F5, G5, H5, etc. hasta llegar a IT5 en lugar de lo que te dije (B1, C1, D1...).. Osea son como 250 columnas, ¿va a ser mucho código verdad? Pero no importa, si funciono. Y desde me empieza a hacer los bordes es desde E10 en lugar de B2. Si pudieras poner uno que otro comentario me ayudaría mucho para poder modifcarlo yo, ya que ya te di mucha lata, supongo que hasta arto debes estar je je y sería demasiado pedirte que pusieras todo el código que yo necesito Espero a que contestes para ahora sí finalizar.
Efectivamente es mucho pedirme que yo te haga el código, además la única forma de aprender es haciendo, no dejándote hacer... como pista debes crear tantas variables como celdas a las que volver para hacer los Loop y otras para las referencias.
Si que tienes trabajo, sí, que la paciencia guíe tu camino... jajajajaja.
Como ya te funcionó y ya sabes por donde va la cosita, te agradecería que puntuases y cierres la pregunta.
>Un saludo
>Julio

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas