Excel - Variables en Formulas Macro

 
Vista:
sin imagen de perfil

Variables en Formulas Macro

Publicado por Carlos (9 intervenciones) el 16/11/2016 13:00:46
Buenas tardes!

estoy intentado hacer una macro para que me aplique una formula en unas celdas en concreto, pero no se como modificar la fórmula para que deje meter una variable.

El codigo del macro sería este:

1
2
3
4
5
6
7
8
9
10
11
Sub Ciclos()
Dim i As Integer
Dim j As Integer
j = 4
For i = 5 To 292
    Cells(i, 4).formula = "=(Data.Availability!Ej+Data.Availability!Dj)*100/Data.Availability!Cj"
    i = i + 2
    j = j + 1
Next i
 
End Sub


Es escribir en una celda con valores de otras hojas.
Entonces lo que quiero es que en cada iteración, la fórmula sea primero:
=(Data.Availability!E4+Data.Availability!D4)*100/Data.Availability!C4

en la siguiente

1
=(Data.Availability!E5+Data.Availability!D5)*100/Data.Availability!C5

y así hasta que termine el bucle...

Muchas gracias de antemano!!!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Andres Leonardo
Val: 3.136
Plata
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

Variables en Formulas Macro

Publicado por Andres Leonardo (1583 intervenciones) el 16/11/2016 14:48:30
Carlos podrias exploicarlo algo mejor no lo entendi

querias poner uno y uno ??? podrias poner si el valor el impar pones el 5 y si el valor es par pones el otro-....


La verdad quisiera mas detalles para poderte ayudar.....
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Variables en Formulas Macro

Publicado por Carlos (9 intervenciones) el 16/11/2016 15:16:25
En el adjunto te he puesto los pantallazos de lo que tengo.

Basicamente, en la hoja dos hay una tabla ordenada por cada cuarto de hora, y en cada cuarto de hora hay 3 filas de datos diferentes.
La cosa es que la primera fila dentro de cada fila horaria (que se llama availability), tiene una fórmula, que esta referenciada con la otra hoja. Mi problema es que quiero poder extender la formula para todas las celdas de availability y que la formula se cambie al valor siguiente, es decir, quiero arrastrar la formula por toda la columna y que se salte las dos filas que tienen datos diferentes sin que la formula se salte estos dos numeros.

para eso, he pensado hacer un macro como este:

1
2
3
4
5
6
7
8
9
10
Sub Ciclos()
Dim i As Integer
Dim j As Integer
j = 4
For i = 5 To 292
Cells(i, 4).formula = "=(Data.Availability!E4+Data.Availability!D4)*100/Data.Availability!C4j"
i = i + 2
j = j + 1
Next i
End Sub

en el que los saltos de la fila me lo hacen bien, pero la formula no.

Básicamente, cuando empieza el for lo que quiero es que haga lo siguiente:

1
2
3
4
5
celda(5,4)=Data.Availability!E4+Data.Availability!D4)*100/Data.Availability!C4"
celda(8,4)=Data.Availability!E5+Data.Availability!D5)*100/Data.Availability!C5"
celda(11,4=Data.Availability!E6+Data.Availability!D6)*100/Data.Availability!C6"
...
...

Lo que no consigo es que meter la variable "j" (que se actualiza con cada vuelta en un valor mas: 1,2,3...) en la formula, y que quede algo como:

1
Cells(i, 4).formula = "=(Data.Availability!Ej+Data.Availability!Dj)*100/Data.Availability!Cj

Nuevamente, Mil gracias por adelantado... :)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Andres Leonardo
Val: 3.136
Plata
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

Variables en Formulas Macro

Publicado por Andres Leonardo (1583 intervenciones) el 16/11/2016 17:10:59
Intenta asi
reemplaza Hoja1 por Data.Availability

1
2
3
4
5
6
7
8
9
10
11
12
13
Sub Ciclos()
 
Dim i As Integer
Dim j As Integer
j = 4
For i = 5 To 292
 
Cells(i, 4).Formula = "=(Hoja1!E" & j & " +Hoja1!D" & j & ")*100/Hoja1!C" & j    ' aqui va de frente Cells i,4  por que es la 4 columna ... si quieres que varie se deberia ytilizar otro indice... 
i = i + 2
j = j + 1
Next i
 
End Sub
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Variables en Formulas Macro

Publicado por Carlos (9 intervenciones) el 17/11/2016 10:02:34
una vez más has dado con la tecla jaja Estaba probando con los ampersan y la j pero se ve que lo estaba escribiendo mal.. jaja

Otra cosa, en ese mismo código, si en vez de recorrer la misma columna pero distintas filas (E4,E5,E6,...) quisiese hacer lo contrario, es decir, recorrer las columnas de una fila, como quedaría el código?? Sería algo así como que hiciese D6, E6, F6, G6, .....

Mil gracias de nuevooo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Andres Leonardo
Val: 3.136
Plata
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

Variables en Formulas Macro

Publicado por Andres Leonardo (1583 intervenciones) el 17/11/2016 12:19:06
Pues ahi lo que haerias es recorrer un contador y utilizar el CHR(N)

ya que el codigo ascci que te daria la letra a contactenar
ejemplo
A chr(65)
B chr(66)
C chr(67)
D chr(68)
E chr(69)
F chr(70)
G chr(71)
H chr(72)
I chr(73)
J chr(74)
K chr(75)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Antoni Masana
Val: 4.908
Oro
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

Variables en Formulas Macro

Publicado por Antoni Masana (2477 intervenciones) el 18/11/2016 11:11:51
Buenos Dias Carlos

Esta es la formula que necesitas

1
2
3
4
5
6
7
8
9
Sub Ciclos()
    Dim i As Integer, Fila As Integer
 
    Fila = 4
    For i = 5 To 292 Step 3
        Cells(i, 4).formula = "=(Data.Availability!R" & Fila & "C5+Data.Availability!R" & Fila & "C4)*100/Data.Availability!R" & Fila & "C3"
        Fila = Fila + 1
    Next i
End Sub


Como la línea de la fórmula es muy larga lo voy a escribir de otra forma que también funciona y se lee mejor

1
2
3
4
5
6
7
8
9
10
11
12
13
Sub Ciclos()
    Dim i As Integer, Fila As Integer, Valor_1 as long, Valor_2 as Long, Valor_3 as Long
 
    Fila = 4
    For i = 5 To 292 Step 3
        Valor_1 = "Data.Availability!R" & Fila & "C5"
        Valor_2 = "Data.Availability!R" & Fila & "C4"
        Valor_3 = "Data.Availability!R" & Fila & "C3"
 
        Cells(i, 4).formula = "=(" & Valor_1 "+" & Valor_2 & ")*100/" & Valor_3
        Fila = Fila + 1
    Next i
End Sub

Pero que significa esto:

1
Valor_1 = "Data.Availability!R" & Fila & "C5"

Data.Availability -> es el nombre de la Hoja como ya saves y termina con el caracter !

R + un número --> Significa la fila (en ingles ROW)
C + un número --> Significa la columna ( en ingles Column)

Significa que: si escribes una fomula en una celda que sea =Hoja2!$B$5

Para hacer lo mismo desde una macro tienes que escribir esto "=Hoja2!R5C2" , la columna B es la segunda.

Para aprender más, aparte de buscar manuales o tutoriales, una cosa que es muy rápida y muy eficaz es: GRABAR MACRO hacer una tarea simple, DETENER MACRO he intentar entender que carajo ha escrito. Es mejor que un manual.

Espero haberte ayudado a resolver tu problema y a entender este mundo de locos que es la programación de Excel.

Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar