vba excel – 在同一单元格内发现并replace条件+多次发生

我正在尝试写一个VBA代码; 我作为vba程序员有3天的经验。 所以根据我的pascal编程经验努力工作。

从excel中查找hexstring中的数字,如果奇数则检查数字的位置,然后用新数字replace该数字。 如果不奇怪,则继续在同一个string内search其他事件。 我有15,000六弦string,我需要recursionsearch。 范围(B1:B15000)

例:

Hexa string - Cell B1 - 53706167686574746920616c6c9261676c696f2c206f6c696f20652070657065726f63696e692537 

翻译成文本 – 意大利面条,橄榄peperocini

我想用65(e)代替92( ),但是用六个string,你会发现有92个数字出现多次,但只有一个92在奇数位置被replace。

在Excel中,我尝试了以下内容:

 =IF(ISODD(IF(ISERROR(SEARCH(92,B5)),0,SEARCH(92,B5)))=TRUE,SUBSTITUTE(B5,92,"27"),"no 92") 

这只适用于单元格中的第一次出现,试图修改它进一步search,但没有运气:

 =IF(ISODD(IF(ISERROR(SEARCH(92,B6)),0,SEARCH(92,B6)))=TRUE,SUBSTITUTE(B6,92,"27"),IF(ISODD(IF(ISERROR(SEARCH(92,B6,SEARCH(92,B6)+1)),0,SEARCH(92,B6,SEARCH(92,B6)+1)))=TRUE,SUBSTITUTE(B6,92,"27"),"no 92")) 

任何build议,欢迎。

如何看待一个小的UDF,只看每一个位置?

 Function replaceWhenAtOddPos(ByVal s As String, findStr As String, replaceStr As String) replaceWhenAtOddPos = s If Len(findStr) <> 2 Or Len(replaceStr) <> 2 Then Exit Function Dim i As Long For i = 1 To Len(s) Step 2 If Mid(s, i, 2) = findStr Then s = Left(s, i - 1) & replaceStr & Mid(s, i + 2) Next i replaceWhenAtOddPos = s End function 

呼叫:

 replaceWhenAtOddPos("53706167686574746920616c6c9261676c696f2c206f6c696f20652070657065726f63696e692537", "92", "65") 

请将下面的UDF放在标准模块中:

 Public Function replace_hex(str As String, srch As Integer, repl As Integer) As String Dim pos As Integer pos = InStr(pos + 1, str, CStr(srch)) Do Until pos = 0 If pos Mod 2 = 0 Then str = Left(str, pos - 1) & CStr(repl) & Mid(str, pos + 2) pos = InStr(pos + 1, str, CStr(srch)) Loop replace_hex = str End Function 

并在你的工作表中调用它: =replace_hex(A1,92,65)