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

求助:编写VBA宏统计各工作表首列字符总数写入主表

统计各工作表首列字符总数并写入MAIN表的VBA解决方案

原代码的问题

你的代码存在几个关键问题,导致无法正常运行:

  • 用Sheets当变量名,和Excel内置的工作表集合对象重名,容易引发冲突
  • 内层循环Rowref = 1 To 12完全多余,每个工作表只需要对应MAIN表的一行,外层遍历工作表时直接递增行号即可
  • Range("B2:B100000").Value是多单元格区域,不能直接用Len函数获取字符数,得逐个单元格处理
  • 最后一行仅指定了单元格位置,未将计算好的totalchar赋值给它,等于没有写入结果
  • totalchar未初始化,每次循环会累加之前的结果,导致统计数值错误

修正后的代码

针对指定工作表的版本(对应你原代码里的1-12工作表)

Sub CountFirstColumnChars()
    Dim targetSheets As Variant
    Dim wsName As Variant
    Dim ws As Worksheet
    Dim totalChar As Long
    Dim rowIndex As Long
    
    ' 列出要统计的工作表名称
    targetSheets = Array("1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12")
    rowIndex = 1 ' 从MAIN表的L1开始写入
    
    For Each wsName In targetSheets
        Set ws = ThisWorkbook.Worksheets(wsName)
        totalChar = 0 ' 每次统计新工作表前重置总数
        
        ' 遍历首列(A列)的所有非空单元格,累加字符数
        For Each cell In ws.Range("A1", ws.Cells(ws.Rows.Count, "A").End(xlUp))
            totalChar = totalChar + Len(cell.Value)
        Next cell
        
        ' 将结果写入MAIN表对应行的L列
        ThisWorkbook.Worksheets("MAIN").Range("L" & rowIndex).Value = totalChar
        rowIndex = rowIndex + 1 ' 切换到下一行
    Next wsName
End Sub

通用版本(遍历所有工作表,自动跳过MAIN表)

如果后续工作表数量有变化,用这个版本更省心:

Sub CountAllSheetsFirstColumnChars()
    Dim ws As Worksheet
    Dim totalChar As Long
    Dim rowIndex As Long
    
    rowIndex = 1 ' 从MAIN表的L1开始写入
    
    For Each ws In ThisWorkbook.Worksheets
        If ws.Name <> "MAIN" Then ' 跳过MAIN表本身
            totalChar = 0 ' 重置字符总数
            
            ' 遍历首列非空单元格
            For Each cell In ws.Range("A1", ws.Cells(ws.Rows.Count, "A").End(xlUp))
                totalChar = totalChar + Len(cell.Value)
            Next cell
            
            ' 写入结果到MAIN表L列
            ThisWorkbook.Worksheets("MAIN").Range("L" & rowIndex).Value = totalChar
            rowIndex = rowIndex + 1
        End If
    Next ws
End Sub

注意事项

  • 如果你说的“首列”是指B列(原代码里用了B列),把代码中的"A"替换成"B"即可
  • 用ws.Cells(ws.Rows.Count, "A").End(xlUp)可以自动定位到首列最后一个非空单元格,避免遍历大量空单元格,提升运行速度
  • 变量totalChar用Long类型,避免字符总数过多时溢出(Integer最大值是32767,不足以应对大量数据)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 01:15:37