要找到最后一行或列,我通常会使用如下内容:
LR = Cells(Rows.Count, 1).End(xlUp).Row
LC = Cells(1, Columns.Count).End(xlToLeft).Column
但是,在没有列头的情况下,我试图找到最右边的列,我希望找到的列可能是B列(IE "B27"),也可能是列Z (IE "Z1000"),或者任何随机单元格。
类似地,我还试图在同一工作表中找到最后一行,没有列标题,最后一行可能在任何列中。
知道如何做可以在几个场景中有所帮助,但为了详细说明我的当前场景,我尝试连接一些从其他源复制的行,并有许多选项卡。有时标签在行的开头,有时在中间。当然,这会将每条线推入多个单元格中,有时会向右很远。
这些文档通常不超过10k行,因此我考虑编写一种“蛮力”类型的代码,如:
Private Sub Concatenate_20k_Rows()
Dim ws As Worksheet
Dim cell As Range
Dim LC As Long, i As Long
Set ws = ActiveSheet
For Each cell In ws.Range("A1:A20000")
LC = Cells(cell.Row, Columns.Count).End(xlToLeft).Column
For i = 1 To LC
cell.Value = cell.Value & " " & cell.Offset(0, i).Value
Next i
cell.Value = Application.Trim(cell.Value)
Next cell
End Sub
我想找到标题未知的最后一列对我的场景来说并不重要,但是找到最后一行可能很有用,所以如果只有2k行的话,我不需要强行遍历20k行,或者不必冒着没有足够远的风险超过20k行的风险。
发布于 2022-04-13 18:56:39
您可以使用Range.Find
方法。
如前所述,这将返回一个2元素数组,其中
Option Explicit
Function LastRC(Worksht As String) As Long()
'Uncomment if on worksheet
'Application.Volatile
Dim WS As Worksheet, R As Range
Dim LastRow As Long, LastCol As Long
Dim L(1) As Long
Dim searchRng As Range
Set WS = Worksheets(Worksht)
Set searchRng = WS.Cells
With searchRng
Set R = .Cells.Find(what:="*", after:=.Cells(1, 1), _
LookIn:=xlFormulas, lookat:=xlPart, searchorder:=xlByRows, _
searchdirection:=xlPrevious)
If Not R Is Nothing Then
LastRow = R.Row
LastCol = .Cells.Find(what:="*", after:=.Cells(1, 1), _
LookIn:=xlFormulas, lookat:=xlPart, searchorder:=xlByColumns, _
searchdirection:=xlPrevious).Column
Else
LastRow = 1
LastCol = 1
End If
End With
L(0) = LastRow
L(1) = LastCol
LastRC = L
End Function
https://stackoverflow.com/questions/71862337
复制相似问题