使用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
我做错了什么。谢谢你的帮助!
答案 0 :(得分: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的中间没有空白单元格,则应该给出相同的结果。
答案 1 :(得分:0)
我建议退出XL VBA编程的.Select
方法,转而采用直接寻址方式,不会让您误入歧途。
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和.Range它们属于With ... End With
块中引用的工作表;在此示例中为Sheets("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
与工作表交互时,批量操作每次都会打圈;唯一的问题是多少。