如何将位数转换为数字

我正在使用VBA创buildExcelmacros以将位串转换为数字。 它们不是二进制数字,每个“1”代表它自己的数字。

例如:1100000000000000000010001

从左边开始,第一位表示“1”,第二位表示“2”,第三位表示“0”,以此类推。 每个string中的总位数是25。

我想VBA转换它,并显示如下结果:1,2,21,25。

我尝试使用文本到列,但没有成功。

另一个非VBA的解决scheme,基于OP的初始方法,并devise了一个旨在促进多个“转换”(即复制公式以适应)的布局:

在这里输入图像说明

尝试这样的事情:

 Sub Execute() Dim buff() As String Dim i As Integer, total As Double buff = Split(StrConv(<theString>, vbUnicode), Chr$(0)) total = 0 For i = 0 To UBound(buff) Debug.Print (buff(i)) 'total = total + buff(i) * ?? Next i End Sub 

考虑:

 Public Function BitPicker(sIn As String) As String For i = 1 To Len(sIn) If Mid(sIn, i, 1) = 1 Then BitPicker = BitPicker & i & "," End If Next BitPicker = Mid(BitPicker, 1, Len(BitPicker) - 1) End Function 

这是否必须是VBA? 给这样的数据设置:

从位串转换

单元格B4中的公式并复制到B33是:

 =IF(ROWS(B$3:B3)>LEN($B$1)-LEN(SUBSTITUTE($B$1,"1","")),"",FIND("@",SUBSTITUTE($B$1,"1","@",ROWS(B$3:B3)))) 

公式单元格被格式化为常规,位string单元格(B1)被格式化为文本。

尝试这个:

  Function ConvertMyRange(Rng As Range) As String Dim MyString As String MyString = Rng.Text Dim OutPutString As String For i = 1 To Len(MyString) If Mid(MyString, i, 1) = "1" Then OutPutString = OutPutString & ", " & i Next i ' Get rid of first ", " that was added in the loop If Len(OutPutString) > 0 Then OutPutString = Mid(OutPutString, 2) End If ConvertMyRange = OutPutString End Function 

对于你的input,输出是1,2,21,25