如何用VBA返回一行中首个非空白单元格的值?
实现一行中首个非空白单元格值的VBA代码
问题分析
你需要在每行的指定5列范围内找到首个非空单元格,并将其值写入目标列。原代码的If-Then逻辑仅能处理紧邻列的情况,无法遍历后续列,因此需要改为循环遍历的方式实现需求。
修正后的VBA代码
Sub GetFirstNonBlank() Dim lRow As Long Dim i As Long Dim col As Integer Dim targetCol As Integer, startCol As Integer, endCol As Integer ' 自定义列参数:目标列、遍历起始列、遍历结束列(示例为目标列G=7,遍历H到L共5列=8到12) targetCol = 7 startCol = 8 endCol = 12 ' 获取D列最后一行数据的行号 lRow = Cells(Rows.Count, "D").End(xlUp).Row ' 遍历每行数据 For i = 2 To lRow ' 在当前行的指定5列中找首个非空值 For col = startCol To endCol ' 排除空单元格和仅含空格的单元格 If Not IsEmpty(Cells(i, col).Value) And Trim(Cells(i, col).Value) <> "" Then Cells(i, targetCol).Value = Cells(i, col).Value Exit For ' 找到首个非空值后退出内层循环,无需继续遍历 End If Next col Next i End Sub
代码说明
- 可通过修改
targetCol、startCol、endCol三个参数,灵活调整目标列和需要遍历的5列范围 - 加入
Trim判断是为了避免把仅含空格的单元格误判为非空 - 找到首个非空值后立即退出内层循环,能提升代码运行效率
内容的提问来源于stack exchange,提问作者user29028421
相关产品推荐
相关产品推荐

