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

Excel VBA使用列最后一行获取代码遍历整列数值的实现方法

Excel VBA 遍历指定列有效数值区间方案

实现思路

你已获取到第4列(D列)最后一个有值单元格的行号,只需先定位该列第一个有值单元格的行号,再对行号区间遍历即可,下面提供两种常用实现方式:

方式1:逐单元格遍历(适合小数据量)

该方式逻辑直观,直接遍历区间内每个单元格取值,代码示例:

Sub 遍历D列有效数值()
    Dim firstRow As Long, lastRow As Long, i As Long
    ' 取D列最后一行行号
    lastRow = Cells(Rows.Count, 4).End(xlUp).Row
    ' 定位D列第一个有数值的行号,兼容列首/中间有空行的场景
    firstRow = Columns(4).Find(What:="*", LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext).Row
    ' 整列无数据时直接退出,避免报错
    If lastRow < firstRow Then Exit Sub
    ' 逐行遍历取值
    For i = firstRow To lastRow
        ' 此处替换为你自己的处理逻辑,示例为将值打印到立即窗口
        Debug.Print Cells(i, 4).Value
    Next i
End Sub

方式2:数组遍历(适合大数据量,效率更高)

数据量超过1000行时推荐用该方案,将整段区域一次性读入内存数组再遍历,效率远高于逐单元格读取:

Sub 数组方式高效遍历()
    Dim firstRow As Long, lastRow As Long
    Dim dataArr As Variant, i As Long
    lastRow = Cells(Rows.Count, 4).End(xlUp).Row
    firstRow = Columns(4).Find(What:="*", LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext).Row
    If lastRow < firstRow Then Exit Sub
    ' 将有效区域一次性读入数组
    dataArr = Range(Cells(firstRow, 4), Cells(lastRow, 4)).Value
    ' 遍历数组取值
    For i = 1 To UBound(dataArr, 1)
        ' 数组第i项对应原表第 firstRow + i -1 行的D列数值
        Debug.Print dataArr(i, 1)
    Next i
End Sub

注意事项

  • 若D列第一行是固定表头无需遍历,可直接将firstRow赋值为表头下第一行的行号(通常为2),无需调用Find方法
  • 仅当D列第一个数值上方无空行时,才可以用Cells(1,4).End(xlDown).Row取首行,否则优先用Find方法避免定位偏差
  • 若需要判断单元格是否为数值类型,可在遍历逻辑中加If IsNumeric(Cells(i,4).Value) Then的判断条件过滤非数值内容

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 05:15:00