如何使用单行VBA结构化表引用提取列中连字符后的文本内容
实现方案
可以直接替换为单行结构化公式写法,以下是不同场景的可用代码:
版本1:适配Excel 365/2021及以上版本
使用内置的TEXTAFTER函数,语法更简洁:
Range("CNSTime[[#Data],[Country]]").Formula = "=TEXTAFTER([@Country],""- "",1)"
如果不需要保留公式、只需要最终的文本值,可以在后面追加一行转值代码,最终效果和你原来的循环写法完全一致:
Range("CNSTime[[#Data],[Country]]").Formula = "=TEXTAFTER([@Country],""- "",1)" Range("CNSTime[[#Data],[Country]]").Value = Range("CNSTime[[#Data],[Country]]").Value
版本2:兼容所有Excel版本
对应你原有循环的截取逻辑,转写为通用工作表公式:
Range("CNSTime[[#Data],[Country]]").Formula = "=RIGHT([@Country],LEN([@Country])-FIND(""- "",[@Country])-1)"
表对象调用写法
如果你已经提前声明了表对象Set CNSTime = ActiveSheet.ListObjects("CNSTime"),可以用下面的写法,可读性和兼容性更强:
CNSTime.ListColumns("Country").DataBodyRange.Formula = "=TEXTAFTER([@Country],""- "",1)" ' 不需要保留公式则追加下一行 CNSTime.ListColumns("Country").DataBodyRange.Value = CNSTime.ListColumns("Country").DataBodyRange.Value
注意:公式中写的是
"- "(连字符加空格),匹配你给出的「国家全称 - 国家代码」格式,如果实际数据中连字符前后没有空格,把对应参数改成"-"即可。
内容的提问来源于stack exchange,提问作者Shoaib
相关产品推荐
相关产品推荐

