3 votos

Excel: formatear de forma condicional una celda utilizando el formato de otra celda de concordancia de contenido

Tengo una hoja de cálculo de Excel, donde me gustaría ser capaz de crear una "clave" de formato de celdas con valores únicos, y luego en otra hoja de formato de celdas utilizando la tecla de formato.

Así, por ejemplo, mi clave es el siguiente, con un valor por celda y la visual de formato indicado en paréntesis:

A (red background)
B (green background)
C (blue background)

Así que en una hoja (o en un rincón remoto de la hoja actual-lo que es mejor). Luego, en un área en la que me marca para el formato condicional, puedo escribir una de esas tres letras y tienen la celda donde he escrito que visualmente con formato de acuerdo a la clave. Así que si yo tipo "B" en una de las celdas con formato condicional, se pone un fondo verde.

(Tenga en cuenta que estoy usando fondos aquí únicamente para facilitar la explicación: lo ideal sería que quiero tener todos los visual de formato copiado, ya sea color de primer plano, color de fondo, el peso de la fuente, bordes, o lo que sea. Pero me quedo con lo que puedo llegar, obviamente.)

Y sólo para hacer de extra-difícil-si puedo cambiar el formato de la clave, que el cambio debe reflejarse en las celdas que hacen referencia a la clave. Por lo tanto, si cambio la "B" formato de la clave de un fondo verde para un fondo púrpura, cualquier "B", en la hoja principal debe cambiar al nuevo color. Asimismo, es posible agregar o quitar valores de la clave y los cambios aplicados a los principales conjunto de datos.

Estoy de acuerdo con el formato de actualización en clave de cambio que se acciona mediante un botón o algo así. Sospecho que si nada de esto es posible que se requieren VBA, pero nunca lo he utilizado así que no tengo ni idea de por donde empezar, si ese es el caso. Tengo la esperanza de que es posible sin VBA.

Sé que es posible utilizar varios formatos condicionales, pero en mi caso de uso aquí es que estoy tratando de crear la capacidad para alguien que no está familiarizado con el formato condicional. Me gustaría dejarles ser capaz de definir una clave de actualización si es necesario, y mantener truckin' sin mí tener que volver a escribir la hoja de cálculo de reglas de formato para ellos.

--- ACTUALIZACIÓN ---

Así que creo que estaba un poco confuso acerca de mi solicitud original. Déjame intentarlo de nuevo con una imagen.

Excel screeshot

La imagen muestra la "clave" de la izquierda, donde los valores y los estilos se definen mediante el teclado y el mouse. A la derecha, puede ver los datos que deben tener el formato para que coincida con la clave.

Por lo tanto, si se escribe una "C" en una celda en el área de Datos, debe ser azul de copia de seguridad. Además, si puedo cambiar el formato de "C" en la Clave para tener un fondo púrpura, todas las "C" de las células debe cambiar de azul a púrpura. Para más locura, si puedo añadir más a la Clave (por ejemplo, "D" con un fondo amarillo), a continuación, cualquier "D" de las células va a ser de estilo para que coincida; si puedo eliminar una entrada de Clave, a continuación, valores coincidentes en el área de Datos debe volver a los valores predeterminados de estilo.

Así. Es que más claro? Es posible, en su totalidad o en parte? No tengo que usar el formato condicional para esto; de hecho, en este momento tengo la sospecha de que probablemente no debería decir. Pero estoy abierto a cualquier enfoque!

3voto

SeanC Puntos 2635

Este utiliza las celdas de A1 a establecer la condición de las células en D1:D9 - modificar los rangos para adaptarse a sus necesidades:

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)

If Target.Address = "$A$1" and Sh.Name="Sheet1" Then
    Sheets(1).Range("D1:D9").FormatConditions(1).Font.Color = Target.Font.Color
    Sheets(1).Range("D1:D9").FormatConditions(1).Interior.Color = Target.Interior.Color
End If

End Sub

Después de cambiar el color, entonces usted tendrá que cambiar el celular por la edición de la misma, y presionando la tecla enter (para que el cambio se desencadena el evento)
el formato de las condiciones en que están ordenados por el orden en el que se aplican las reglas. Hay muchos más cambios que se pueden aplicar, sólo tiene que añadir otra .FormatConditions(1).Whatever = Target.Whatever el código

Este código no establecer condición alguna, se acaba de modificar la(s) que están allí. Las condiciones están numeradas en el orden de las reglas se muestran en la pantalla

si no desea utilizar el formato condicional, y sólo el color de las células, entonces usted puede recorrer cada célula de esta manera:

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)

If Intersect(Target, Range("A:A")) Is Nothing Or Sh.Name <> "Sheet1" Then Exit Sub
' exit if not in key range (formatting key is A:A on sheet1
If VarType(Target) > vbArray Then Exit Sub
' if multiple cells are changed at once, then exit, as i'm not going to fight with multi cell change

Dim TargetRange As Range
Dim lCell As Object

Set TargetRange = Sh.Range("D1:D9")
' changing cells in this area

For Each lCell In TargetRange.Cells
    If lCell.Value = Target.Value Then
    ' only change cells that match the edited cell
        lCell.Font.Color = Target.Font.Color
        lCell.Interior.Color = Target.Interior.Color
        ' copy whatever you feel needs to be copied
    End If
Next

End Sub

0voto

Eric A. Meyer Puntos 118

He aquí una extensión de lo que Sean hizo (sólo mostrando el interior de la Sub):

 If Intersect(Target, Range("A:G")) Is Nothing Or Sh.Name <> "Sheet3" Then Exit Sub
' exit if not in key range (formatting key is A:A on sheet1
If VarType(Target) > vbArray Then Exit Sub
' if multiple cells are changed at once, then exit, as i'm not going to fight with multi cell change

Dim KeyRange As Range
Dim TargetRange As Range
Dim lCell As Object
Dim kCell As Object

Set KeyRange = Sh.Range("A1:A10")
' formatting key is here
Set TargetRange = Sh.Range("D1:F9")
' changing cells in this area

For Each kCell In KeyRange.Cells
 If kCell.Value <> "" Then
  For Each lCell In TargetRange.Cells
    If lCell.Value = kCell.Value Then
    ' only change cells that match the edited cell
        lCell.Font.Color = kCell.Font.Color
        lCell.Interior.Color = kCell.Interior.Color
        ' copy whatever you feel needs to be copied
    End If
  Next
  End If
Next
 

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X