首页 > 解决方案 > 在 Excel VBA 中使用列名连接多个列

问题描述

如图所示image_1,我有一个产品的原始数据,如 B 列到 F 列所示。我想添加 A 列,它将“Model”、“Year”、“Number”数据连接成一个字符串。[a2] = "=concat(B2,D2,F2)"我知道我可以简单地通过, 然后填充来实现这 一点。但问题是我每天收到的原始文件在列的顺序上是不一致的。因此,我不能使用上面显示的静态代码行。

我可能可以使用 for 循环和 if/else 的组合来测试列名是否等于“Model”、“Year”、“Number”,如果是,则获取其列号...

但是,我想知道是否有更直接和优雅的方式来实现这一点。有什么想法吗?

图像_1

标签: excelvba

解决方案


一种简单的方法,基于按标题对列进行排序并在具有常数的列中合并数据(假设列数不变但顺序不同)。如果列数是可变的,则此代码将不起作用。

Sub concat()
    Dim rng As Range
    
    With ThisWorkbook.Worksheets(1)
        Set rng = .Range("A1").CurrentRegion
        ' columns sort
        With .Sort
            .SortFields.Clear
            .SortFields.Add2 Key:=rng.Rows(1)
            .SetRange rng
            .Orientation = xlLeftToRight
            .Apply
        End With
        Set rng = rng.Columns(1)
        rng.Insert  ' add cells at left for "Concat"
        Set rng = rng.Offset(0, -1)
        rng(1) = "Concat"   ' add header
        Intersect(rng, rng.Offset(1)).FormulaR1C1 = "=CONCAT(RC[2],RC[5],RC[3])"
    End With
End Sub


在此处输入图像描述


在此处输入图像描述


推荐阅读