replace部分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 

我试图replace后面的“BAC”的2个字母的代码,但似乎无法使用REPLACE()函数。 我不太熟悉VBA使用InStr。

背景 :“BAC”后面的两个字符代表一个月和一年。

双字符代码中的第一个字符表示一个月。 例如,

“H”代表三月

“M”代表六月份

“U”代表9月份

“Z”代表十二月

只有四个月(三月,六月,九月,十二月)。

2字符代码中的第二个字符表示年份。 例如,

“6”代表2016年

“7”代表2017年

“8”代表2018等等

有没有人知道一个解决scheme,可以用下一个 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来确定replace代码的字母部分的内容。

FIND定位两个字符代码,replace为REPLACE或用MID函数检查。

VLOOKUP决定用M代替H,用U代替M等

当且仅当字母是Z时,最后的布尔相等性testing决定将数字加1。

编辑: OP表示他可能想要search要replace的部分之前的几个代码之一。 这可以通过在FIND函数find_text参数中使用数组常量来完成。 我们还将这些常量添加到string的末尾以避免错误取决于找不到。 MIN返回最小的数字,如果find密钥,它将在密钥中。

在这个修改中,我也使用了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))