替换部分字符串(Excel VBA)

时间:2016-09-27 14:58:30

标签: excel string excel-vba 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”后面的双字母代码,但似乎无法使用REPLACE()函数执行此操作。我不熟悉VBA使用InStr。

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

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

“H”代表March

“M”代表六月

“U”代表九月

“Z”代表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月)

等等。

先谢谢你的帮助!

1 个答案:

答案 0 :(得分:2)

尝试:

=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决定将H替换为M,将M替换为U等

当且仅当字母为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))