Cómo generar una secuencia 1,2,3,... en Excel con cada miembro repetido N veces

Cómo generar una secuencia 1,2,3,... en Excel con cada miembro repetido N veces

Consideremos una secuencia: 1,2,3,4,5.... Obviamente, es fácil de crear en Excel. Pero, ¿cómo crearías una secuencia derivada, donde cada uno de los miembros de la secuencia original aparece N veces seguidas?

Para N=3 1,1,1,2,2,2,3,3,3,4,4,4,...etc.

Terminé copiando la columna de 1 con la función de agregar especial para pegar deslizándola N filas hacia abajo en cada ronda. Sin embargo, esto está lejos de ser una buena solución.

Gracias por tus ideas.

Respuesta1

La solución más sencilla para esto es utilizar una fórmula normal de Excel.

Si estás comenzando en A1, coloca esta fórmula y luego cópiala:

=ROUNDUP(ROWS(A$1:A1)/3,0)

REDONDEOredondea un número hastanortelugares decimales. En este caso,nortese establece en 0 para que Excel redondee al número entero más cercano.

FILAScuenta el número de filas en un rango. Ajuste la referencia de alcance según su ubicación inicial. Al copiar y pegar, Excel se encargará de los ajustes para las otras celdas.

Nota: El signo del dólar aquí esimportante. Bloquea la referencia para el inicio del rango para quesiempreestar en la fila inicial de su rango (o, más correctamente, en la fila de la primera celda en la que coloca la fórmula, así que comience con esto en la primera fila de su rango) sin importar cómo copie/pegue la fórmula. Sin esto, su fórmula se romperá cuando la copie. Entonces, cambia las letras y los números según dónde estará tu primera celda, pero deja ese signo de dólar allí.

ingrese la descripción de la imagen aquí

/3está ahí para dividir el recuento de FILAS por tres. Dado que esto está dentro de la función REDONDEAR y está configurada en 0 decimales, todos los resultados se redondearán al número entero más cercano. Una vez que la fórmula se completa en el resto de la columna, esto dará como resultado que cada número se repita 3 veces. Para obtener una tasa de repetición diferente, cambie 3 por un número diferente.


Si estás buscando hacer estoal otro lado deafila, en lugar deabajoacolumna(por ejemplo: en A1, B1, C1,... en lugar de A1, A2, A3,...) necesitarás usar la función COLUMNAS en lugar de FILAS y ajustar la referencia del rango para que la columna inicial quede bloqueada. en lugar de la fila inicial.

Ejemplo:

=ROUNDUP(COLUMNS($A1:A1)/3,0)

Para una fórmula que funcionará en una filaodiseño de columna, podría usar algo como el siguiente, pero es mejor elegir uno de los anteriores según el diseño que esté usando realmente. Esto también producirá resultados probablemente no deseados si su rango abarca varias filasymúltiples columnas.

=ROUNDUP(COLUMNS($A1:A1)*ROWS(A$1:A1)/3,0)

Para algo que no sea secuencial y/o no numérico, querrás reservar un rango para usarlo como lista de fuentes. Digamos que su lista de valores de origen está en la columna B, comenzando en B1. Para eso, para repetir los valores 3 veces cada uno en la Columna A, usaría esto en A1 y copiaría:

=INDIRECT(CONCATENATE("B",ROUNDUP(ROWS(A$1:A1)/3,0)))

Nota: Esto no se ajustará al movimiento de la columna de origen. Tendrá que corregir manualmente la fórmula, cambiándola "B"para que coincida con la nueva ubicación, si se mueve la columna de origen. Si sus datos de origen comienzan en una fila distinta a la fila 1, deberá modificar un poco la fórmula para agregar el desplazamiento.


Si desea poder ajustar la tasa de repetición, utilice una celda de referencia para el divisor. El siguiente ejemplo comienza con la fórmula anterior y supone que el divisor estará en C1.

=INDIRECT(CONCATENATE("B",ROUNDUP(ROWS(A$1:A1)/C1,0)))

Respuesta2

Uno que encontré funcionó bien para matrices dinámicas:

=ROUNDDOWN(SEQUENCE(count*repeats,,1,1/repeats),0)

por ejemplo, para recuento = 2, con repeticiones = 3

=ROUNDDOWN(SEQUENCE(6,,1,1/3),0)

Produce:

1,1,1,2,2,2

Respuesta3

Para ser flexible y reutilizable para otras situaciones (incluidas funciones como colocar los resultados en filas o columnas, diferentes libros, etc.), el mejor enfoque es utilizar el lenguaje de macros de Excel (VBA). Para comenzar rápidamente, puede registrar los pasos aproximados que desea automatizar en una macro y luego editar esa macro para ajustarla y personalizarla. Por ejemplo, aquí hay un código vba para triplicar cada celda de la primera columna en la tercera columna:

Sub triplicate()

iDestCol = 3
nCopy = 3
rowEnd = ThisWorkbook.ActiveSheet.Range("a" & Rows.Count).End(xlUp).Row
nIndex = 0
With ThisWorkbook.ActiveSheet

For i = 1 To rowEnd
    For j = 1 To nCopy
        Cells((nIndex + j), iDestCol) = Cells(i, 1)
    Next j
    nIndex = nIndex + nCopy

Next i
End With

End Sub

información relacionada