在VBA Excel中连接2个特定列名之间的N列

时间:2015-06-15 18:53:29

标签: excel vba excel-vba

我正在尝试连接2个特定列之间的选定范围。我的第一个列名是“Product-name”(第一列是固定的),第二个特定列是不固定的。它可以是第3,第4,第5或N.该列的名称是“价格”。我想连接介于这两列之间的所有列。我尝试了以下代码。

Sub test()

    Cells(1, 1).Select
    j = 1
Do
    k = Cells(1, j).Value
    Cells(1, j).Select
    j = j + 1
Loop Until (k = "Product-name")
c1 = j
Do
    k = Cells(1, j).Value
    Cells(1, j).Select
    j = j + 1
Loop Until (k = "Price")
c2 = j - 2
If (c2 > c1) Then

  'I am doing something wrong here. Please let me know the correct syntax
  CONCATENATE(Range(Columns(c1), Columns(c2)))

End If


End Sub

1 个答案:

答案 0 :(得分:1)

@nbayly是正确的,你不能连接像这样的整个范围,即使你不能将结果分配给任何东西。

以下是使用不同技术进行此操作的一种方法。测试数据如下所示:

enter image description here

确保将Product和Price设置为列或标题单元格作为命名范围。如果你不确定我的意思,这是一个例子:

enter image description here

现在运行以下代码:

Sub concatTest()
    Dim wks As Worksheet
    Set wks = ActiveSheet

    Dim colStart As String, colEnd As String

    colStart = wks.Range("ProductName").Column
    colEnd = wks.Range("Price").Column

    Dim resultString As String
    Dim LastRow As Integer: LastRow = wks.Cells.Find(What:="*", After:=[A1], SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row

    For eachRow = 2 To LastRow
        resultString = ""

        For y = colStart To colEnd
            resultString = resultString & wks.Cells(eachRow, y)
        Next y

        Debug.Print resultString
    Next eachRow
End Sub

结果在即时窗口中,您也可以将此数据放在某些列中:

enter image description here