我正在尝试转换长度为27个字符的二进制数字
BIN2DEC(B2)
没用?
我也试过
=BIN2DEC(MID(B3,1,9))&BIN2DEC(MID(B3,10,9))&BIN2DEC(MID(B3,20,9))
我正在尝试的号码是
001010011100101110111110101
我得到的答案是
83302491
正确答案在哪里
21913077
答案 0 :(得分:2)
在octal to binary for 12 digit numbers in excel我已经提供了UDF
Public Function myOct2Dec(octValue As String) As Double
。你试过了解它是如何工作的吗?如果您了解这一点,那么您也可以将其调整为Bin到Dec转换:
Public Function myBin2Dec(binValue As String) As Double
Dim decValue As Double
For i = 0 To Len(binValue) - 1
decValue = decValue + Mid(binValue, i + 1, 1) * (2 ^ (Len(binValue) - 1 - i))
Next
myBin2Dec = decValue
End Function
像
一样使用它=myBin2Dec(B2)
使用公式不能简单地将拆分结果连接在一起。通过将八进制从/转换为二进制,这是可能的,因为8 ^ 0 = 2 ^ 0,8 ^ 1 = 2 ^ 3,8 ^ 2 = 2 ^ 6,...因此,对于一个八进制数字,正好需要3个二进制数字。但是将十进制从/转换为二进制是不可能的。 10 ^ 0 = 2 ^ 0,10 ^ 1 = 2 ^ ?.
所以你的公式必须考虑到最左边的9个二进制数字必须乘以2 ^ 0,从右到左的下9个数字必须乘以2 ^ 9,从右到左的下9个数字必须是乘以2 ^ 18。
=BIN2DEC(MID(B2,1,9))*2^18+BIN2DEC(MID(B2,10,9))*2^9+BIN2DEC(MID(B2,19,9))
但这实际上是非常静态的,因为它仅适用于精确长度为27的二进制值(9位数的3个部分)。
答案 1 :(得分:2)
这是一个引导现有工作表函数的VBA版本。它将二进制转换为十六进制,然后让工作表函数从十六进制转换为十进制:
Function Binary2Dec(ByVal s As String) As Variant
Dim i As Long, n As Long, r As Long
Dim h As String
n = Len(s)
r = n Mod 4
If r > 0 Then s = String(4 - r, "0") & s 'now the length of s is a multiple of 4
n = Len(s)
With Application.WorksheetFunction
For i = 1 To n - 3 Step 4
h = h & .Bin2Hex(Mid(s, i, 4))
Next i
Binary2Dec = CDec(.Hex2Dec(h))
End With
End Function
答案 2 :(得分:1)
这不需要VBA,可以用于各种长度的输入:
=SUM(VALUE(MID(B3,ROW(OFFSET($A$1,0,0,LEN(B3))),1))/(2^ROW(OFFSET($A$1,0,0,LEN(B3)))))*2^LEN(B3)
需要输入单格数组公式(即[F2]然后输入/粘贴公式,然后按[ctrl-shift-enter])