Macro Excel para añadir filas con un cálculo porcentual
No tengo mucha idea de VBScript ni de excell y necesito añadir una fila con cálculos a un archivo. Google me ha dado respuestas parciales pero no llego a solucionarlo y no sé muy bien por donde tirar... me explico:
Tengo una hoja de excell con 10.000 filas. Cada fila tiene 22 columnas, y de esas 22 columnas, 12 son valores numéricos (precios). Lo que tengo que hacer es añadir debajo de cada fila dos filas más, que calculen el 4 % y el 12 % de la fila superior de esas 12 columnas. Es decir, debajo de J8 hay que insertar J9 y J10, J9 debe calcular el 4% de J8 y J9 debe calcular el 12% de J10, y así con K9 y K10, etc. sobre esas 10.000 filas.
Entiendo que la forma de hacerlo es crear un for o un while que recorra las filas y las columnas, añadiendo los valores pero no tengo ni la más remota idea del léxico para escribir eso en VB, y de cómo se llaman las cosas en Excell (cómo referirme, por ejemplo, a el valor que hay dos filas "relativas" más arriba).
¿Podéis echarme un cable? ¿Alguna idea?
einstein Mod
Excel y yo no somos amigos, pero lo que yo haría es lo siguiente:
te colocas en una casilla que deba calcular, por ejemplo, J9.
escibes el signo de igual (=), señalas la casilla correspondiente (J8 si entendí correctamente) y escribes el signo de x del teclado numérico (el asterisco) y el porcentaje deseado (0.4). quedaría algo asi: =J8*0.4
Luego solo debes copiar esa casilla y pegarla tantas veces necesites. Y hacer lo mismo con la otra
Ya sé que no es Visual basic y que debe haber fórmulas mejores para hacer esas cosas, pero bueno, como método de emergencia funciona.
Espero que te pueda servir
zigotica
yo haria lo siguiente:
opcion 1. crear 2 hojas mas, una para el 4% y otra para el 8%. Calcular los % en cada hoja. Buscar una macro que vaya pillando una fila de cada hoja y las intercale en una 4a hoja
opcion 2. exportar todo a txt y generar los calculos en php, asp o similares
xavib
¡Gracias por las respuestas! Einstein, hacerlo como tu dices implicaría hacer 10.000 inserciones de filas (botón derecho+insertar fila) y luego 20.000 copy-pastes. No hay 10.000 valores sino 12 columnas con 10.000 valores en cada columna.
La opción 1 que comentas, sergi, tampoco acaba de funcionar por lo mismo que te comentaba. Los valores que hay ahora mismo ya provienen de un cálculo. Se trata de hacer dos cálculos más sobre ese cálculo... como decía antes, 10.000 filas x 12 columnas = 120.000 valores. Lo que hay que calcular es el 4 y el 10% de esos 120.000 valores. La putada de la segunda opción es que tendría que devolverlo a excell, por un lado, y que en realidad tampoco sabría como hacer eso en una función asp o php, es decir, no sé cómo podría tratar esos datos para que funcionaran.
Podría hacerse automático si supiera como decir en visual basic:
<code>Si no has llegado a la última fila
Inserta dos filas nuevas
Colócate en la primera de las dos filas creadas
Hasta que llegues a la columna tal
Coge el valor de la celda actual - 1
Calcula el 4% (=J9*4/100)
Loop
Pasa a la siguiente fila
Ves a la columna tal
Hasta que llegues a la columna tal
Coge el valor de la celda actual -2
Calcula el 12% (=J9*12/100)
Loop
Pasa a la siguiente fila
Loop</code>
De hecho el problema me lo encuentro en los "pasa a la siguiente columna", "coge el valor de la celda actual -2" y demás. Por lo demás sólo son un par de loops...
einstein Mod
Hombre, yo nunca pensé que fueras a copiar y pegar uno por uno !!!! copias uno, seleccionas la fila completa (los 10.000) y le das "pegar". Excel no es tonto, va a calcular en relacion al origen/destino, es decir, la casilla que corresponde. No va a calcular a todos desde la casilla de origen. Para seleccionar unacolumna, haces click en la parte superior. Si es solo uan parte de la misa, te ubicas al comienzo de los 10.000 y aprietas la tecla AvPag hasta llegar al fin. En verdad, nunca se me ocrriria pegarlo tantas veces
xavib
Claro! pero piensa que son 10.000 filas, y que cada fila tiene 22 columnas de las que hay que hacer el cálculo en 12. No puedo hacer el cálculo en una nueva columna porque hay que hacerlo sobre cada registro. Eso me limita hacer lo que tu comentas, (que para hacer otro tipo de cosas sí funcionaría) Pero vamos, por como son los datos no puedo "arrastrar fórmulas" si no inserto antes filas...
Gracias igualmente!
zigotica
a ver, sinceramente creo que te las puedes apañar con la opcion 1, y sacando la serie de progresion. añade un contador en la primera columna de las 3 hojas. en la hoja 1 el contador se incrementa de 3 en 3 empezando por 1 (1, 4, 7, 10...). en la segunda se incrementa eempezando por 2 (2,5,8...)y en la tercera empezando por 3 (3, 6, 9...). Las series no se si son esas, que ese dia no fui a clase. Luego calculas los % en cada hoja. Luego copias todos los valores en una cuarta hoja y ordenas por la columna 1. No se si me he explicao.
la opcion 2 se trata de leer linea a linea el txt, ir guardando las lineas originales y las generadas en una variable buffer, y luego soltar la variable buffer con un header de excel.
xavib
Yo creo haberte entendido, lo que me da la sensación es de que igual no me he sabido explicar porque esto es un poco follón.
Por cada valor que hay en la imagen hay que añadir 2 valores porcentuales del valor original. En la imagen están todas las columnas, pero hay 10.000 filas como estas.
Entiendo lo que dices de usar un identificador... incluso sin eso podría obtener fácilmente una nueva columna con el valor porcentual, de hecho sólo haria falta arrastrar la fórmula... pero lo que hace falta es añadir filas.
Ya encontraré una solución...
zigotica
no, no me has entendido (creo que yo a ti si, pero igual estoy metiendo la gamba)
1. creas 2 hojas nuevas, una será para el % uno y la otra para el % 2
2. calcualas los % pero no los aplicas a filas nuevas, sino a las mismas celdas de las hojas nuevas
3. en las 3 hojas añades una columna nueva que actuará de contador, pero empezando por 1, 2, y 3. En todas el incremento es de 3
4. creas una hoha nueva y copias/pegas los valores (ojo, VALORES) de las otras 3 hojas.
5. ordenas por la columna contador y voila.