En realidad necesitamos repetir filas, pero el número de repeticiones está parametrizado por otro campo. Partimos de un rango donde la primera columna es un valor que necesita ser repetido el número de filas que nos indica la segunda columna. Es una duda que planteaba un lector del blog:
Hola, a ver si me podeis ayudar,
quiero repetir cada fila el número de veces que hay en cada celda que le corresponde.
Es decir tengo una variable Nombre (Columna A) y otra Frecuencia (Columna B)
Nombre Frecuencia
A 5
B 8
C 25
D 12
… ….
La idea es repetir la la Fila A, 5 veces, la fila B, 8 veces y así sucesivamente.
En realidad es lo inverso a crear una tabla de frecuencias desde una matriz de datos.
Tenía en la nevera un truco de Excel que puede hacer esta tarea y que también subiré al blog en los próximos días, en realidad esta entrada y la siguiente son modificaciones de un anterior truco Excel que subí al blog. En esta imagen podéis ver lo que hace:
La macro que lo realiza es esta:
Sub rango_columnas2() Dim rango, celda As Variant Dim i As Long, j As Long, k As Long Dim col As Long rango = Application.InputBox(Prompt:="Seleccione el rango a repetir sin cabeceras", Type:=8) Set celda = Application.InputBox(Prompt:="Seleccione donde quiere poner los datos", Type:=8) 'Esta es la parte que permite ubicar la salida celda.Select k = 0 'Esto recorre el rango For i = 1 To UBound(rango, 1) For j = 1 To rango(i, 2) ActiveCell.Offset(k, 0).Value = rango(i, 1) k = k + 1 Next Next End Sub
Se ejecutan 2 cuadros con el método Application.InputBox, en el primero seleccionamos el rango de datos sin cabeceras y en el segundo indicamos donde queremos que salgan los datos. Se trata de recorrer el rango y pararse a repetir las primera columna del rango tantas veces como lo indica la segunda columna. Un proceso sencillo con Visual Basic pero que sería interesante replicar con funciones de Excel, en este caso creo que INDIRECTO sería la más adecuada. En el siguiente enlace podéis descargar el ejemplo:
En siguientes fechas daré más vueltas a este bucle para realizar transposiciones de datos. Saludos.
Hola,
Quiero hacer algo similar a esto, pero no se utilizar marcos, ¿habría alguna manera de poder hacerlo?
Muchas gracias, tu blog es genial, me ayuda un montón!!!!
Un saludo
Hola,
Se podría alargar el rango de selección de las columnas??
Saludos!!