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)