求助:新增数据行后用VBA将A、B列单元格合并至C列(带下划线)
解决Excel VBA中A/B列内容合并到C列(下划线连接)的问题
直接给你整合了导入+合并功能的完整代码,同时优化了效率和精准性:
'Import Data & Merge Columns Dim FileToOpen As Variant Dim openbook As Workbook Dim wsTarget As Worksheet Dim originalLastRow As Long, newLastRow As Long Application.ScreenUpdating = False Set wsTarget = ThisWorkbook.Worksheets("NO PK") '记录粘贴前A列最后一行行号,定位新导入数据范围 originalLastRow = wsTarget.Range("A" & wsTarget.Rows.Count).End(xlUp).Row FileToOpen = Application.GetOpenFilename(Title:="Browse for your File & Import Range", Filefilter:="Excel Files (*.xlsx),*.xlsx") If FileToOpen <> False Then Set openbook = Application.Workbooks.Open(FileToOpen) openbook.Sheets(1).Range("A1").CurrentRegion.Copy '粘贴到目标表下一行空行 wsTarget.Range("A" & originalLastRow).Offset(1, 0).PasteSpecial xlPasteValues openbook.Close False '获取粘贴后的A列最后一行行号 newLastRow = wsTarget.Range("A" & wsTarget.Rows.Count).End(xlUp).Row '批量填充C列:A列内容_B列内容 With wsTarget.Range("C" & originalLastRow + 1 & ":C" & newLastRow) .Formula = "=A" & originalLastRow + 1 & "&""_""&B" & originalLastRow + 1 '如果需要把公式转为静态值,取消下面一行注释 '.Value = .Value End With End If Application.ScreenUpdating = True
关键说明
- 精准定位新数据:粘贴前记录原有最后一行,只处理刚导入的行,不会影响旧数据
- 高效批量处理:用
Range.Formula批量赋值,比逐单元格循环快数倍,适合大数据量 - 自动兼容数字+文本:不管A/B列是数字还是文本,都会自动转为文本格式拼接,无需额外类型转换
- 可选转为静态值:如果不需要保留公式关联,取消
.Value = .Value的注释即可把公式结果转为纯文本
替代方案:逐行处理(特殊场景用)
如果需要对某些行做特殊判断(比如跳过空行),可以用循环替代批量公式:
'替换批量公式的循环代码 Dim i As Long For i = originalLastRow + 1 To newLastRow '跳过A列空行 If wsTarget.Cells(i, "A").Value <> "" Then wsTarget.Cells(i, "C").Value = wsTarget.Cells(i, "A").Value & "_" & wsTarget.Cells(i, "B").Value End If Next i
内容的提问来源于stack exchange,提问作者little turtle
相关产品推荐
相关产品推荐

