[英]Replacing part of a string (Excel VBA)
我在工作表1中有以下数据:
A
1 1C BAC Z6 : CHF QM : 1M TOIS
2 2C BAC Z6 : CHF QM : 1M TOIS
3 3C BAC H7 : CHF QM : 1M TOIS
4 30C BAC H7 : CHF AM : 1M TOIS
5 45C BAC M7 : CHF QM : 1M TOIS
6 5C BAC Z7 : CHF QM : 1M TOIS
我正在尝试替换“ BAC”之后的2个字母的代码,但似乎无法使用REPLACE()函数来替换。 我对VBA不太熟悉,也无法使用InStr。
背景 :“ BAC”后面的2个字符的代码表示一个月和一年。
2个字符的代码中的第一个字符代表一个月。 例如,
“ H”代表三月
“ M”代表六月
“ U”代表9月
“ Z”代表十二月
只有四个月(3月,6月,9月,12月)。
2个字符的代码中的第二个字符表示年份。 例如,
“ 6”代表2016
“ 7”代表2017
“ 8”代表2018等,等等
有谁知道可以用下一个 2个字符代码(即下个月和下一年)替换2个字符代码的解决方案吗?
例如,
“ Z6”(2016年12月)将变为“ H7”(2017年3月)
“ H7”(2017年3月)将变为“ M7”(2017年6月)
“ M7”(2017年6月)将变为“ U7”(2017年9月)
“ U7”(2017年9月)将变为“ Z7”(2017年12月)
“ Z7”(2017年12月)将变为“ H8”(2018年3月)
等等等
在此先感谢您的帮助!
尝试:
=REPLACE(A1,FIND("BAC",A1)+4,2,VLOOKUP(MID(A1,FIND("BAC",A1)+4,1),{"H","M";"M","U";"U","Z";"Z","H"},2,FALSE)&MID(A1,FIND("BAC",A1)+5,1)+(MID(A1,FIND("BAC",A1)+4,1)="Z"))
我们将REPLACE
函数与VLOOKUP
一起使用,以确定用什么替换代码的字母部分。
FIND
定位于被替换为两个字符代码REPLACE
与或检查MID
功能。
VLOOKUP
决定用M替换H,用U等替换M
最后且仅当字母为Z
,布尔相等测试才决定将数字递增1。
编辑: OP表示他可能要搜索要替换的零件之前的几个代码之一。 这可以通过在FIND
函数的find_text参数中使用数组常量来完成。 我们还将这些常量添加到字符串的末尾,以避免根据找不到的错误而导致的错误。 MIN
返回最小的数字,如果找到了密钥,它将在密钥内。
在此修改中,我还使用了MOD
函数,以使9翻转为0 。
=REPLACE(A1,MIN(FIND({"BAC","EMC"},A1&"BACEMC"))+4,2,VLOOKUP(MID(A1,MIN(FIND({"BAC","EMC"},A1&"BACEMC"))+4,1),{"H","M";"M","U";"U","Z";"Z","H"},2,FALSE)&MOD(MID(A1,MIN(FIND({"BAC","EMC"},A1&"BACEMC"))+5,1)+(MID(A1,MIN(FIND({"BAC","EMC"},A1&"BACEMC"))+4,1)="Z"),10))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.