连接2列

时间:2018-03-09 17:49:28

标签: vba concatenation

美好的一天,

如果我的串联代码请寻求帮助。我试图连接列E&薄片1中的G,进入薄片2中的B列。

sheet2上已有数据,所以我试图将数据复制到第2页的最后一行。

它仅连接工作表1中的最后一行,而不是放在正确的位置。

提前谢谢

Dim LastRowOutput As Long
    LastRowOutput = ThisWorkbook.Worksheets(2).Cells.SpecialCells(xlCellTypeLastCell).Row

Dim i As Integer
i = 2
While (ThisWorkbook.Worksheets(1).Range("A" & i).Value <> "")
    ThisWorkbook.Worksheets(2).Range("B" & (LastRowOutput + 1)).Value = _
        ThisWorkbook.Worksheets(1).Range("G" & i).Value & "," & _
        ThisWorkbook.Worksheets(1).Range("E" & i).Value
    i = i + 1
Wend

这是我得到的结果:

Sheet 1中

ID  First Name  Last Name    
1   John        Doe    
2   Joe         Smith    
3   Bob         Sled

Sheet 2中

Employee #  Employee name    
0           St Nick    
1           Sled,Bob    
2       
3   

1 个答案:

答案 0 :(得分:0)

我会先将值放入数组中,然后将它们连接起来,然后将值分配回工作表。这比逐行进行要快得多。

Sub test()

    Dim ws1 As Worksheet, ws2 As Worksheet
    Set ws1 = ThisWorkbook.Worksheets(1)
    Set ws2 = ThisWorkbook.Worksheets(2)

    'Place your cells into an array
    Dim valE() As Variant, valG() As Variant
    valE = ws1.UsedRange.Columns("E").Value
    valG = ws1.UsedRange.Columns("G").Value

    'Merge into a new 2-D array
    Dim retArr() As Variant, i As Long
    ReDim retArr(2 To UBound(valE))
    For i = 2 To UBound(valE)
        retArr(i) = valE(i, 1) & valG(i, 1)
    Next

    'determine the start and end rows to add data to
    Dim lngStart As Long, lngEnd As Long
    lngStart = NextRow(ws2, "B")
    lngEnd = UBound(retArr) + lngStart - LBound(retArr)

    ws2.Range("B" & lngStart & ":B" & lngEnd) = Application.Transpose(retArr)

End Sub

Function NextRow(ws As Worksheet, Optional col As Variant = 1) As Long
    With ws
        NextRow = .Cells(.Rows.Count, col).End(xlUp).Row + 1
    End With
End Function