Tengo una hoja de Excel con aproximadamente 20,000 filas de datos. Ahora debo agregar 3 filas nuevas entre cada fila. ¿Cuál es la forma eficiente de hacer eso?

Ah, esta es divertida. Para esto, necesita usar un poco de aritmética modular. ¿Que es eso? La aritmética modular es matemática en un conjunto limitado de números, como horas en un día. Entonces, 2 horas después de las 9 son 11, pero dos horas después de las 11 son 1. Ese es el “módulo” matemático 12.

Entonces, queremos trabajar con el módulo cuatro aquí, y podemos usar la función MOD en Excel. También vamos a necesitar la función ROW, que devuelve el número de fila actual.

Aquí está la hoja con la que comenzamos:

Entonces, pensemos en esto. Tanto en nuestro origen como en nuestro destino, la fila 1 será el encabezado. La fila 2 del objetivo será la fila 2 de la fuente. Luego, tres filas en blanco (3, 4 y 5) y luego la fila 6 en el objetivo será la fila 3 de la fuente.

Entonces, primero, observe que en la hoja de destino MOD (ROW () – 2), 4) será cero para las filas que tendrán contenido, como este:

Ahora agregamos un IF y calculamos la fila de origen:

Y ahora usamos la función ÍNDICE para obtener los datos de origen:

Ahora, si realmente quieres ser sofisticado, incluso puedes agregar un campo de control, lo configuré en 2 para demostrar:

Grabar una macro. Esto es lo que debe usarse para automatizar tareas repetitivas.

Check Geek School: aprenda a usar macros de Excel para automatizar tareas tediosas.

O utilice la macro VBA: consulte https://support.microsoft.com/en … (artículo oficial de MS KB, pero desactualizado) o “Uso de una macro para insertar varias filas” parte de Cómo insertar varias filas en Excel sin sudar !

Probablemente hay diferentes formas de hacerlo.

Esto es lo que haría.

Insertaría una columna y la llamaría contador.

Pondría un 1 en la primera fila (celda A2). Luego, en la celda A3, pondría la fórmula + a2 + 3, que debería devolver el valor de 4. Copie la celda A3 hasta el final de sus datos. En mi ejemplo, eso sería A6. En sus datos, esa sería la celda A20001.

Luego, cree una segunda sección directamente debajo que use la misma metodología, excepto que el número inicial sería 2 en lugar de 1. Nuevamente copie la fórmula 19,998 veces más.

Luego, cree una tercera sección directamente debajo de la sección de la sección, excepto que el número inicial sería 3, en lugar de 2 o 1. Nuevamente copie la fórmula 19,998 veces más.

Ahora, lo que tendrá son tres números duros 1, 2 y 3 con 59,997 fórmulas, un total de 60,000 filas. Convierta todas esas fórmulas en valores (es decir, copie el rango de contadores [CTRL] -C, edite> pegue especiales> valores). Luego ordene todos sus datos, incluidos los contadores, en orden ascendente por contador (columna A, en mi ejemplo. Elimine la columna temporal llamada contadores y obtendrá el efecto que está buscando.

Debería poder hacer esto en menos de un minuto.

Nota: solo inserté dos espacios entre cada fila de datos con fines ilustrativos, pero se entiende la idea (es decir, solo hacer la misma iteración una vez más).


Estoy haciendo ciertas suposiciones de que tienes habilidades básicas de Excel en mis instrucciones, pero si algo no está claro, deja un comentario a continuación.

En primer lugar, eche un vistazo a la versión de Excel que está ejecutando.
2003 y anteriores tiene un límite máximo de filas de 65536.
Suponiendo que esto no sea un problema, puede usar la siguiente macro:

Sub Macro1 ()

Dim LastRow As Long
Con ActiveSheet
LastRow = .Cells (.Rows.Count, “A”). End (xlUp) .Row
Terminar con

Hacer mientras LastRow> 1
Filas (LastRow & “:” & LastRow) .Insert Shift: = xlDown, CopyOrigin: = xlFormatFromLeftOrAbove
Filas (LastRow & “:” & LastRow) .Insert Shift: = xlDown, CopyOrigin: = xlFormatFromLeftOrAbove
Filas (LastRow & “:” & LastRow) .Insert Shift: = xlDown, CopyOrigin: = xlFormatFromLeftOrAbove
LastRow = LastRow – 1
Lazo

End Sub

Aquí hay una respuesta simple y eficiente a esta pregunta.

Numere cada fila de sus datos:

Ahora copie y pegue los números para que se apilen unos sobre otros.

Copie una vez: una línea en blanco entre cada punto de datos.
Copie dos veces: dos líneas en blanco.
Copie 3x: tres líneas en blanco (su caso).
etc.

Terminarás con algo así, aunque a una escala mucho mayor.

Ahora simplemente aplique un filtro y ordene el ‘Número’ de menor a mayor para obtener el resultado deseado.

Esto debería hacer el truco. Hazme saber si tienes alguna pregunta.

Copiaría y pegaría todos los datos en Notepad ++ y luego buscaría y reemplazaría. Buscaría “\ r \ n” y lo reemplazaría con “\ r \ n \ r \ n \ r \ n \ r \ n”. Asegúrese de tener seleccionado el botón de opción “Extendido” o esto no funcionará.

Después de reemplazar el texto (debería tomar unos segundos con tantas líneas), presionaría Ctrl + A y copiaría / pegaría todos los datos nuevamente en mi hoja de cálculo. Pierdes el formato de esta manera, pero de lo contrario este es un método realmente rápido e indoloro.

EDITAR*

Simplemente tuve un archivo de texto abierto con 408,242 líneas. Hice esta búsqueda y reemplazo y me llevó unos 2 minutos completarlo. ¡No está nada mal!

Aquí hay un método de fuerza bruta que es feo, estúpido e incluso podría funcionar.

En una segunda hoja de “destino”, cree fórmulas que hagan referencia a los datos en su hoja de origen.

Olvidando los encabezados, por el momento, su hoja de destino tendrá:

Fila 1: todas las celdas hacen referencia a datos en la hoja de origen fila 1

Fila 2: todas las celdas hacen referencia a datos en la hoja de origen fila 2

Fila 3: todas las celdas hacen referencia a datos en la hoja de origen fila 3

Las filas 4, 5 y 6 no hacen referencia a nada, en absoluto. Solo espacios en blanco.

Ahora, copie / pegue las filas 1 a 6, como un bloque en el destino, hasta el final hasta que haya mostrado todos los datos de la fuente.

Espero que ayude.