Scripts de Office: signos numéricos inversos
A menudo necesitamos invertir los signos numéricos en Excel. Para mí, esto ocurre regularmente porque la señalización contable de débitos y créditos se opone a la señalización de ingresos y costos. Estoy seguro de que en el campo elegido también hay muchos escenarios. Usando la funcionalidad nativa de Excel, hay muchas maneras de cambiar números de positivos a negativos o viceversa.
Esos métodos nativos de Excel están muy bien, pero puede resultar un poco tedioso si tenemos que hacerlo mucho. Si utilizamos Excel online, hacer que un Office Script realice la tarea por nosotros puede ser mucho más rápido. Entonces, en esta publicación, cubriremos el código necesario para lograr esto.
Tabla de contenido
- Código VBA básico
- Adaptando el código
- cambiar la hoja de trabajo
- Cambiar el libro de trabajo
- Cambiar entre escondido y muy escondido
- Creando un procedimiento reutilizable
- Notas
técnica
Cuando se utilizan scripts de Office, la razón más común por la que los scripts se ejecutan lentamente es la cantidad de interacción con el libro. Por lo tanto, es óptimo leer y escribir los datos desde y hacia el libro de trabajo lo menos posible. Cualquier cosa que recorra un rango celda por celda probablemente será muy lenta. En su lugar, podemos usar matrices. El proceso de alto nivel es:
- Leer los datos en una matriz.
- Manipular la matriz
- Enviar el resultado al libro de trabajo
Cuando usamos matrices, tenemos dos buenas opciones para manipular cada elemento:
- en bucle
- método de mapa (que es específico para matrices).
A los efectos de invertir signos numéricos, ambos logran resultados similares y podrían usarse indistintamente. Por eso, en este post he incluido ambos métodos para que puedas elegir el que prefieres.
Signos numéricos inversos cuando todas las celdas son valores
Si todas las celdas de un rango contienen valores, el cambio de señalización se puede aplicar a todos los elementos de la matriz.
Los ejemplos de código de esta sección funcionan con los valores de celda; Los números positivos se convierten en negativos y los negativos se convierten en positivos. A medida que el script se ejecuta con valores, también convierte cualquier fórmula en valores codificados.
para enfoque de bucle
función principal (libro de trabajo: ExcelScript.Workbook ){ //Declarar y asignar variables para las celdas seleccionadas let rng = workbook.getSelectedRange(); //Crea una matriz para los valores en el rango let arr = rng.getValues(); // Recorre cada elemento de la matriz 2D for ( let i = 0 ; i arr.length; i++) { for ( let j = 0 ; j arr[ 0 ].length; j++) { //Voltear el valor de la señalización arreglo[i][j] = -arr[i][j]}} // Empujar la matriz nuevamente a las celdas usando el método setValues rng.setValues(arr);};
Enfoque de mapa de matriz
función principal (libro de trabajo: ExcelScript.Workbook ){ //Declarar y asignar variables para las celdas seleccionadas let rng = workbook.getSelectedRange(); //Crea una matriz para los valores en el rango let arr = rng.getValues(); //Mapa a través de cada elemento en la matriz 2D let newArr = arr.map(row = { return row.map (cell = { //Invertir valor de señalización return -cell; })}); // Empujar la matriz nuevamente a las celdas usando el método setValues rng.setValues(nuevoArr);};
Signos numéricos inversos cuando las celdas son de tipos mixtos
En el siguiente código, abordamos la cuestión de las fórmulas o el texto dentro del rango de datos seleccionado. Las diferencias clave son:
- En lugar de los métodos getValues y setValues, utilice getFormulas y setFormulas.
- Se ha agregado una verificación adicional para probar si el elemento de la matriz contiene un número.
- Usamos isNaN para evaluar si un valor no es un número. verdadero = no es un número, falso = es un número.
- ! antes de isNaN invierte el resultado verdadero/falso.
- La acción de invertir signos numéricos sólo se aplica a aquellos elementos que son números.
Si el rango contiene números precedidos por un símbolo igual ( = ), se tratan como fórmulas. Por ejemplo:
- 12 es un valor de celda
- =12 es una fórmula en la que el resultado es 12
para enfoque de bucle
función principal (libro de trabajo: ExcelScript.Workbook ){ //Declarar y asignar variables para las celdas seleccionadas let rng = workbook.getSelectedRange(); //Crea una matriz para los valores en el rango let arr = rng.getFormulas(); // Recorre cada elemento de la matriz 2D for ( let i = 0 ; i arr.length; i++) { for ( let j = 0 ; j arr[ 0 ].length; j++) { //Comprueba si el elemento de la matriz es un número if (!isNaN(arr[i][j])) { //Voltear el valor de la señalización arreglo[i][j] = -arr[i][j] }}} // Empujar la matriz nuevamente a las celdas usando el método setFormulas rng.setFormulas(arr);};
Método de mapa de matriz
función principal (libro de trabajo: ExcelScript.Workbook ){ //Declarar y asignar variables para las celdas seleccionadas let rng = workbook.getSelectedRange(); //Crea una matriz para los valores en el rango let arr = rng.getFormulas(); //Mapa a través de cada elemento en la matriz 2D let newArr = arr.map(row = { return row.map (cell = { //Comprobar que el elemento es un número, si es verdadero revertir if (!isNaN(cell )) { return -cell; } más { volver celda; } })}); // Empujar la matriz nuevamente a las celdas usando el método setFormulas rng.setFormulas(newArr);};
Deja una respuesta