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))
- Excel条件格式:如果不是表2中的匹配突出显示描述,则将表1中的ID描述与表2中的ID描述进行比较
- 从Excel导入时,SQL Server Management Studio始终将$附加到表名
- 给定一个固定的单元格宽度,我可以更改字体大小,以便文本适合在单元格内?
- 公式自动填充操作
- Excelsearchdate格式
- MS Word引用不是函数| 自动化错误 – 库未注册| 错误-2147319779(8002801d)
- 奇数的excel-vba运行时错误,不会删除现有的工作表
- 在使用SSIS将其加载到目标表之前,如何在excel中合并列标题名称
- 如何在没有消息的情况下打开Excel工作簿工作簿包含指向其他数据源的链接。 编程?