最后不是给定行中的空单元格(列); Excel VBA

15 excel vba excel-vba

我有一张excel表,我需要找到特定行中的最后一个非空单元格.

我该怎么做呢?

下面将为我选择这个,但它将选择第一个非空单元格,我需要行#29中的最后一个非空单元格.

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

bre*_*tdj 14

我已经扩展了上面的评论,以提供解决方案

  • 不使用 Select
  • 满足第1行中最后一个单元格的使用
  • 迎合整个行是空的
  • 满足整行的需求

Find在第二码方法是建立第一非空白单元格的一个更为直接的方法

这一行Set rng1 = ws.Rows(1).Find("*", ws.[a1], xlValues, , xlByColumns, xlPrevious) 说,从Sheet"DTCa"的单元格A1开始,然后向后看(即从第1行的最后一个单元格)第1行中的列查找任何内容(the *).此方法要么找到最后一个非空白或返回Nothing,即空行

使用xltoLeft特定检查

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
Run Code Online (Sandbox Code Playgroud)

推荐的

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
Run Code Online (Sandbox Code Playgroud)


Han*_*son 12

我认为它可能只是从另一个方向搜索,所以类似于:

Worksheets("DTCs").Range("IV29").End(xlToLeft).Select
Run Code Online (Sandbox Code Playgroud)

虽然可能需要根据Excel的版本将IV改为其他东西(这似乎在2003年有效).

  • `工作表("DTC").单元格(1,Columns.Count).End(xlToLeft).Select` (8认同)
  • Tim的评论适用于所有Excel版本,是优越的方法.唯一的例外是当行完全为空时,或者是整行填充的极端情况.这两个坐标都将产生A1,这将触发进一步的测试以验证真正的最后使用的细胞. (2认同)