2011-02-02 31 views
14

Tengo una hoja de Excel en la que necesito encontrar la última celda no vacía en una columna específica.Última celda no vacía en la fila; Excel VBA

¿Cómo puedo hacer esto?

A continuación, seleccionaré esto para mí, pero seleccionará primera celda no vacía, necesito la última celda no vacía en la fila.

Worksheets("DTCs").Range("A29").End(xlToRight).Select

+4

@ExcelDevelopers: luego votar para cerrar como duplicado de la pregunta SO más antigua que pregunta lo mismo. Las respuestas en otras páginas que no sean SO pueden desaparecer en cualquier momento. –

+0

Posible duplicado de [Error al buscar la última celda utilizada en VBA] (https://stackoverflow.com/questions/11169445/error-in-finding-last-used-cell-in-vba) – Masoud

Respuesta

10

creo que podría funcionar sólo la búsqueda de la otra dirección, así que algo como:

Worksheets("DTCs").Range("IV29").End(xlToLeft).Select 

Aunque tal vez tendría que ser cambiado a otra cosa dependiendo de la versión de Excel del IV (Esto parece funcionar en 2003).

+7

'Hojas de trabajo (" DTCs ")) .Cells (1, Columns.Count) .End (xlToLeft) .Select' –

+2

El comentario de Tim funciona para todas las versiones de Excel y es el enfoque superior. Las únicas excepciones son cuando la fila está completamente vacía, o un caso extremo donde se llena toda la fila. Ambas situtaiones resultarán con A1, que debería desencadenar una prueba adicional para validar la última celda utilizada verdadera. – brettdj

13

he ampliado en mi comentario anterior para proporcionar soluciones que

  • no utilizan Select
  • atender a la última celda de la fila 1 siendo utilizado
  • atender a toda la fila está vacía
  • abastecer toda la fila siendo completa

El método Find en el seco nd código es un método mucho más directa de establecer la primera celda no esté en blanco

Esta línea Set rng1 = ws.Rows(1).Find("*", ws.[a1], xlValues, , xlByColumns, xlPrevious) dice, se inicia en la celda A1 de la hoja "CTD" y luego mirar hacia atrás (es decir, desde la última celda de la fila 1) en fila1 por columna buscando cualquier cosa (*). Este método ya sea encontrar la última en blanco o no regresa Nothing, es decir, una fila vacía

usando xltoLeft con controles específicos

Sub Method1() 
Dim ws As Worksheet 
Dim rng1 As Range 
Set ws = Sheets("DTCs") 
If ws.Cells(1, Columns.Count) = vbNullString Then 
    Set rng1 = ws.Cells(1, Columns.Count).End(xlToLeft) 
    If rng1.Column <> 1 Then 
     'return last used cell 
     MsgBox "rng1 contains " & rng1.Address(0, 0) 
    Else 
    If ws.[a1] = vbNullString Then 
      MsgBox ws.Name & " row1 is completely empty", vbCritical 
     Else 
      'true last used cell is A1 
      MsgBox "rng1 contains " & rng1.Address(0, 0) 
     End If 
    End If 
Else 
    'last cell is non-blank 
    MsgBox ws.Cells(1, Columns.Count) & " contains a value", vbCritical 
End If 
End Sub 

recomienda

Sub Method2() 
    Dim ws As Worksheet 
    Dim rng1 As Range 
    Set ws = Sheets("DTCs") 
    Set rng1 = ws.Rows(1).Find("*", ws.[a1], xlFormulas, , xlByColumns, xlPrevious) 
    If Not rng1 Is Nothing Then 
     MsgBox "rng1 contains " & rng1.Address(0, 0) 
    Else 
     MsgBox ws.Name & " row1 is completely empty", vbCritical 
    End If 
End Sub 
Cuestiones relacionadas