簡體   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