Excel VBA图表使用指定不连续区域作为数据源的问题求助
问题解决方法
核心错误原因
你调用Range对象时的传参方式不符合需求:
- 当你使用
Range(区域1, 区域2)的写法时,VBA会返回两个区域围出的最小连续矩形范围,所以会自动选中44行到合计行之间的所有行 - 你需要的是多个不相交区域的联合,不能用这种写法
- 额外问题:你的代码目前只会匹配到A列第一个包含
Total的行,如果有多个合计行(对应你录制宏里的两个合计行)会漏数据,且硬编码的E44:G44不符合行数浮动的适配要求,同时不必要的Select操作会降低代码稳定性。
修正后的完整代码
Sub GenerateTotalChart() Dim searchRng As Range, findCell As Range, firstFindAddr As String Dim dataRng As Range ' 定义查找范围为A列 Set searchRng = ActiveSheet.Range("A:A") ' 查找第一个包含Total的单元格,明确指定所有查找参数避免默认值干扰 Set findCell = searchRng.Find(What:="Total", LookIn:=xlValues, LookAt:=xlPart, _ MatchCase:=False, SearchOrder:=xlByRows, SearchDirection:=xlNext) If Not findCell Is Nothing Then firstFindAddr = findCell.Address ' 循环查找所有含Total的行,拼接数据区域 Do ' 把当前合计行的E-G列加入数据源 If dataRng Is Nothing Then Set dataRng = ActiveSheet.Range("E" & findCell.Row & ":G" & findCell.Row) Else Set dataRng = Union(dataRng, ActiveSheet.Range("E" & findCell.Row & ":G" & findCell.Row)) End If ' 查找下一个 Set findCell = searchRng.FindNext(findCell) Loop Until findCell.Address = firstFindAddr End If ' 生成图表 If Not dataRng Is Nothing Then ActiveSheet.Shapes.AddChart2(216, xlBarClustered).Select ActiveChart.SetSourceData Source:=dataRng Else MsgBox "未找到任何合计行,请检查数据", vbExclamation End If End Sub
改动说明
- 用
Union方法拼接多个不相交的合计行区域,完全避免选中中间行的问题 - 自动匹配A列所有包含
Total的合计行,不需要硬编码任何行号,适配不同行数的文件 - 查找时明确指定所有参数,避免环境差异导致的查找错误
- 增加了异常判断,未找到合计行时给出提示,避免代码报错
内容的提问来源于stack exchange,提问作者Sam
相关产品推荐
相关产品推荐

