如何获取Excel列最后5个值并拼接,有没有更简便的实现方式?
更优实现方案
原代码可优化点
- 重复多次计算A列最后一行位置,冗余度高
- 硬编码写死5个取值逻辑,后续要调整取数个数需要修改多处代码
- 未做边界校验,如果A列总数据量不足5行时会出现取值错误
- 多次单独读取单元格内容,执行效率偏低
优化后VBA实现
Sub 拼接最后N个单元格值() ' 可根据需求自定义要取最后多少个值,调整此处即可 Const TAKE_COUNT As Integer = 5 Dim lastRow As Long, i As Integer, result As String ' 仅计算一次A列最后有数据的行号 lastRow = Cells(Rows.Count, "A").End(xlUp).Row ' 边界处理:数据行数不足取数个数时,自动取全部现有值 Dim realTake As Integer realTake = IIf(lastRow < TAKE_COUNT, lastRow, TAKE_COUNT) ' 循环拼接取值 For i = 0 To realTake - 1 result = result & Cells(lastRow - i, "A").Value Next ' 输出结果到A1单元格 Cells(1, "A").Value = result End Sub
优化说明
- 取数个数定义为常量,后续调整取数数量只需要改
TAKE_COUNT一个参数即可,扩展性更强 - 仅计算一次最后行号,减少不必要的单元格操作
- 新增边界判断逻辑,A列数据不足5行时也不会报错,会自动拼接所有现有值
- 用循环实现拼接逻辑,代码更简洁,可维护性更高
- 用VBA内置常量
xlUp代替魔术数3,代码可读性更好
无VBA方案(适用于Excel 365/2021及以上版本)
不需要写代码,直接在A1单元格输入以下公式即可实现相同效果:=TEXTJOIN("",TRUE,TAKE(SORTBY(A:A,ROW(A:A),-1),5))
效果示例

内容的提问来源于stack exchange,提问作者user13086212
相关产品推荐
相关产品推荐

