Excel: extender automáticamente el formato condicional a una nueva fila agregada encima de los datos

Excel: extender automáticamente el formato condicional a una nueva fila agregada encima de los datos

Tengo un montón de valores en varias filas y columnas. Están estructurados de modo que cada fila muestra los datos de un mes en particular y los valores más recientes están en la parte superior. En consecuencia, cuando lo actualizo con nuevos datos, inserto una nueva fila encima de los datos existentes.

¿Cómo puedo asegurarme de que las reglas de formato condicional que apliqué al rango anterior se apliquen al rango nuevo (con una fila más)? Intenté usar tablas o rangos con nombre, pero como agrego la fila encima de los datos antiguos, Excel no extiende automáticamente el rango con nombre/la tabla.

editar: Esos son los datos existentes

ingrese la descripción de la imagen aquí

Y quiero agregar enero (marcado en rojo) a esto. Si cada subcategoría tuviera una fila vacía encima (como la fila 9), podría solucionarlo, pero desafortunadamente ese no es el caso (ver fila 5).

ingrese la descripción de la imagen aquí

Respuesta1

Teniendo en cuenta su estructura de datos, creo que sólo puede alcanzar lo que desea utilizando VBA. Creé algo similar a su estructura de datos y escribí un script que se ejecuta cada vez que se agregan filas.

  1. Guarde su archivo comoLibro de trabajo habilitado para macros de Excel (.xlsm)* Libro de trabajo habilitado para macros de Excel (*.xlsm)
  2. Abra el editor VBA por Ctrl+F11
  3. En el Editor VBA, haga doble clic en su hoja en el panel del lado izquierdo.
  4. Pega este código:
Hoja de trabajo secundaria privada_Cambio (objetivo por valor como rango)
  Atenuar iTargRowsCnt mientras sea largo
  Atenuar oFCond como condición de formato
  Dim sFCondRanges() como cadena
  Atenuar mientras dure
  Dim blnFCondRangeModificado como booleano
  Dim sNewAppliesTo como cadena

  Si Target.Address = Target.EntireRow.Address Entonces
    iTargRowsCnt = Destino.Rows.Count
    Para cada ocasión en mí.UsedRange.FormatConditions
      sFCondRanges() = Dividir(oFCond.AppliesTo.Address, ","")
      Para i = LBound(sFCondRanges) a UBound(sFCondRanges)
        Si no es Intersect(Me.Range(sFCondRanges(i))(1), Target(1).EntireRow.Offset(iTargRowsCnt)) no es nada, entonces
          sFCondRanges(i) = Rango(Rango(sFCondRanges(i)), Rango(sFCondRanges(i)).Desplazamiento(-iTargRowsCnt)).Dirección
          blnFCondRangeModified = Verdadero
        Terminara si
      Siguiente yo
      Si blnFCondRangeModified entonces
        Para i = LBound(sFCondRanges) a UBound(sFCondRanges)
          sNewAppliesTo = sNewAppliesTo & sFCondRanges(i) & ","
        Próximo
        sNewAppliesTo = Izquierda(sNewAppliesTo, Len(sNewAppliesTo) - 1)
        oFCond.ModifyAppliesToRange Rango(sNewAppliesTo)
        blnFCondRangeModified = Falso
        sNewAppliesTo = ""
      Terminara si
    Siguiente 'oFCond
  Terminara si

Subtítulo final

Este código se ejecutará automáticamente cada vez que inserte filas. Pero tenga cuidado al utilizar VBA. Guarde con más frecuencia, puede ocurrir algo inesperado, aunque intenté mitigar los riesgos. Por ejemplo, es difícil diseñar un código que funcione bien con la funcionalidad Deshacer. En este caso, los formatos condicionales se distorsionarían si insertara filas y luego usara Deshacer.

Respuesta2

Yo simplemente me quedaría con los rangos. Incluya una fila adicional en la parte superior al aplicar el formato condicional, luego ocúltela o haga lo que quiera visualmente con ella (yo anotaría en algún lugar su propósito como fila de búfer personalmente, para que no se elimine por error).

Otro método sería copiar la fila superior y luego pegarla como formato sobre la nueva fila (no en una computadora en este momento, es necesario verificar si esto funciona para el formato condicional o no) . EDITAR: se confirmó que funciona para el formato condicional en O365 Business Plus: Excel 2016.

Respuesta3

use el rango 1:1000, puede cambiar al rango completo (A1:AZ1000, o algo así), pero se actualizará a medida que agregue más líneas o columnas, por lo que permanecerá en el rango completo

Respuesta4

Después de luchar con un desafío similar, descubrí que simplemente hacer referencia al nombre de la tabla en la entrada "Aplicar a:" se ajusta automáticamente a cualquier cambio en la tabla, incluida la adición de líneas :).

información relacionada