Ultima celda con valor

11/02/2006 - 19:04 por chy | Informe spam
Tengo una serie de celdas que estan vinculadas desde otra hoja, de
forma que si no hay valor en la hoja original no apreza nada.

Necesito poder saber cual es la última celda en la qwue aparece un
valor para poder asignarle un valor a otra columna.

Cuando he necesitado algo similar he utilizado este código y me ha
funcionado, pero en este caso nfalla ya que las celdas no estan vacias
ya que contienen el vinculo.


'--
Range("E10").Select
Do
If IsEmpty(ActiveCell) = False Then
ActiveCell.Offset(1, 0).Select
End If
'--

Por otro lado he conseguido saber la última celda que tiene un
número, pero soy incapaz de traducirlo a código.

=BUSCAR(9,99999999999999E+307;A:A)

Alguien me puede aportar una idea

Preguntas similare

Leer las respuestas

#6 chy
12/02/2006 - 00:54 | Informe spam
La última modificación que he hecho es esta y de momento con la
spruebas que estoy haciendo funciona bastante bien

'--
Range("F11").Select
Do
If ActiveCell.Value > "0" Then
ActiveCell.Offset(0, -3) = "V"

ActiveCell.Offset(1, 0).Select
End If
Loop Until ActiveCell.Value = Range("F650").End(xlUp)
'-
Respuesta Responder a este mensaje
#7 KL
12/02/2006 - 01:12 | Informe spam
Hola chy,

Perdona mi ironia, pero creo que hablamos idiomas distintos o es que hay algo que no acabas de comentar sobre la situacion real :-)
Tu macro recorre celdas en vez de ir a la celda necesaria directamente y ademas cambiarla sin seleccionar:

'
On Error Resume Next
Range("C" & Application.Match(1E+307, Range("F:F")))="V"
'

Si lo que necesitas es poner una "V" en la columna [C] para todos los valores numericos que se encuentren en la columna [F] entonces
la forma mas eficiente es la siguiente:

'
Dim c As Range, rng As Range
On Error Resume Next
Set rng = Range("F:F").SpecialCells(xlCellTypeFormulas, xlNumbers)
On Error GoTo 0
If rng Is Nothing Then Exit Sub
For Each c In rng
c.Offset(, -3) = "V"
Next c
'

Saludos,
KL


"chy" wrote in message news:
Hola de nuevo KL,
este es el código que fianlmente estoy utilizando lo he probado en
diferentes circunstancias y funciona, las celdas que recorro son celdas
que contienen
"=+SI([prueba2.xls]Hoja2!$A$1="";"";[prueba2.xls]Hoja2!$A29)" (sin
comillas) , sólo utilizo el rango hasta 650.

'
Range("F11").Select
Do
If ActiveCell.Value <> Range("F650").End(xlUp) Then
ActiveCell.Offset(1, 0).Select
End If
Loop Until ActiveCell.Value = Range("F650").End(xlUp)
ActiveCell.Offset(-1, -3) = "V"
'--

pero realmente me ha surgido un problema al probar el código,
añadiendo al origen más de un dato ya que en el destino sólo me
añade una "V" a la última linea añadida.

Por esto que te comento creo que tengo que cambiar de estrategia y a
todas las celdas que tengan valor en la columna "F"
añadirles/asignarles un valor "V" en la columna "C".
Respuesta Responder a este mensaje
#8 KL
12/02/2006 - 02:03 | Informe spam
Hola de nuevo,

Si mi segunda hipotesis del mensaje anterior es correcta, entonces una forma aun mas eficiente seria la siguiente:

'
On Error Resume Next
Range("F:F").SpecialCells( _
xlCellTypeFormulas, xlNumbers).Offset(, -3) = "V"
'

Y si tambien es necesario vaciar las celdas de la clumna [C] cuyo equivalente en la columna [F] ha dejado de tener un valor numerico
como resultado de recalculo, se podria hacer lo siguiente:

'
On Error Resume Next
Range("C2:C65536").ClearContents
Range("F:F").SpecialCells( _
xlCellTypeFormulas, xlNumbers).Offset(, -3) = "V"
'

Aunque en todo caso creo que lo mas eficiente seria usar la siguiente formula copiada en las 650 celdas de la columna [C] a partir
de la celda [C2]:

=SI(ESNUMERO(F2);"V";"")

Saludos,
KL

"KL" wrote in message news:
Hola chy,

Perdona mi ironia, pero creo que hablamos idiomas distintos o es que hay algo que no acabas de comentar sobre la situacion real
:-)
Tu macro recorre celdas en vez de ir a la celda necesaria directamente y ademas cambiarla sin seleccionar:

'
On Error Resume Next
Range("C" & Application.Match(1E+307, Range("F:F")))="V"
'

Si lo que necesitas es poner una "V" en la columna [C] para todos los valores numericos que se encuentren en la columna [F]
entonces la forma mas eficiente es la siguiente:

'
Dim c As Range, rng As Range
On Error Resume Next
Set rng = Range("F:F").SpecialCells(xlCellTypeFormulas, xlNumbers)
On Error GoTo 0
If rng Is Nothing Then Exit Sub
For Each c In rng
c.Offset(, -3) = "V"
Next c
'

Saludos,
KL


"chy" wrote in message news:
Hola de nuevo KL,
este es el código que fianlmente estoy utilizando lo he probado en
diferentes circunstancias y funciona, las celdas que recorro son celdas
que contienen
"=+SI([prueba2.xls]Hoja2!$A$1="";"";[prueba2.xls]Hoja2!$A29)" (sin
comillas) , sólo utilizo el rango hasta 650.

'
Range("F11").Select
Do
If ActiveCell.Value <> Range("F650").End(xlUp) Then
ActiveCell.Offset(1, 0).Select
End If
Loop Until ActiveCell.Value = Range("F650").End(xlUp)
ActiveCell.Offset(-1, -3) = "V"
'--

pero realmente me ha surgido un problema al probar el código,
añadiendo al origen más de un dato ya que en el destino sólo me
añade una "V" a la última linea añadida.

Por esto que te comento creo que tengo que cambiar de estrategia y a
todas las celdas que tengan valor en la columna "F"
añadirles/asignarles un valor "V" en la columna "C".

email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida