繁体   English   中英

替换字符串的一部分(Excel VBA)

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM