在Excel应用程序中处理带有前导零的32位二进制字符串

时间:2018-09-18 07:36:21

标签: excel vba string binary

在单元格A1处,我有一个字符串“ 01000000 01xx0000 000000x1 000xx000”,其中x可以是0或1(请注意,它每8位有一个空格)
在单元格A2处,我有一个字符串0101(或1111)
在单元格A3中,我需要将A1字符串中的每个“ x”替换为A2字符串的相应数字。

因此,A3包含公式:= Substitute_pair(A1,“ x”,A2)

这意味着:
 -第一个出现的“ x”将替换为“ 0”
 -第二个出现的“ x”将替换为“ 1”
 -第三个出现的“ x”将替换为“ 0”
 -出现的第四个“ x”将替换为“ 1”

The original string is          "01000000 01xx0000 000000x1 000xx000"
The output/expected string is:  "01000000 010x0000 00000011 00001000"

下面的VBA脚本可在“ VBA调试”窗口中使用,但对于Excel应用程序,单元格A3始终返回0。

Public Function Substitute_pair(str As String, old_str As String, new_str As String) As Byte
    Dim str_origin As String
    For i = 1 To Len(new_str)
        tmp = Application.WorksheetFunction.Substitute(str, old_str, Mid(new_str, i, 1), 1)
        Debug.Print "Replacing " & i & " occurence " & old_str & " with value " & Mid(new_str, i, 1)
        str = tmp
    Next i
End Function

Sub test()
    Dim tmp As String
    tmp = Substitute_pair("01000000 01xx0000 000000x1 000xx000", "x", "11111")
End Sub

0 个答案:

没有答案