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

VBA提取带表头A列唯一值统计重复数时报错下标越界如何解决

报错原因

你读取A列数据时已经跳过了表头,取的是A2:A&lastR的范围存入数组arr,这个数组的有效行数是lastR - 1,但原代码的循环逻辑还是按全表行数lastR遍历,当循环变量i超过数组的最大下标时,访问arr(i,1)就会触发下标越界的运行时错误9。

适配带表头场景的修正代码
Sub uniqueValues()
   Dim sh As Worksheet, lastR As Long, arr, arrFin, i As Long, dict As Object
   
   Set sh = ActiveSheet '可替换为你需要处理的工作表,比如Set sh = Sheets("Sheet1")
   lastR = sh.Range("A" & sh.Rows.Count).End(xlUp).Row
   arr = sh.Range("A2:A" & lastR).Value '补全工作表对象引用,避免取错范围
   Set dict = CreateObject("Scripting.Dictionary")
   ' 循环上限改为数组的最大行下标,避免越界
   For i = 1 To UBound(arr, 1)
        dict(arr(i, 1)) = dict(arr(i, 1)) + 1
   Next i
   arrFin = Application.Transpose(Array(dict.Keys, dict.items))
   sh.Range("B2").Resize(dict.Count, 2).Value = arrFin
End Sub
修改说明
  • 将循环的遍历上限从lastR改为UBound(arr, 1),直接读取数组的最大行下标,不管数据行数多少都不会越界,适配性更强
  • 给读取A列范围的代码补全了工作表对象sh.,避免当前激活工作表不是目标表时读取错误数据
  • 代码保留了原逻辑,运行后会自动把A列的唯一值从B2开始输出,对应重复次数从C2开始输出,完全匹配你需要的带表头场景的效果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 16:54:00