excel合并2列

时间:2016-09-01 07:31:33

标签: excel vba excel-vba macros

如何在我的电子表格中找到并合并2个不同的列并删除第二个?

第一个总是标题为Postnr,第二个标题始终为Postort。我想合并这些列,它们之间有两个空格。

示例

| Postnr | Postort    |
| 752 65 | Gothenburg |

运行代码后的结果:

Postaddress
752 65  Gothenburg

我的代码,用于查找和选择 Postnr

Dim rngPostnr As Range
Set rngPostnr = Range("A1:Z1").Find("Postnr")
Range(rngPostnr, rngPostnr.End(xlDown)).Select

3 个答案:

答案 0 :(得分:0)

我知道你不知道列的位置(但它在第一行)。

第一行的第一次迭代将找到列,然后根据找到的列号迭代值,构建新字符串并将其写入第10列(或任何其他列)。您可以根据需要添加更多逻辑,例如,何时停止迭代(当一个lastRow大于另一个时,等等......)

以下是您稍后可以使用的基本工作代码:

Sub findAndConcat()

'last column with data
lColumn = Cells(1, Columns.Count).End(xlToLeft).Column

'find Postnr and Postort columns
For i = 1 To lColumn
    If Cells(1, i) = "Postnr" Then
        PostnrColumn = i
        'Convert from column number to column letter
        PostnrColumnName = Split(Cells(, PostnrColumn).Address, "$")(1)
    End If
    If Cells(1, i) = "Postort" Then
        PostortColumn = i
        PostortColumnName = Split(Cells(, PostortColumn).Address, "$")(1)
    End If
Next i

Dim PostnrValue As String
Dim PostortValue As String
Dim newString As String

'last row with data per column
PostnrLastRow = ActiveSheet.Cells(Rows.Count, PostnrColumnName).End(xlUp).Row
PostortLastRow = ActiveSheet.Cells(Rows.Count, PostortColumnName).End(xlUp).Row

'Iterating the columns rows and building the new concatinated string 
For i = 2 To PostnrLastRow
    PostnrValue = Cells(i, PostnrColumn).Value
    PostortValue = Cells(i, PostortColumn).Value
    newString = PostnrValue & "  " & PostortValue
    ActiveSheet.Cells(i, 10).Value = newString
Next i

End Sub

结果如下:

result

答案 1 :(得分:0)

如果你想在工作表中做到这一点,那么在公式栏上你应该像下面这样使用concatanate:=CONCATENATE(A2;" ";B2)

如果你想在vba中实现这一目标,你必须使用以下内容:

ActiveCell.Offset(0, 3).Value = ActiveCell.Value & " " & ActiveCell.Offset(0, 1).Value

其中activecell(Postnr)是第一个单元格,下一个单元格(偏移0,1 | Postort)是您要连接的第二个部分,结果将进一步插入到新列中。

编辑:以下是了解给定示例的结果: enter image description here

编辑2:因为您的问题不够明确,我会添加另一种方式。也许你想"添加"第一列到第一列(将列合并为一列)。 你可以只使用vba来做到这一点。

你必须做那样的事情:

ActiveCell.Value = ActiveCell.Value & " " & ActiveCell.Offset(0, 1).Value

答案 2 :(得分:0)

我理解如何在工作表中执行此操作,但我希望有一个宏可以执行此操作,因为我每天都会这么做很多次。

我也理解你的vba,但为了这个工作,我需要标记单元格,或者它自己找到postnr和postadress列。我不想自己找到并标记这些列,因为这是耗时的,因为我的表有很多列。你明白我的意思吗?

我需要一个宏来定位列并连接它们并删除它们并创建一个带有连接值的新列,最好使用标题Postaddress