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

求助:新增数据行后用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 21:23:22