2011-02-02 5 views
14

Ho un foglio Excel in cui ho bisogno di trovare l'ultima cella non vuota in una colonna specifica.Ultima cella vuota vuota nella riga; Excel VBA

Come posso fare?

Il sotto selezionerà questo per me, ma sarà selezionare la prima cella non vuota , ho bisogno l'ultima cella non vuota nella riga.

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

+4

@ExcelDevelopers: poi votare per chiudere come duplicato della più vecchia domanda SO che chiede la stessa cosa. Le risposte su altre pagine rispetto a SO potrebbero scomparire in qualsiasi momento. –

+0

Possibile duplicato di [Errore nel trovare l'ultima cella utilizzata in VBA] (https://stackoverflow.com/questions/11169445/error-in-finding-last-used-cell-in-vba) – Masoud

risposta

10

penso che potrebbe funzionare basta cercare dalla direzione opposta, in modo da qualcosa come:

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

Anche se forse il IV avrebbe bisogno di essere cambiato a qualcosa d'altro a seconda della versione di Excel (questo sembra funzionare nel 2003).

+7

'Fogli di lavoro (" DTC ")) .Cells (1, Columns.Count) .End (xlToLeft) .Select' –

+2

Il commento di Tim funziona per tutte le versioni di Excel ed è l'approccio superiore. Le uniche eccezioni sono quando la riga è completamente vuota o in un caso estremo in cui viene riempita l'intera riga. Entrambe queste posizioni avranno come risultato A1, che dovrebbe attivare un ulteriore test per convalidare l'ultima cella effettivamente utilizzata. – brettdj

13

ho ampliato il mio commento di cui sopra per fornire soluzioni che

  • non utilizzano Select
  • provvedere per l'ultima cella nella riga 1 essendo utilizzati
  • provvedere per l'intera riga essendo vuota
  • completa l'intera riga

Il metodo Find nel seco ND codice è un metodo molto più diretto di stabilire la prima cella non vuota

Questa linea Set rng1 = ws.Rows(1).Find("*", ws.[a1], xlValues, , xlByColumns, xlPrevious) dice, inizia nella cella A1 di Foglio "DTCA" poi guardare indietro (cioè dall'ultima cella nella riga 1) in row1 per colonna cercando qualcosa (il *). Questo metodo sia trovare l'ultimo non vuoto o ritorna Nothing, vale a dire una riga vuota

usando xltoLeft con controlli specifici

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 

raccomanda

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