调整VBA宏:定位列中首个空白单元格而非数据末尾单元格
解决VBA宏填充JF列空行的问题
原代码的核心问题是使用.End(xlUp)会直接定位到JF列最后一个非空单元格,跳过中间的空行,导致值只会追加到数据末尾。要实现填充中间空行的需求,需要改为查找JF列第一个空单元格。
修正后的基础代码
Sub S2WL() Dim MyValue As Variant MyValue = ThisWorkbook.ActiveSheet.Range("C2").Value With Workbooks("Dash").Worksheets("DASH") ' 定位JF列第一个空单元格的行号 Dim firstEmptyRow As Long firstEmptyRow = .Columns("JF").Find(What:="", LookIn:=xlValues, LookAt:=xlWhole).Row ' 将值写入第一个空单元格 .Cells(firstEmptyRow, "JF").Value = MyValue End With End Sub
关键修正点
- 修复原代码语法错误:变量名
My Value改为MyValue(VBA变量名不允许包含空格) - 替换行号定位逻辑:用
Find方法精准定位JF列第一个值为空的单元格,替代原有的.End(xlUp)逻辑
优化版(处理列全满的情况)
如果JF列所有单元格都有值,上述代码会报错,因此可以增加判断逻辑,当找不到空单元格时,自动追加到数据末尾:
Sub S2WL() Dim MyValue As Variant MyValue = ThisWorkbook.ActiveSheet.Range("C2").Value With Workbooks("Dash").Worksheets("DASH") Dim firstEmptyRow As Long Dim emptyCell As Range ' 按行顺序查找JF列第一个空单元格 Set emptyCell = .Columns("JF").Find(What:="", LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext) If Not emptyCell Is Nothing Then firstEmptyRow = emptyCell.Row Else ' 列无空单元格时,追加到最后一行的下一行 firstEmptyRow = .Cells(.Rows.Count, "JF").End(xlUp).Row + 1 End If .Cells(firstEmptyRow, "JF").Value = MyValue End With End Sub
内容的提问来源于stack exchange,提问作者JupBrew
相关产品推荐
相关产品推荐

