0

使用 Excel 2010,我正在尝试创建一个脚本,该脚本将 Sheet1 中的两个文本列(A 和 B)连接起来,并将结果粘贴到 Sheet2 的 A 列中。

工作簿使用外部数据源加载两列,因此行数不固定。

我尝试了以下代码,但无法正常工作。变量 lRow 没有取值。

Sub Concat()
Sheets("Sheet1").Select
Dim lRow As Long
lRow = Range("A" & Rows.count).End(xlUp).Row
For i = 2 To lRow
    ActiveWorkbook.Sheets("Sheet2").Cells(i, 1) = Cells(i, 1) & Cells(i, 2)
Next i

End Sub

我究竟做错了什么。感谢您的帮助!

4

2 回答 2

1

至于你做错了什么,我建议你使用

Sub Concat()
    Sheets("Sheet1").Select
    Dim lRow As Long, i As Long
    Dim rng As Range
    Set rng = Range("A" & Rows.Count).End(xlUp)
    Debug.Print rng.Address(External:=True)
    lRow = rng.Row
    For i = 2 To lRow
        ActiveWorkbook.Sheets("Sheet2").Cells(i, 1) = Cells(i, 1) & Cells(i, 2)
    Next i
End Sub

看看发生了什么。我完全尝试了您使用的方法,它对我有用(Excel 2010)。

指定“变量 lRow 没有任何价值”的含义会有所帮助。

你也可以试试

Sub Concat2()
    Sheets("Sheet1").Select
    Dim lRow As Long, i As Long
    Dim rng As Range
    Set rng = Range("A2").End(xlDown)
    Debug.Print rng.Address(External:=True)
    lRow = rng.Row
    For i = 2 To lRow
        ActiveWorkbook.Sheets("Sheet2").Cells(i, 1) = Cells(i, 1) & Cells(i, 2)
    Next i
End Sub

如果源列 A 的中间没有空白单元格,它应该给出相同的结果。

于 2013-11-13T15:07:42.327 回答
0

我建议放弃.SelectXL VBA 编程的方法,转而支持直接寻址,这样不会让你陷入错误。

Sub Concat()
    Dim i As Long, lRow As Long
    With Sheets("Sheet1")
        lRow = .Range("A" & Rows.Count).End(xlUp).Row
        For i = 2 To lRow
            Sheets("Sheet2").Cells(i, 1) = .Cells(i, 1) & .Cells(i, 2)
        Next i
    End With
End Sub

注意前缀和.的句点(又名 . 或句号) 。这些告诉 .Cells 和 .Range 它们属于块中引用的工作表;在这个例子中是..Cells.RangeWith ... End WithSheets("Sheet1")

如果你有很多行要串在一起,你最好从 Sheet1 创建一个值数组并在内存中处理连接。拆分连接的值并将它们返回给 Sheet2。

Sub concat2()
    Dim c As Long, rws As Long, vCOLab As Variant
    With Sheets("Sheet1")
        rws = .Range("A2:A" & .Cells(Rows.Count, 1).End(xlUp).Row).Rows.Count
        vCOLab = .Range("A2").Resize(rws, 3)
        For c = LBound(vCOLab, 1) To UBound(vCOLab, 1)
            'Debug.Print vCOLab(c, 1) & vCOLab(c, 2)
            vCOLab(c, 3) = vCOLab(c, 1) & vCOLab(c, 2)
        Next c
    End With
    Sheets("Sheet2").Range("A2").Resize(rws, 1) = Application.Index(vCOLab, , 3)
End Sub

与工作表交互时,批量操作每次都会跳一个循环;唯一的问题是多少。

于 2015-01-10T13:23:33.703 回答