Insertar filas y completar / replicar valores

Entonces … he buscado mucho sobre cómo hacerlo y aunque puedo hacer que funcione una parte de él, parece que no puedo entender cómo hacer que funcionen todas las piezas

Mi información inicial es similar a la siguiente y me dice cuántas filas necesita cada valor en la columna de título (por ejemplo, Value1 tendrá 3 filas, Value2 tendrá una fila, etc.)

Title Audit Period Target Count Value1 2013-Q1 3 Value2 2013-Q1 1 Value3 2013-Q2 3 Value4 2013-Q3 4 Value5 2013-Q4 2 

Me gustaría tener, a través de VBA, una forma de hacer clic en un button y formatear / completar la información anterior de la siguiente manera:

 Title Audit Period Value1 2013-Q1 Value1 2013-Q1 Value1 2013-Q1 Value2 2013-Q1 Value3 2013-Q2 Value3 2013-Q2 Value3 2013-Q2 Value4 2013-Q3 Value4 2013-Q3 Value4 2013-Q3 Value4 2013-Q3 Value5 2013-Q4 Value5 2013-Q4 

No me importa dónde se colocan los datos transformados … el código puede sobrescribir los datos de inicio o colocar los resultados en una pestaña separada … o lo que sea.

Gracias por cualquier ayuda que pueda ofrecer.

Aquí está el código de VBA para hacerlo: solo necesita modificar los nombres de las hojas y los ranges de inicio:

 Sub MultiplyRows() Dim rngSource As Range, rngTarget As Range Set rngSource = Sheets("Sheet1").Range("A2") Set rngTarget = Sheets("Sheet2").Range("A2") While rngSource <> "" rngSource.Resize(, 2).Copy rngTarget.Resize(rngSource.Offset(, 2), 2) Set rngTarget = rngTarget.Offset(rngSource.Offset(, 2)) Set rngSource = rngSource.Offset(1) Wend End Sub 

Alternativamente, puede hacer esto solo con fórmulas:

enter image description here

La idea es usar algunas columnas auxiliares para contar y recuperar los datos. En detalle, tengo 3 columnas auxiliares con la siguiente lógica:

  • "Fila de origen", columna E: esta es la fila real en los datos de origen a los que se refiere esta fila de destino. La "lógica de columna" es que es el mismo número que en la fila anterior, a less que en la fila de arriba el contador sea igual al recuento máximo. Por lo tanto, la fórmula en E5 es: =IF(F4=G4,E4+1,E4) . También necesita "inicializar" la columna, es decir, en E4 utilicé: =ROW(A3)+1
  • Número máximo: el número de filas requeridas para la fila fuente actual. F4: =INDEX(C:C;E4)
  • Recuento: este es el contador, la frecuencia con la que la fila fuente actual ya estaba llena. La lógica es simplemente boost el valor de arriba en uno, a less que la fila fuente en esta columna sea diferente a la última fila. G4: =IF(E4<>E3,1,G3+1)

Ahora solo necesita usar el número almacenado en la columna E como argumento para una function INDEX, es decir, copie esta fórmula de H4 hacia abajo y también a la columna I: =INDEX(A:A,E4) .

Ahora solo necesita copyr las fórmulas para las 5 columnas hasta el número requerido de filas. (Recuerde copyr la columna E comenzando en la fila 5, pero las columnas F: I en la fila 4.