我在表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月)
等等。
先谢谢你的帮助!
答案 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))