最后一行不是空行; Excel VBA
我有一个Excel工作表,我需要find特定列中的最后一个非空单元格 。
我如何做到这一点?
下面将为我select这个,但它会select第一个不是空的单元格,我需要在行中的最后一个不空的单元格。
Worksheets("DTCs").Range("A29").End(xlToRight).Select
我认为它可能只是从另一个方向search,所以像这样:
Worksheets("DTCs").Range("IV29").End(xlToLeft).Select
虽然也许IV需要改变到别的东西取决于Excel的版本(这似乎在2003年工作)。
我已经扩大了我的评论,以提供解决scheme
- 不要使用
Select
- 迎合使用第一行的最后一个单元格
- 照顾整个行是空的
- 迎合整个排满
第二个代码中的Find
方法是build立第一个非空白单元格的更为直接的方法
这行Set rng1 = ws.Rows(1).Find("*", ws.[a1], xlValues, , xlByColumns, xlPrevious)
表示,从工作表“DTCa”的单元格A1开始,然后向后看(即从最后在第1行中的单元格)在第1行中寻找任何东西( *
)。 此方法要么find最后一个非空白或返回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
推荐的
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