Hacer Macro que copie cada cierto rango de valores

Discute sobre la aplicación de hojas de cálculo
Responder
Nankinpep
Mensajes: 4
Registrado: Mar Feb 12, 2019 10:15 am

Hacer Macro que copie cada cierto rango de valores

Mensaje por Nankinpep »

Cada día hacemos experimentos en el laboratorio y después de hacer un previo tratamiento de estos datos me encuentro con un fichero en .txt que importo a calc con dos columnas: Tiempo ; Pixel. El caso es que me gustaría hacer una Macro que me busque cada 25 píxeles (o un cierto incremento en la segunda columna) y me copie esa fila (tiempo y pixel) en otro lugar de la página para así hacer un "vaciado" de datos efectivos.

Como dato importante a tener en cuenta y que me ha complicado mucho la vida: las columnas no siempre tienen la misma cantidad de datos (por eso lo del cierto incremento en la segunda columna). Es importante que sea la columna de píxels la que mande sobre que fila copiar. Adjunto un fichero de muestra.

En el caso ideal, quería que esta macro copiase los valores en otra hoja o fichero pero también he sido incapaz de conseguirlo. Pero basicamente quiero copiar cada cierto rango de píxels (un incremento de 25 des de el primero) en otras dos columnas junto con el tiempo correspondiente.

Alguno tiene alguna idea de como conseguir ésto? Lo siento, no he sido capaz de encontrarlo en este foro.


Muchas gracias y un saludo!
Adjuntos
pruebamacro_190206.ods
(17.92 KiB) Descargado 180 veces
OpenOffice 2.4 Ubuntu 16
Avatar de Usuario
PepeOooSevilla
Mensajes: 1480
Registrado: Sab Abr 04, 2009 6:10 pm
Ubicación: Sevilla (España)

Re: Hacer Macro que copie cada cierto rango de valores

Mensaje por PepeOooSevilla »

Hola.
Te damos la bienvenida al Foro de OpenOffice / LibreOffice y, por favor, no dejes de leer la Guía de supervivencia.

Tal vez no necesites ninguna macro para hacer lo que yo he entendido que quieres hacer. Observa la hoja "Hoja2" del archivo adjunto, son fórmulas las celdas de color naranja.

La celda B1 de la "Hoja2" contiene el número de saltos que quieres realizar.

La celda B4 contiene la fórmula:

Código: Seleccionar todo

=DESREF(190204_captura_YARA_PMMA_H380_TB3min_A.$B$3;$B$1*(FILA()-3);0;1)
La celda C4 contiene la fórmula:

Código: Seleccionar todo

=DESREF(190204_captura_YARA_PMMA_H380_TB3min_A.$C$3;$B$1*(FILA()-3);0;1)
Seleccionamos B4 y C4 y copiamos hacia abajo. Se irán mostrando los valores cada x saltos, de acuerdo al número que figure en B1.

Si lo comentado no te sirve como solución, por favor, intenta dar más información.

Saludos cordiales.
Adjuntos
pruebamacro_190206_Nankinpep_v1.ods
LibO Calc 6.1.5
(22.78 KiB) Descargado 208 veces
LibreOffice 6.4.6. Windows 10. Java 8 rev. 261 (64 bits)
Por favor, utiliza el Foro para tus consultas, no los mensajes privados
Si usas OpenOffice/LibreOffice trabaja y guarda en ODT, ODS, ODP, ... Y haz copias de seguridad.
Nankinpep
Mensajes: 4
Registrado: Mar Feb 12, 2019 10:15 am

Re: Hacer Macro que copie cada cierto rango de valores

Mensaje por Nankinpep »

PepeOooSevilla escribió:Hola.
Te damos la bienvenida al Foro de OpenOffice / LibreOffice y, por favor, no dejes de leer la Guía de supervivencia.

Tal vez no necesites ninguna macro para hacer lo que yo he entendido que quieres hacer. Observa la hoja "Hoja2" del archivo adjunto, son fórmulas las celdas de color naranja.

La celda B1 de la "Hoja2" contiene el número de saltos que quieres realizar.

La celda B4 contiene la fórmula:

Código: Seleccionar todo

=DESREF(190204_captura_YARA_PMMA_H380_TB3min_A.$B$3;$B$1*(FILA()-3);0;1)
La celda C4 contiene la fórmula:

Código: Seleccionar todo

=DESREF(190204_captura_YARA_PMMA_H380_TB3min_A.$C$3;$B$1*(FILA()-3);0;1)
Seleccionamos B4 y C4 y copiamos hacia abajo. Se irán mostrando los valores cada x saltos, de acuerdo al número que figure en B1.

Si lo comentado no te sirve como solución, por favor, intenta dar más información.

Saludos cordiales.

Con esto me ha funcionado perfectamente.

Muchas gracias y un placer!
OpenOffice 2.4 Ubuntu 16
Nankinpep
Mensajes: 4
Registrado: Mar Feb 12, 2019 10:15 am

Re: Hacer Macro que copie cada cierto rango de valores

Mensaje por Nankinpep »

Buenas tardes,

como es normal, al trabajar, estaba intentando adaptar el código a mi uso y disfrute personal. Estaba revisándolo cuando me encontré con un par de problemas que no entiendo. Al intentar mover y/o utilizar distintas columnas con el mismo código me he dado cuenta de que no salta cada cuantas casillas le indico o que simplemente vale 0.

Entonces intentaré explicar lo que yo entiendo del código (pues es verdad que no lo he acabado de entender) y a ver si así me podéis ayudar.

Primero de todo, el código base de la casilla es: =OFFSET(CASILLADEREFERENCIA;Columna;Altura,Anchura) : el numero de columnas movidas para arriba o abajo.

Entonces, el código es:

Código: Seleccionar todo

=DESREF(190204_captura_YARA_PMMA_H380_TB3min_A.$B$3;$B$1*(FILA()-3);0;1)
Donde básicamente estamos cogiendo la casilla ubicada en 190204_captura... y la multiplicamos por $B$1*(FILA()-3) y el FILA()-3 no lo acabo de entender. Entonces entiendo que el 0;1 es simplemente la dimensión de las casillas en sí.

La verdad voy un poco perdido. Cualquier tipo de ayuda será bienvenida!
PepeOooSevilla escribió:Hola.
Te damos la bienvenida al Foro de OpenOffice / LibreOffice y, por favor, no dejes de leer la Guía de supervivencia.

Tal vez no necesites ninguna macro para hacer lo que yo he entendido que quieres hacer. Observa la hoja "Hoja2" del archivo adjunto, son fórmulas las celdas de color naranja.

La celda B1 de la "Hoja2" contiene el número de saltos que quieres realizar.

La celda B4 contiene la fórmula:

Código: Seleccionar todo

=DESREF(190204_captura_YARA_PMMA_H380_TB3min_A.$B$3;$B$1*(FILA()-3);0;1)
La celda C4 contiene la fórmula:

Código: Seleccionar todo

=DESREF(190204_captura_YARA_PMMA_H380_TB3min_A.$C$3;$B$1*(FILA()-3);0;1)
Seleccionamos B4 y C4 y copiamos hacia abajo. Se irán mostrando los valores cada x saltos, de acuerdo al número que figure en B1.

Si lo comentado no te sirve como solución, por favor, intenta dar más información.

Saludos cordiales.
OpenOffice 2.4 Ubuntu 16
Avatar de Usuario
PepeOooSevilla
Mensajes: 1480
Registrado: Sab Abr 04, 2009 6:10 pm
Ubicación: Sevilla (España)

Re: Hacer Macro que copie cada cierto rango de valores

Mensaje por PepeOooSevilla »

Hola.
Intentaré explicarme teniendo por delante el archivo que subí:

1. En la celda B1 de la Hoja2 introducimos el número de saltos que queremos que se produzca, en nuestro caso 25.

2. En la celda B4 de la misma hoja está la susodicha fórmula cuyo segundo parámetro es:

Código: Seleccionar todo

$B$1*(FILA()-3)
Como estamos en B4, entonces FILA() vale 4 (el valor de la fila donde se encuentra), que al restarle 3 nos da como resultado 1, es decir, el primer salto es $B$1*1, que en este caso es 25 (25*1).

3. Al copiar la celda B4 hacia abajo, ahora nos encontramos en la celda B5, entonces FILA() vale 5 que al restarle 3 nos da como resultado 2, es decir, el segundo salto es $B$1*2, que en este caso es 50 (25*2).

4. En resumen, al copiar hacia abajo la fórmula, (FILA()-3) actúa como si fuera un contador, 1, 2, 3, 4, ... que al multiplicarlo por el número de saltos nos da el salto correspondiente a esa fila. Entonces, ¿por qué -3? Pues porque la primera celda donde escribimos la fórmula está en la fila 4. Si la primera celda de la fórmula fuera la B40 entonces tendríamos que restarle 39.

Saludos cordiales.
LibreOffice 6.4.6. Windows 10. Java 8 rev. 261 (64 bits)
Por favor, utiliza el Foro para tus consultas, no los mensajes privados
Si usas OpenOffice/LibreOffice trabaja y guarda en ODT, ODS, ODP, ... Y haz copias de seguridad.
Nankinpep
Mensajes: 4
Registrado: Mar Feb 12, 2019 10:15 am

Re: Hacer Macro que copie cada cierto rango de valores

Mensaje por Nankinpep »

Perfecto! Con esto ya puedo continuar muchísimas gracias.

En cuanto a los dos últimos parámetros de altura y anchura con valores 0;1 qué tipo de interés tienen?
OpenOffice 2.4 Ubuntu 16
Avatar de Usuario
PepeOooSevilla
Mensajes: 1480
Registrado: Sab Abr 04, 2009 6:10 pm
Ubicación: Sevilla (España)

Re: Hacer Macro que copie cada cierto rango de valores

Mensaje por PepeOooSevilla »

Hola.
La función:

Código: Seleccionar todo

DESREF(Referencia; Filas; Columnas; Altura; Anchura)
Devuelve un rango de celdas a partir de una celda dada. Un rango puede ser también una sola celda, que es el caso que nos ocupa.

Código: Seleccionar todo

=DESREF(190204_captura_YARA_PMMA_H380_TB3min_A.$B$3;$B$1*(FILA()-3);0;1)
Identifiquemos los parámetros:
  • Referencia: 190204_captura_YARA_PMMA_H380_TB3min_A.$B$3. Esta es la celda desde donde comienza "a contar".
    Filas: $B$1*(FILA()-3). Es decir, ¿cuántas filas saltamos hacia abajo?
    Columnas: 0. Cero, es decir, nos movemos en la misma columna, la columna B del parámetro "Referencia".
    Altura: 1. Es decir, una sola celda.
    Anchura: No existe. Este es un parámetro opcional de la función, si no existe entonces su valor es 0 (cero), es decir, seguimos en la misma columna B.
Resultado final: un rango de una celda que está x saltos de la celda dada como "Referencia".
Saludos cordiales.
LibreOffice 6.4.6. Windows 10. Java 8 rev. 261 (64 bits)
Por favor, utiliza el Foro para tus consultas, no los mensajes privados
Si usas OpenOffice/LibreOffice trabaja y guarda en ODT, ODS, ODP, ... Y haz copias de seguridad.
Responder