Excel 2019 VBA如何仅为包含数据的行设置行高为18?
解决Excel VBA设置仅含数据行的行高为18的问题
环境与需求
- 系统:Windows 10
- Excel版本:2019
- 需求:用VBA将工作表中仅包含数据的行的行高设置为18
原代码问题分析
你之前尝试的两段代码都存在逻辑问题:
第一段代码
UsedRowsHeight1:Sub UsedRowsHeight1() ActiveWorkbook.Worksheets("Titles Data").Range("A" & Rows.Count).End(xlUp).RowHeight = 18 End Sub这段代码仅修改了A列最后一个非空单元格所在的单独一行的行高,并未覆盖所有有数据的行。
第二段代码
UsedRowsHeight2:Sub UsedRowsHeight2() Rows().AutoFit Rows.End(xlUp).RowHeight = 18 End Sub先对所有行执行自动调整行高,之后仅修改工作表最后一行的行高,同样没有覆盖所有含数据的行,且未指定目标工作表,容易引发错误。
正确代码实现
方案1:基于已使用区域快速设置
直接定位工作表中所有已使用的单元格区域,批量设置对应行的行高:
Sub SetDataRowsHeight() Dim ws As Worksheet Dim usedRange As Range ' 指定目标工作表 Set ws = ActiveWorkbook.Worksheets("Titles Data") ' 获取工作表内已使用的单元格区域 Set usedRange = ws.UsedRange ' 批量设置该区域内所有行的行高为18 usedRange.Rows.RowHeight = 18 End Sub
方案2:精准排除空行(含仅空格的行)
如果需要严格排除无实际数据的行,可以逐行检查后设置:
Sub SetDataRowsHeightPrecise() Dim ws As Worksheet Dim lastRow As Long Dim i As Long Set ws = ActiveWorkbook.Worksheets("Titles Data") ' 获取A列最后一个非空行的行号(可根据数据起始列调整) lastRow = ws.Range("A" & ws.Rows.Count).End(xlUp).Row ' 逐行检查并设置行高 For i = 1 To lastRow ' 判断该行是否包含非空数据(排除纯空格行) If WorksheetFunction.CountA(ws.Rows(i)) > 0 Then ws.Rows(i).RowHeight = 18 End If Next i End Sub
代码说明
- 方案1操作高效,适合数据区域无大量空行的场景;
- 方案2通过
CountA函数判断行内是否有实际数据,精准度更高,若数据起始列不是A列,可修改lastRow的获取逻辑(比如用ws.UsedRange.Row + ws.UsedRange.Rows.Count - 1获取最后使用行)。
内容的提问来源于stack exchange,提问作者user2303407
相关产品推荐
相关产品推荐

