You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Excel VBA中遍历所有工作表并分别存储各表LastRow值

遍历Excel所有工作表并单独存储每个表的最后一行行号

当然可以实现啦!你现在的代码是针对单个工作表的,要遍历所有工作表并单独存储每个表的最后一行行号,我给你推荐两种实用的方法,其中最灵活的是用字典来存储,另外也能实现动态命名变量的方式,下面详细说明:

方法一:使用字典存储(最推荐)

字典可以直接把工作表名称作为「键」,对应的最后一行行号作为「值」,后续想调用哪个表的行号直接用名称取就行,维护和使用都非常方便。

Sub GetAllLastRows()
    Dim ws As Worksheet
    Dim lastRowDict As Object
    Dim lastRow As Long
    
    ' 创建字典对象
    Set lastRowDict = CreateObject("Scripting.Dictionary")
    
    ' 遍历当前工作簿的所有工作表
    For Each ws In ThisWorkbook.Worksheets
        With ws
            If Application.WorksheetFunction.CountA(.Cells) <> 0 Then
                lastRow = .Cells.Find(What:="*", _
                                    After:=.Range("A1"), _
                                    Lookat:=xlPart, _
                                    LookIn:=xlFormulas, _
                                    SearchOrder:=xlByRows, _
                                    SearchDirection:=xlPrevious, _
                                    MatchCase:=False).Row
            Else
                lastRow = 1
            End If
        End With
        ' 将工作表名称和对应行号存入字典
        lastRowDict(ws.Name) = lastRow
    Next ws
    
    ' 示例:调用指定工作表的行号,比如查看"Sheet1"的最后一行
    ' MsgBox "Sheet1的最后一行是:" & lastRowDict("Sheet1")
    
    ' 示例:遍历字典查看所有工作表的结果
    ' Dim key As Variant
    ' For Each key In lastRowDict.Keys
    '     MsgBox key & "的最后一行是:" & lastRowDict(key)
    ' Next key
End Sub

方法二:动态命名单独变量(特定场景使用)

如果你确实需要每个工作表对应一个独立命名的变量(比如Sheet1_LastRow、Sheet2_LastRow),可以用VBA的ExecuteGlobal语句动态创建变量,但这种方式维护起来比较麻烦,而且需要处理工作表名称中的特殊字符(比如空格),只推荐在特殊需求下使用:

Sub CreateIndividualLastRowVars()
    Dim ws As Worksheet
    Dim lastRow As Long
    Dim varName As String
    
    ' 遍历所有工作表
    For Each ws In ThisWorkbook.Worksheets
        ' 处理工作表名称,替换空格为下划线,确保变量名合法
        varName = Replace(ws.Name, " ", "_") & "_LastRow"
        
        With ws
            If Application.WorksheetFunction.CountA(.Cells) <> 0 Then
                lastRow = .Cells.Find(What:="*", _
                                    After:=.Range("A1"), _
                                    Lookat:=xlPart, _
                                    LookIn:=xlFormulas, _
                                    SearchOrder:=xlByRows, _
                                    SearchDirection:=xlPrevious, _
                                    MatchCase:=False).Row
            Else
                lastRow = 1
            End If
        End With
        
        ' 动态创建全局变量并赋值
        ExecuteGlobal "Dim " & varName & " As Long"
        ExecuteGlobal varName & " = " & lastRow
    Next ws
    
    ' 示例:调用动态创建的变量,比如查看"Sheet1"对应的行号
    ' MsgBox "Sheet1的最后一行是:" & Sheet1_LastRow
End Sub

小提示

  • 方法一中的字典是最推荐的方案,不管工作表数量多少,都能轻松存储和调用,还能随时修改或删除条目,灵活性拉满。
  • 方法二中的动态变量方式,虽然满足了「单独存储」的需求,但变量是全局的,后续调用需要记住每个变量的名称,不如字典直观。

内容的提问来源于stack exchange,提问作者AleB

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:57:30