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

#1 KL
11/02/2006 - 19:52 | Informe spam
Hola chy,

...saber cual es la última celda en la que aparece un
valor...



1) Tu codigo para los casos cuando las celdas estan realmente vacias es ineficiente y podria transformarse de la siguiente manera:
'
miValor = Range("A65536").End(xlUp)
MsgBox miValor
'
Nota: para usar/cambiar el valor de la celda encontrada no necesitas seleccionarla

2) Para el caso actual que expones podrias usar el siguiente codigo:

'
On Error Resume Next
With Range("A:A")
miValor = .Find("*", .Cells(1), xlValues, _
xlWhole, xlByRows, xlPrevious)
End With
MsgBox miValor
'
Nota: este codigo encontrara el ultimo valor en la columna [A] sea ese texto o numerico.

3) La formula que expones se puede acortar un poco: =BUSCAR(1e307;A:A)
Y ademas se puede usar en el codigo de la siguiente manera:

'
miValor = Application.Lookup(1E+307, Range("A:A"))
MsgBox miValor
'

Saludos,
KL
Respuesta Responder a este mensaje
#2 chy
11/02/2006 - 20:53 | Informe spam
Gracias KL, tus sugerencias me han servido, finalmente he optado por
esta ya que realmente se posiciona en la última celda ocupada en los
otros casos si las últimas celdas contenían un valor igual
seleccionaba la primera que encontraba.
'-
Sub ultima()


Range("a1").Select
Do
If ActiveCell.Value <> Range("A650").End(xlUp) Then
ActiveCell.Offset(1, 0).Select
End If
Loop Until ActiveCell.Value = Range("A650").End(xlUp)


End Sub

'
KL ha escrito:

Hola chy,

> ...saber cual es la última celda en la que aparece un
> valor...

1) Tu codigo para los casos cuando las celdas estan realmente vacias es ineficiente y podria transformarse de la siguiente manera:
'
miValor MsgBox miValor
'
Nota: para usar/cambiar el valor de la celda encontrada no necesitas seleccionarla

2) Para el caso actual que expones podrias usar el siguiente codigo:

'
On Error Resume Next
With Range("A:A")
miValor xlWhole, xlByRows, xlPrevious)
End With
MsgBox miValor
'
Nota: este codigo encontrara el ultimo valor en la columna [A] sea ese texto o numerico.

3) La formula que expones se puede acortar un poco: =BUSCAR(1e307;A:A)
Y ademas se puede usar en el codigo de la siguiente manera:

'
miValor MsgBox miValor
'

Saludos,
KL
Respuesta Responder a este mensaje
#3 KL
11/02/2006 - 21:22 | Informe spam
Hola chy,

finalmente he optado por
esta ya que realmente se posiciona en la última celda ocupada



Creo que has tomado una decision equivocada. Seguramente no es necesario seleccionar las celdas (aunque sin saber lo que quieres
consegir la probabilidad de que m equivoque es de 0,0001%), pero prueba las opciones 2 y 3 que te he dado antes de la siguiente
manera:

'
On Error Resume Next
With Range("A:A")
.Find("*", .Cells(1), xlValues, _
xlWhole, xlByRows, xlPrevious).Select
End With
'

'
On Error Resume Next
Range("A" & Application.Match(1E+307, Range("A:A"))).Select
'

en los otros casos si las últimas celdas contenían un valor igual
seleccionaba la primera que encontraba.



Creo que no lo hacias bien, por lo que convendria que expongas el codigo modificado que intyentaste usar.

Saludos,
KL
Respuesta Responder a este mensaje
#4 KL
11/02/2006 - 21:32 | Informe spam
Hola de nuevo,

Ademas creo que no has entendido del todo la primera opcion que te di, la cual modificaste de manera incorrecta:

'
miValor = Range("A65536").End(xlUp)
MsgBox miValor
'

Aparte de que no ignora las celdas que contienen formulas que devuelven "" (cedena de texto de longitud 0), el rango [A65536] en
este codigo no debe variar a no ser que debajo de la celda [A650] tengas otros valores que no quieres incluir en la evaluacion. Este
codigo podria modificarse de la siguiente manera (aunque no serviria en el caso que planteas):

'
Range("A65536").End(xlUp).Select
'

Saludos,
KL


"KL" wrote in message news:
Hola chy,

finalmente he optado por
esta ya que realmente se posiciona en la última celda ocupada



Creo que has tomado una decision equivocada. Seguramente no es necesario seleccionar las celdas (aunque sin saber lo que quieres
consegir la probabilidad de que m equivoque es de 0,0001%), pero prueba las opciones 2 y 3 que te he dado antes de la siguiente
manera:

'
On Error Resume Next
With Range("A:A")
.Find("*", .Cells(1), xlValues, _
xlWhole, xlByRows, xlPrevious).Select
End With
'

'
On Error Resume Next
Range("A" & Application.Match(1E+307, Range("A:A"))).Select
'

en los otros casos si las últimas celdas contenían un valor igual
seleccionaba la primera que encontraba.



Creo que no lo hacias bien, por lo que convendria que expongas el codigo modificado que intyentaste usar.

Saludos,
KL
Respuesta Responder a este mensaje
#5 chy
12/02/2006 - 00:41 | Informe spam
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
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida