Macro condicionada

25/05/2007 - 18:06 por Belinda | Informe spam
...solicito vuestra ayuda para realizar una macro que evalúe un rango
que empieza en A2, sigue en A3, A4 y no se dónde termInará, para que
si encuentra algo en alguna celda de ese rango, sume en su
correspondiente celda en AF (AF2, AF3, etc, lo que hay en AD2+AE2...

..o sea que, si A2 no está vació, suma en AF2 lo que hay en AD2+lo que
hay en AE2..y asi sucesivamente hasta que en la columna A no haya
nada

Gracias por vuestra ayuda

Preguntas similare

Leer las respuestas

#1 KL
25/05/2007 - 21:16 | Informe spam
Algo asi tal vez:

Sub test()
Dim Rng As Range
Dim strRng1 As String
Dim strRng2 As String
Dim strRng3 As String

With ActiveSheet
Set Rng = .Range(.Cells(2, "A"), .Cells(.Rows.Count, "A").End(xlUp))
End With

strRng1 = Rng.Address(, , , 1)
strRng2 = Rng.Offset(, 29).Address(, , , 1)
strRng3 = Rng.Offset(, 30).Address(, , , 1)

Rng.Offset(, 31) = Evaluate("IF(" & strRng1 & "<>""""," & strRng2 & "+" & strRng3 & ","""")")
End Sub

Saludos,
KL


"Belinda" wrote in message news:
...solicito vuestra ayuda para realizar una macro que evalúe un rango
que empieza en A2, sigue en A3, A4 y no se dónde termInará, para que
si encuentra algo en alguna celda de ese rango, sume en su
correspondiente celda en AF (AF2, AF3, etc, lo que hay en AD2+AE2...

..o sea que, si A2 no está vació, suma en AF2 lo que hay en AD2+lo que
hay en AE2..y asi sucesivamente hasta que en la columna A no haya
nada

Gracias por vuestra ayuda
Respuesta Responder a este mensaje
#2 Belinda
26/05/2007 - 11:06 | Informe spam
On 25 mayo, 21:16, "KL" wrote:
Algo asi tal vez:

Sub test()
Dim Rng As Range
Dim strRng1 As String
Dim strRng2 As String
Dim strRng3 As String

With ActiveSheet
Set Rng = .Range(.Cells(2, "A"), .Cells(.Rows.Count, "A").End(xlUp))
End With

strRng1 = Rng.Address(, , , 1)
strRng2 = Rng.Offset(, 29).Address(, , , 1)
strRng3 = Rng.Offset(, 30).Address(, , , 1)

Rng.Offset(, 31) = Evaluate("IF(" & strRng1 & "<>""""," & strRng2 & "+" & strRng3 & ","""")")
End Sub

Saludos,
KL

"Belinda" wrote in messagenews:

...solicito vuestra ayuda para realizar una macro que evalúe un rango
que empieza en A2, sigue en A3, A4 y no se dónde termInará, para que
si encuentra algo en alguna celda de ese rango, sume en su
correspondiente celda en AF (AF2, AF3, etc, lo que hay en AD2+AE2...

..o sea que, si A2 no está vació, suma en AF2 lo que hay en AD2+lo que
hay en AE2..y asi sucesivamente hasta que en la columna A no haya
nada

Gracias por vuestra ayuda



...muchas gracias KL, lo probaré...
Respuesta Responder a este mensaje
#3 Belinda
26/05/2007 - 11:18 | Informe spam
On 26 mayo, 11:06, Belinda wrote:
On 25 mayo, 21:16, "KL" wrote:





> Algo asi tal vez:

> Sub test()
> Dim Rng As Range
> Dim strRng1 As String
> Dim strRng2 As String
> Dim strRng3 As String

> With ActiveSheet
> Set Rng = .Range(.Cells(2, "A"), .Cells(.Rows.Count, "A").End(xlUp))
> End With

> strRng1 = Rng.Address(, , , 1)
> strRng2 = Rng.Offset(, 29).Address(, , , 1)
> strRng3 = Rng.Offset(, 30).Address(, , , 1)

> Rng.Offset(, 31) = Evaluate("IF(" & strRng1 & "<>""""," & strRng2 & "+" & strRng3 & ","""")")
> End Sub

> Saludos,
> KL

> "Belinda" wrote in messagenews:

> ...solicito vuestra ayuda para realizar una macro que evalúe un rango
> que empieza en A2, sigue en A3, A4 y no se dónde termInará, para que
> si encuentra algo en alguna celda de ese rango, sume en su
> correspondiente celda en AF (AF2, AF3, etc, lo que hay en AD2+AE2...

> ..o sea que, si A2 no está vació, suma en AF2 lo que hay en AD2+lo que
> hay en AE2..y asi sucesivamente hasta que en la columna A no haya
> nada

> Gracias por vuestra ayuda

...muchas gracias KL, lo probaré...- Ocultar texto de la cita -

- Mostrar texto de la cita -



..ya lo he probado y ¡Eureka! casi lo entiendo, por lo que no me queda
más remedio que preguntarte:
Respuesta Responder a este mensaje
#4 Belinda
26/05/2007 - 11:23 | Informe spam
On 26 mayo, 11:18, Belinda wrote:
On 26 mayo, 11:06, Belinda wrote:





> On 25 mayo, 21:16, "KL" wrote:

> > Algo asi tal vez:

> > Sub test()
> > Dim Rng As Range
> > Dim strRng1 As String
> > Dim strRng2 As String
> > Dim strRng3 As String

> > With ActiveSheet
> > Set Rng = .Range(.Cells(2, "A"), .Cells(.Rows.Count, "A").End(xlUp))
> > End With

> > strRng1 = Rng.Address(, , , 1)
> > strRng2 = Rng.Offset(, 29).Address(, , , 1)
> > strRng3 = Rng.Offset(, 30).Address(, , , 1)

> > Rng.Offset(, 31) = Evaluate("IF(" & strRng1 & "<>""""," & strRng2 & "+" & strRng3 & ","""")")
> > End Sub

> > Saludos,
> > KL

> > "Belinda" wrote in messagenews:

> > ...solicito vuestra ayuda para realizar una macro que evalúe un rango
> > que empieza en A2, sigue en A3, A4 y no se dónde termInará, para que
> > si encuentra algo en alguna celda de ese rango, sume en su
> > correspondiente celda en AF (AF2, AF3, etc, lo que hay en AD2+AE2...

> > ..o sea que, si A2 no está vació, suma en AF2 lo que hay en AD2+lo que
> > hay en AE2..y asi sucesivamente hasta que en la columna A no haya
> > nada

> > Gracias por vuestra ayuda

> ...muchas gracias KL, lo probaré...- Ocultar texto de la cita -

> - Mostrar texto de la cita -

..ya lo he probado y ¡Eureka! casi lo entiendo, por lo que no me queda
más remedio que preguntarte:- Ocultar texto de la cita -

- Mostrar texto de la cita -



...se me ha ido la tecla. Lo que quería preguntarte es que siginifican
las comas que pones delante del 1 y como variante, imaginate que no
quiero sumar lo que hay en esos rangos, sino multiplicarlo...por lo
que hay en otra celda. Es que los datos que debo manejar, se bajan de
una Web y cuando tengo que sumar algo, no lo hace bien hasta que
multiplico los valores bajados por 1...También he observado que no
funciona igual la función Autosuma que si le pones tú la fórmula
SUMA(a1:a etc..

Muchas gracias de nuevo por tu pacienca
Respuesta Responder a este mensaje
#5 KL
26/05/2007 - 13:31 | Informe spam
Hola Belinda,

las comas que pones delante del 1



Si te refieres a algo como lo siguiente:

strRng1 = Rng.Address(, , , 1)

Entonces cada coma delimita un parametro opcional de la funcion saltado por irrelevante. Por ejemplo la propiedad Address() tiene
los siguientes parametros:

rng.Address(RowAbsolute, ColumnAbsolute, ReferenceStyle, External, RelativeTo)

Para este caso yo solo necesito el cuarto parametro que es External.

Por eso, al saltar los tres anteriores, los marco mediante las comas para que a traves de su posicion Excel sepa cual de los
parametros quiero usar .

Tambien pude haber idicado el parametro expresamente:

strRng1 = Rng.Address(External:=1)

Pero es mas largo :-)

El 1 en el cuarto parametro [casi] equivale a True (Verdadero). Estrictamente dicho, en VBA False=0 y True=-1, pero en realidad en
las expresiones buleanas True es cualquier valor no igual a 0. Asi que pude haber puesto algo como:

strRng1 = Rng.Address(, , , True)
strRng1 = Rng.Address(, , , -1)
strRng1 = Rng.Address(, , , 2007)
strRng1 = Rng.Address(External:=True)
strRng1 = Rng.Address(External:=-1)
strRng1 = Rng.Address(External: 07)
etc.

... y como variante, imaginate que no
quiero sumar lo que hay en esos rangos, sino multiplicarlo...por lo
que hay en otra celda. Es que los datos que debo manejar, se bajan de
una Web y cuando tengo que sumar algo, no lo hace bien hasta que
multiplico los valores bajados por 1...También he observado que no
funciona igual la función Autosuma que si le pones tú la fórmula
SUMA(a1:a etc..



A diferencia de los operadores aritmeticos basicos, las funciones de Excel que realizan operaciones matematicas [salvo algunas otras
como p.ej.: CONTAR.SI(), SUMAR.SI(), etc] son incapaces de forzar la conversion de las cadenas de texto numericas en su valoir
numerico equivalente. En principio la siguiente instruccion deberia funcionar:

Rng.Offset(, 31) = Evaluate("IF(" & strRng1 & "<>""""," & strRng2 & "*" & strRng3 & ","""")")

Saludos,
KL
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida