Escribir fórmulas mediante código

03/04/2006 - 20:58 por luka | Informe spam
Hola a todos

Tengo que poner mediante código esta fórmula
=SI(B12="DAT";G12;SI(B12="";"";J11))
en la columna J desde J12 hasta un valor que tengo en una variable que
se llama "ultimafila" :)) y no tengo ni idea de como escribirlo

Gracias de antemano

Javier B.

Preguntas similare

Leer las respuestas

#6 KL
04/04/2006 - 19:58 | Informe spam
Hola luka,

¿la coma es el sustituto del
punto y coma?



El VBA es EEUU-centrico y los sitemas estadounidenses usan coma como separador. O sea que para las formulas que se introducen desde VBA a traves de las propiedades que no contienen la palabla Local (p.ej: FormulaLocal) siempre hay que usar las funciones en ingles y las comas como separadores de argumentos.

Saludos,
KL
Respuesta Responder a este mensaje
#7 julian-vlc-sp
04/04/2006 - 20:08 | Informe spam
¡Importante!: Colabora con el grupo.Contesta a este mensaje
y dinos si te sirvió o no la respuesta dada. Muchas gracias.

Pues lo del punto y coma, mas menos depende de la configuración del
ordenador, para configuración en español punto y coma cuando se escribe
directamente en la barra de herramientas, para escribir en código la coma.

Lo anterior es mas o menos, yo si escribo directamente en la barra de
herramientas tengo que poner:

Si ( ; ; )

y al hacerlo en la ventana de VBA tengo que poner

If( , , )

en mi caso, al ejecutar el código me rellena las celdas escribiéndolo en
español y con el punto y coma.

SALUDOS.
Julián-Valencia-España

"luka" <luka79arrobatelefonica.net> escribió en el mensaje
news:OAH$$
Saludos a los dos

Me funcionaron perfectamente, ambas dos.
Al respecto de lo que me habéis puesto, ¿la coma es el sustituto del
punto y coma? he buscado en la ayuda y no he encontrado (tendré que
llamar a sherlock holmes) nada sobre ello.

Graaaaaaaaaaaacias.

Javier B.


Hola Luka,

A ver mi version (in bucles ni variables adicionales).

Sub Macro1()
Dim UltimaFila As Long
UltimaFila = Cells(Rows.Count, "B").End(xlUp).Row
If UltimaFila < 12 Then Exit Sub
Range("J12").Resize(UltimaFila - 12 + 1).FormulaR1C1 = _
"=IF(RC[-8]=""DAT"",RC[-3],IF(RC[-8]="""","""",R[-1]C))"
End Sub

Saludos,
KL




Gracias por preguntar, luka, mira lo que he aprendido, a ver si te
sirve:

Sub Botón1_AlHacerClic()
Dim n As Integer
For n = 12 To ultimafila
Range("J" & n).Select
ActiveCell.Formula = "=If(B" & n & "=""DAT"",G" & n & ",If(B" &
"="""","""",J" & n - 1 & "))"
Next n
End Sub
SALUDOS.
Julián-Valencia-España
Respuesta Responder a este mensaje
#8 klomkbock
06/04/2006 - 19:17 | Informe spam
Hola KL (y Luka y Julian)

Disculpad por la intromision que ademas es sobre un tema diferente. Me
podrias/iais explicar el uso de "Resize" en esta macro (y a ser posible en
general). No acabo de captar su utilidad.

En cualquier caso disculpad la intromision, y si no hay respuesta lo
conprendo.

Un saludo y hasta pronto.
Ivan
Respuesta Responder a este mensaje
#9 luka
07/04/2006 - 13:06 | Informe spam
Hola Ivan,
yo no estoy muy puesto en esto de las etiquetas de los grupos de
noticias y no alcanzo a comprender que pidas disculpas. Por mi no hay
ningún problema.
En cuanto a la pregunta me voy a atrever a contestar aunque seguro que
KL tiene una respuesta mas completa :)
Resize cambia el tamaño del rango, en este caso en concreto hace un
rango que va en la columna J desde la fila 12 (constante) hasta la fila
(variable) Ultimafila -12 +1
Como solo ha puesto un valor, solo tiene en cuenta filas,

La sintaxis es Resize(filas,columnas)
Espero haber acertado con la explicación

Saludos,
Javier B.

Ivan ha escrito:

Hola KL (y Luka y Julian)

Disculpad por la intromision que ademas es sobre un tema diferente. Me
podrias/iais explicar el uso de "Resize" en esta macro (y a ser posible en
general). No acabo de captar su utilidad.

En cualquier caso disculpad la intromision, y si no hay respuesta lo
conprendo.

Un saludo y hasta pronto.
Ivan
Respuesta Responder a este mensaje
#10 klomkbock
07/04/2006 - 22:53 | Informe spam
Hola Luka, lo primero muchas gracias por tu respuesta.

En cuanto a Resize supongo que redimensiona el rango para trabajar solo
con el y ser mas rapido, pero no acabo de captarlo del todo. En fin,
supongo que es cuestion de paciencia.

En cuanto a la pregunta incial (Escribir formulas mediante codigo) y una
vez leidos vuestro dialogo me he atrevido a hacer este otro codigo que no
usa formula pero da el mismo resultado, aunque estoy seguro que ni se
acerca a la de KL en efectividad, pero aunque solo sea por aquello de
practicar.

Se supone que la variable Ultimafila es aleatoria y la pones tu en funcion
de lo que decidas. En este caso seria el ultimo dato de la columna B.
Tambien borraria todos los datos sobrantes de la columna J cada vez que
ejecutes la macro( no se si te interesa).

Bueno, lo dicho, aunque sea por practicar.

Muchas gracias de nuevo
Un saludo y hasta pronto
Ivan


Sub Dat()
Dim Celda As Range, Ultimafila As Long
' Variable Ultimafila de ejemplo
Ultimafila = Range("b65536").End(xlUp).Row
If Ultimafila < 12 Then Exit Sub
' Borra los contenidos desde "J11" hasta el final
If Range("j65536").End(xlUp).Row > 11 Then Range(Range("j1") _
.Offset(Ultimafila, 0), Range("j65536").End(xlUp)) _
.ClearContents
For Each Celda In Range("j12", Range("j1") _
.Offset(Ultimafila - 1, 0))
With Range("b12")
If .Value = "CAT" Then
Celda = Range("g12")
ElseIf .Value = "" Then
Celda = ""
Else
Celda = Range("j11")
End If
End With
Next Celda
End Sub
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida