八进制到二进制,用于excel中的12位数字

时间:2017-01-08 11:11:00

标签: excel vba excel-vba excel-formula

我正在尝试将12位八进制数转换为二进制数

但看起来像excel的内置函数OCT2Bin不适用于大于517的数字

所以我尝试拆分数字并将它们连接起来,但它没有用

我试过

=OCT2BIN(MID(A2,1,2))&OCT2BIN(MID(A2,3,2))&OCT2BIN(MID(A2,5,2))&OCT2BIN(MID(A2,7,2))&OCT2BIN(MID(A2,9,2))&OCT2BIN(MID(A2,11,2))

例如八进制到数字的二进制

123456765432 

1010011100101110111110101100011010

但我的公式正在回归

101011100101110111110101100110100

我知道公式不起作用,因为我不应该破坏数字并将它们连接起来。但我不知道如何在excel中处理它

有没有办法将12位八进制数转换为二进制数?

3 个答案:

答案 0 :(得分:4)

由于excel-vba也被标记,因此使用VBA可以解决这个问题。

Public Function myDec2Bin(ByVal decValue As Double) As String
 Select Case decValue
  Case 0
   myDec2Bin = "0"
  Case 1
   myDec2Bin = "1"
  Case Else
   myDec2Bin = myDec2Bin(Int(decValue / 2)) & IIf(decValue / 2 = Int(decValue / 2), "0", "1")
 End Select
End Function

Public Function myOct2Dec(octValue As String) As Double
 Dim decValue As Double
 For i = 0 To Len(octValue) - 1
  decValue = decValue + Mid(octValue, i + 1, 1) * (8 ^ (Len(octValue) - 1 - i))
 Next
 myOct2Dec = decValue
End Function

Public Function myOct2Bin(octValue As String) As String
 Dim decValue As Double
 decValue = myOct2Dec(octValue)
 myOct2Bin = myDec2Bin(decValue)
End Function

这些UDF都可以用作以下单元格公式:

=myOct2Bin(A2)

答案 1 :(得分:3)

连接函数没有问题,因为八进制数中的每个数字都代表二进制的3位数。 你的问题是省略了前导零,例如在您的示例中34o = 011100但是没有返回第一个0,因此您只连接11100. OCT2BIN函数有另一个参数,您可以在其中确定返回的位数:

OCT2BIN(34) = 11100
OCT2BIN(34, 6) = 011100

截至表现:您可以一次转换3个八进制数字,而不只是2个。

答案 2 :(得分:2)

试试这个,我检查了结果enter image description here