Mantener las celdas iguales al ejecutar una macro
ResueltoPhilbert29 Mensajes publicados 48 Fecha de registro Estado Miembro Última intervención -
Hola,
estoy creando una macro. Sé cómo hacerlo. Bueno, no del todo, ya que estoy recurriendo a ustedes. :-)
Durante la macro, quiero hacer una clasificación. Pero algunas celdas tienen los caracteres en rojo, otras en verde. Cuando miro lo que ha dado la macro, encuentro los colores, pero no en las celdas correctas.
¿Qué estoy haciendo mal?
Gracias por sus respuestas
- Copiar texto de una hoja a otra sin 0 cuando está vacío
- Valor predeterminado en una celda al añadir una fila
- Eliminar el texto de una celda y mantener solo los números
- mantener solo los números o letras de una celda
- Salir de una celda al introducir datos
- eliminar líneas en blanco dentro de una celda
13 respuestas
-
Gracias Bruno
He conseguido. He estado tocando la macro a partir de tu información y funciona.
No sabría muy bien cómo lo hice, pero el resultado está ahí.
Otra vez, gracias.
-
Hola,
Si puedes mostrarme :
tu código de ordenación
cómo se aplican los coloreste puedo decir exactamente dónde se atasca...
-
-
Reanudando...
Gracias por la captura, es muy ilustrativa
Y aquí podemos ser mucho más precisos.Lo que observas confirma en un 99% lo siguiente:
Estás ordenando los valores, pero NO toda la gama (o no está correctamente vinculada)
El error clásico en VBA
Muy a menudo, tenemos un código del tipo:
Range("B2:B20").Sort Key1:=Range("B2"), Order1:=xlDescendingEso solo ordena la columna de puntajes
PERo NO los nombres al lado
Lo que hay que hacer
Debes ordenar toda la zona, por ejemplo:
Range("A2:B20").Sort Key1:=Range("B2"), Order1:=xlDescending, Header:=xlNo
Aquí:los nombres
los valores
los colorestodo permanece alineado
Versión limpia (recomendada)
Aún mejor:
With ActiveSheet.Sort .SetRange Range("A2:B20") .SortFields.Clear .SortFields.Add Key:=Range("B2:B20"), Order:=xlDescending .Header = xlNo .Apply End WithPrueba simple
Para verificar en tu caso:
Toma tu tabla
Haz un ordenamiento manual en Excel (menú Datos → Ordenar)
Si todo queda bien → tu VBA es el problema
Si también se rompe → problema de estructura
-
-
¿Por qué no funciona?Cuando haces:
pegado especial → valores
Excel copia:
los números
el texto
NO los formatos (por lo tanto, no los colores)Entonces:
las puntuaciones son correctas
los nombres son correctos
los colores permanecen los de antesLAS SOLUCIONES (según tu necesidad)
Solución 1 — Copiar CON los formatos (lo más simple)En lugar de:
Pegado especial → Valores
haz:
Pegado especial → Valores + formatos
Solución 2 — Copiar únicamente los formatos después
Pegar los valores
Luego hacer:Pegado especial → Formatos
LA VERDADERA BUENA MÉTODO (recomendado)
No copies más en absoluto
Haz tu ordenación directamente sobre la tabla final
Ejemplo:
Trabajas directamente en las columnas 4-5
Haces la ordenación sobre esoAsí:
sin más copias
sin problemas de colorSi quieres
Te puedo:
corregir tu macro completa
Envíame tu código
-
De hecho, te voy a pedir que corrijas mi macro.
Para que lo sepas, y quizás esa sea la razón, el valor de las celdas proviene de otra hoja.Te envío, por lo tanto, la hoja 1, la hoja 2 con la indicación para una celda de la fórmula (las otras debajo son similares y utilizan la macro que desesperadamente no quiere conservar los colores correctos.
Y
por supuesto, la macro.
Gracias
-
¡Gracias!
Tus errores:
Tu macro hace esto:
Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats
Problema:
Copias los valores + formatos numéricos
PERO NO los colores de fuenteY hay un segundo problema
Haces un .Select + Selection
Eso es:
frágil
fuente de errores
innecesarioCORRECCIÓN SIMPLE (tu macro corregida)
Sub Macro4() Dim ws As Worksheet Set ws = ActiveWorkbook.Worksheets("resultados") ' Copia completa (CON colores) ws.Range("G2:H19").Copy Destination:=ws.Range("K2") ' Ordenación limpia With ws.Sort .SortFields.Clear .SortFields.Add Key:=ws.Range("L2:L19"), _ SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal .SetRange ws.Range("K2:L19") .Header = xlNo .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With End Sub
IMPORTANTE (en TU caso específico)Dices:
los valores vienen de otra hoja
Entonces:
los colores NO vienen de las fórmulas
ya están en G:Hpor lo tanto, la copia completa es la buena solución
Si quieres ir más allá
También puedes:
automatizar los colores según la puntuación (mucho más robusto)
o
simplificar todo tu sistema (menos columnas intermedias)Ya estás muy cerca de algo limpio
Si necesitas ayuda, ¡dímelo!
-
Buenas tardes
Definitivamente, no lo estoy logrando, sea cual sea el método.
No consigo fijar el color para las 2 celdas lado a lado.
Si funciona para el color, entonces los valores de los números son erróneos y si los números son correctos, los colores verdes y rojos se mueven por todos lados, ¡y eso agrega más confusión!?https://docs.google.com/spreadsheets/d/1G8uUYFA4qVpF71UWx_v9nc_Y3SZhTgeAW921CxSoJkk/edit?usp=sharing
Te dejo el enlace del archivo. Si puedes escribir la macro. Gracias
-
Hola,
Ok, entiendo tu frustración... y voy a ser directo contigo:
Estás luchando contra Excel en vano, porque tu enfoque actual es inestable por naturaleza.
Pero vamos a solucionar esto de una vez por todas.
En cuanto tenga un momento, te daré otro método para reformular tu hoja. ¡Hasta luego!
-
Re hola,
El verdadero problema de fondo
Tú haces:
Fórmulas entre hojas
Colores manuales
Una copia
Un ordenamientoResultado:
ya sea que los valores sean correctos
o que los colores sean correctos
nunca los dos al mismo tiempoEs NORMAL, no es un error de tu parte.
LA solución robusta (la que funciona al 100%)
Dejamos de copiar completamente los colores
Y hacemos esto correctamente:
Principio
Los colores deben depender de una regla
NO de un copiar/pegarPaso 1 — ELIMINAR los colores actuales
En tu hoja de resultados:
quita todos los colores manualesPaso 2 — Formato condicional
En la columna de las puntuaciones (ej: L2:L19):
Regla 1 (rojo)
= L2 < 10Regla 2 (verde)
= L2 >= 10Aplicar a:
K2:L19 (para colorear nombre + puntuación juntos)Paso 3 — Macro SIMPLIFICADA (sin copia de formatos)
Aquí está TU macro limpia:
Sub Clasificación_Limpia() ``` Dim ws As Worksheet Set ws = ThisWorkbook.Worksheets("resultados") ' Copiar únicamente los valores (¡no los formatos!) ws.Range("K2:L19").Value = ws.Range("G2:H19").Value ' Ordenar With ws.Sort .SortFields.Clear .SortFields.Add Key:=ws.Range("L2:L19"), _ Order:=xlDescending .SetRange ws.Range("K2:L19") .Header = xlNo .Apply End With ``` End Sub
Por qué funciona (y por qué a ti te falla)Antes:
copiabas colores → se desajustaban
o los perdías → incoherenciaAhora:
copias únicamente los datos
los colores se recalculan automáticamente
el ordenamiento no rompe nadaResultado final
Puedes:
ordenar 100 veces
cambiar los valores
volver a ejecutar la macroLos colores estarán SIEMPRE correctos
-
Hola,
¿En qué hoja estás haciendo la clasificación? Al leer tu código, te basas en las columnas J y K que no contienen color. Explica exactamente qué quieres hacer.
Daniel
-