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