Scripts de Office: signos numéricos inversos

Índice
  1. técnica
  2. Signos numéricos inversos cuando todas las celdas son valores
    1. para enfoque de bucle
    2. Enfoque de mapa de matriz
  3. Signos numéricos inversos cuando las celdas son de tipos mixtos
    1. para enfoque de bucle
    2. Método de mapa de matriz

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:

  1. Leer los datos en una matriz.
  2. Manipular la matriz
  3. Enviar el resultado al libro de trabajo

Cuando usamos matrices, tenemos dos buenas opciones para manipular cada elemento:

  1. en bucle
  2. 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

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Subir

Este sitio web utiliza cookies para mejorar la experiencia del usuario y garantizar un funcionamiento eficiente. Al utilizar nuestro sitio web, aceptas todas las cookies de acuerdo con nuestra política de cookies. Leer mas...