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

#11 klomkbock
07/04/2006 - 23:10 | Informe spam
Hola Luka de nuevo, disculpame pero en el codigo he puesto "CAT" en vez de
"DAT", si lo pruebas tendrias que rectificarlo.

If .Value = "CAT" Then >>>> If .Value = "DAT" Then

Espero no haber cometido muchos mas errores.

Un saludo
Ivan
Respuesta Responder a este mensaje
#12 luka
08/04/2006 - 01:41 | Informe spam
Hola Iván.

Lo que pregunté en este correo estaba relacionado con otro que no tuvo
mucho éxito y que me obligó a estrujarme la única neurona que me queda
sana :))
Me quedaban algunos flecos y uno de ellos era ese.
La idea de la fórmula desde código era porque así podía borrar las
fórmulas antes de copiar un código y después volver a poner las fórmulas
y porque por VB me parecía complicado analizar el valor de las celdas,
sobre todo porque ya lo tenía en el libro.
La solución de KL (como siempre) funcionó, y con una sola línea de
código relleno todas las celdas que necesito

De todas formas, ya en plan académico, (para aprender un poquito mas, ya
no me cabe mucho, no porque sepa sino porque no hay mas espacio en el
tarro) he puesto tu planteamiento y no me funciona, se quedan todas las
celdas de la columna J en blanco.
¿puede ser porque dejas constantes las celdas en el bucle que haces?
Seguiré mirándolo a ver si averiguo porque no funciona.
De todas formas, menos un error (sin importancia) que me da a la hora de
incorporar el fichero de texto, ya tengo resuelto el fichero, pero como
tu dices: aunque solo sea por practicar.

Saludos
Javier B.


Ivan escribió:
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
#13 klomkbock
08/04/2006 - 02:20 | Informe spam
Hola Luka

Tienes razon, la verdad es que no se como habia leido la pregunta que
pensaba que b12, g12 y j11 eran constantes (la verdad es que me extrañaba
un poco pero tampoco me he parado mucho a pensarlo), aunque la verdad es
que la pregunta esta clara. Ya para quitarme el gusanillo te mando este
otro codigo que corrige el anterior, aunque de nuevo solo sea por
practicar... Como deciais Julian y tu, yo tambien creo que una de las
maneras como mas se aprende es en este foro, aunque a veces los novatos
(hablo por mi) podamos meter un poco la pata.

En cualquier caso muchas gracias por este dialogo.

Un saludo y hasta pronto
Ivan

Este es el nuevo codigo:

Sub Dat2()
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("j11") _
.Offset(Ultimafila, 0), Range("j65536").End(xlUp)) _
.ClearContents
For Each Celda In Range("b12", Range("b1") _
.Offset(Ultimafila, 0))
With Celda
If .Value = "DAT" Then
Celda.Offset(, 8) = Celda.Offset(, 5)
ElseIf .Value = "" Then
Celda.Offset(, 8) = ""
Else
Celda.Offset(, 8) = Celda.Offset(-1, 8)
End If
End With
Next Celda
End Sub
Respuesta Responder a este mensaje
#14 klomkbock
08/04/2006 - 02:39 | Informe spam
Hola Luka de nuevo , creo que de esta si que por lo menos me llamaras
pesado.

Habia un error al borrar en la columna J, y ademas se me habia olvidado
que el With sirve para algo. Ahora si que te pido disculpas por este
rollo, que encima no sirve para nada.

Un saludo y hasta pronto.
Ivan

Otro nuevo codigo, que si se mira seguro que siguen apareciendo "meteduras
de pata".

Sub Dat2()
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("j12") _
.Offset(Ultimafila - 12, 0), Range("j65536").End(xlUp)) _
.ClearContents
For Each Celda In Range("b12", Range("b1") _
.Offset(Ultimafila, 0))
With Celda
If .Value = "DAT" Then
.Offset(, 8) = .Offset(, 5)
ElseIf .Value = "" Then
.Offset(, 8) = ""
Else
.Offset(, 8) = .Offset(-1, 8)
End If
End With
Next Celda
End Sub
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida