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

如何编写Excel VBA代码自动扫描最后一行并验证数据输入?

解决方案

要适配多行数据的验证需求,我们需要先定位数据区域的最后一行,再通过循环遍历所有数据行,逐一检查指定列的单元格是否为空。以下是修改后的代码及说明:

修改后的代码

Private Sub Validation()
    Dim wb As Workbook: Set wb = ThisWorkbook
    Dim ws As Worksheet: Set ws = wb.Sheets("Data")
    Dim lastRow As Long
    Dim i As Long
    
    ' 获取数据区域最后一行(假设A列为数据起始列,若实际列不同可修改为对应列号/列名)
    lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
    
    ' 从第2行开始遍历到最后一行(假设第1行为表头)
    For i = 2 To lastRow
        ' 检查第10列(J列)是否为空
        If ws.Cells(i, 10).Value = "" Then
            MsgBox "第" & i & "行的Data_1未填写", vbCritical
            ws.Cells(i, 10).Select ' 定位到空单元格,方便用户快速填写
            Exit Sub
        End If
        
        ' 检查第17列(Q列)是否为空
        If ws.Cells(i, 17).Value = "" Then
            MsgBox "第" & i & "行的G_dormant_company未填写", vbCritical
            ws.Cells(i, 17).Select
            Exit Sub
        End If
        
        ' 可选:检查第18列(R列)的Data_3,原代码未做验证,若需要可取消注释
        'If ws.Cells(i, 18).Value = "" Then
        '    MsgBox "第" & i & "行的Data_3未填写", vbCritical
        '    ws.Cells(i, 18).Select
        '    Exit Sub
        'End If
    Next i
    
    ' 所有行验证通过后的提示(可选)
    MsgBox "所有数据验证通过", vbInformation
End Sub

关键修改点说明

  • 动态获取最后一行:使用ws.Cells(ws.Rows.Count, "A").End(xlUp).Row自动定位数据区域的最后一行,彻底摆脱固定行号的限制。如果你的数据起始列不是A列,只需将"A"修改为实际列名(如"B")或列号(如2)即可。
  • 循环遍历多行:通过For i = 2 To lastRow遍历所有数据行(假设第1行为表头,若数据从第1行开始则改为For i = 1 To lastRow)。
  • 精准提示与定位:提示信息中增加具体行号,并自动选中空单元格,让用户能快速定位补填。
  • 可扩展验证:保留了第18列(Data_3)的验证代码,若需要验证该列,取消注释即可启用。

注意事项

如果数据区域存在中间空行,End(xlUp)会停在第一个非空行的上方。若需要跳过中间空行,可在循环中增加判断逻辑(比如检查整行是否为空后跳过)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 22:55:33