excel - 在 Excel VBA 中使用列名连接多个列
问题描述
如图所示image_1
,我有一个产品的原始数据,如 B 列到 F 列所示。我想添加 A 列,它将“Model”、“Year”、“Number”数据连接成一个字符串。[a2] = "=concat(B2,D2,F2)"
我知道我可以简单地通过, 然后填充来实现这
一点。但问题是我每天收到的原始文件在列的顺序上是不一致的。因此,我不能使用上面显示的静态代码行。
我可能可以使用 for 循环和 if/else 的组合来测试列名是否等于“Model”、“Year”、“Number”,如果是,则获取其列号...
但是,我想知道是否有更直接和优雅的方式来实现这一点。有什么想法吗?
解决方案
一种简单的方法,基于按标题对列进行排序并在具有常数的列中合并数据(假设列数不变但顺序不同)。如果列数是可变的,则此代码将不起作用。
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
推荐阅读
- python-3.x - python命令生成程序时创建异常.exe已停止工作类型错误
- google-cloud-storage - 如何消除 gsutil 中的命令异常问题
- sql - 为什么将链接服务器用于外部和内部存储过程时不传播异常?
- c++ - 编译器看不到的类内部定义的友元函数
- html - thymeleaf 文本模式字符串如何保持每行的缩进
- html - Bootstrap 导航栏隐藏 #link 上的内容
- ios - 如何实现 iOS 13 SSO 扩展?
- arrays - 如何将字母数字值转换为 Typescript 中的值范围?
- javascript - ReactJS - 在更新表单中预填充动态字段
- php - 为什么 ping 属性在 html5 中无法正常工作