excel - salteadas - macro para copiar y pegar valores varias veces
Copie cada enésima línea de una hoja a otra (8)
Agregue una nueva columna y llénela con números ascendentes. Luego filtre por ([columna] mod 7 = 0) o algo así (no tenga Excel delante de mí para intentar esto);
Si no puede filtrar por fórmula, agregue una columna más y use la fórmula = MOD ([columna; 7]) en ella, luego filtre los ceros y obtendrá las séptimas filas.
Tengo una hoja de cálculo de Excel con 1 columna, 700 filas. Me importa cada séptima línea. No quiero tener que entrar y borrar las 6 filas entre cada fila que me importa. Entonces mi solución fue crear otra hoja y especificar una referencia a cada celda que quiero.
=sheet1!a1
=sheet1!a8
=sheet1!a15
Pero no quiero escribir cada una de estas fórmulas ... ''100 veces. Pensé que si seleccionaba las tres y arrastré la caja, comprendería lo que estaba tratando de hacer, pero no tuve suerte.
¿Alguna idea sobre cómo hacer esto de manera elegante / eficiente?
Cree una macro y use el siguiente código para tomar los datos y ponerlos en una hoja nueva (Sheet2):
Dim strValue As String
Dim strCellNum As String
Dim x As String
x = 1
For i = 1 To 700 Step 7
strCellNum = "A" & i
strValue = Worksheets("Sheet1").Range(strCellNum).Value
Debug.Print strValue
Worksheets("Sheet2").Range("A" & x).Value = strValue
x = x + 1
Next
¡Déjeme saber si esto ayuda! JFV
En A1 de tu nueva hoja, pon esto:
=OFFSET(Sheet1!$A$1,(ROW()-1)*7,0)
... y copia. Si comienza en algún lugar que no sea la fila 1, cambie ROW () a ROW (A1) o alguna otra celda en la fila 1, luego vuelva a copiar.
Si desea copiar la enésima línea pero varias columnas, use la fórmula:
=OFFSET(Sheet1!A$1,(ROW()-1)*7,0)
Esto puede ser copiado también.
En mi opinión, las respuestas dadas a esta pregunta son demasiado específicas. Aquí hay un intento de una respuesta más general con dos enfoques diferentes y un ejemplo completo.
El enfoque OFFSET
OFFSET
toma 3 argumentos obligatorios. La primera es una celda dada de la que queremos compensar. Los siguientes dos son el número de filas y columnas que queremos compensar (hacia abajo y hacia la derecha). OFFNET
devuelve el contenido de la celda de resultados. Por ejemplo, OFFSET(A1, 1, 2)
devuelve el contenido de la celda C2
porque A1
es la celda (1,1)
y si agregamos (1,2)
a eso obtenemos (2,3)
que corresponde a la celda C2
.
Para que esto devuelva cada enésima fila desde otra columna, podemos hacer uso de la función ROW
. Cuando esta función no recibe ningún argumento, devuelve el número de fila de la celda actual. Así podemos combinar OFFSET
y ROW
para hacer una función que devuelva cada n celda añadiendo un multiplicador al valor devuelto por ROW
. Por ejemplo OFFSET(A$1,ROW()*3,0)
. Tenga en cuenta el uso de $1
en la celda objetivo. Si no se utiliza, la compensación se compensará desde celdas diferentes, lo que de hecho agrega 1
al multiplicador.
El enfoque ADDRESS
+ INDIRECT
ADDRESS
toma dos entradas enteras y devuelve la dirección / nombre de la celda como una cadena. Por ejemplo, ADDRESS(1,1)
devuelve "$A$1"
. INDIRECT
toma la dirección de una celda y devuelve el contenido. Por ejemplo, INDIRECT("A1")
devuelve el contenido de la celda A1
(también acepta entrada con $
''s en ella). Si usamos ROW
dentro de ADDRESS
con un multiplicador, podemos obtener la dirección de cada enésima celda. Por ejemplo, ADDRESS(ROW(), 1)
en la fila 1 devolverá "$A$1"
, en la fila 2 devolverá "$A$2"
y así sucesivamente. Entonces, si ponemos esto dentro INDIRECT
, podemos obtener el contenido de cada enésima celda. Por ejemplo, INDIRECT(ADDRESS(1*ROW()*3,1))
devuelve el contenido de cada 3ª celda en la primera columna cuando se arrastra hacia abajo.
Ejemplo
Considere la siguiente captura de pantalla de una hoja de cálculo. Los encabezados (primera fila) contienen la llamada utilizada en las filas a continuación. La columna A
contiene nuestros datos de ejemplo. En este caso, son solo los enteros positivos (el recuento continúa fuera del área mostrada). Estos son los valores que queremos obtener cada 3 o más, es decir, queremos obtener 1, 4, 7, 10, etc.
La columna B
contiene un intento incorrecto de usar el enfoque OFFSET
pero donde olvidamos usar $
. Como se puede ver, mientras multiplicamos por 3
, en realidad obtenemos cada 4ª fila.
La columna C
contiene un intento incorrecto de usar el enfoque OFFSET
donde recordamos usar $
, pero olvidamos restar. Entonces, si bien obtenemos cada 3er valor, omitimos algunos valores (1 y 4).
La columna D
contiene una función correcta utilizando el enfoque OFFSET
.
La columna E
contiene un intento incorrecto de utilizar el enfoque ADDRESS
+ INDRECT
, pero donde olvidamos restar. Así saltamos algunas filas inicialmente. El mismo problema que con la columna C
La columna F
contiene una función correcta utilizando el enfoque ADDRESS
+ INDRECT
.
Resalta la 7ma línea. Pintar el formato de las primeras 7 líneas varias veces. Luego, haz un trozo más grande de pincel copiando el formato hasta que termines. Cada séptima línea debe estar resaltada. Filtre por color y luego copie y pegue (pegue los valores) de las celdas resaltadas en una hoja nueva.
Si sus datos originales están en forma de columnas con varias columnas y la primera entrada de sus datos originales en C42, y desea que sus datos nuevos (muestreados abajo) también estén en forma de columna, pero solo cada séptima fila, entonces usted también es necesario restar el número de fila de la primera entrada, así:
=OFFSET(C$42,(ROW(C42)-ROW(C$42))*7,0)
Si tuviera que extraer cada séptima fila, "insertaría" una columna antes de la columna "A". Entonces (suponiendo que haya una fila de encabezado en la fila 1) escriba los números 1,2,3,4,5,6,7 en filas 2,3,4,5,6,7,8, lo haría resalta el 1,2,3,4,5,6,7 y pega ese bloque al final de la hoja (vale 700 filas). El resultado será 1,23,4,5,6,7,1,2,3,4,5,6,7,1,2,3,4,5,6,7 ....... Ahora haz una ordenación de datos ascendente en la columna "A". Después de la clasificación, todos los 1 serán los primeros de la serie, todos los 7 serán el séptimo elemento.
inserte una nueva columna y coloque una serie en 1,2,3,4, etc. Luego, cree otra columna nueva y use el comando = if (int (a1 / 7) = (a1 / 7), 1,0) que debería obtener un 1 en cada 7ma fila, filtrar la columna en el 1