Página 1 de 1

Microsoft Excel 2013 -> Função DECABIN.

Enviado: 14 Abr 2016 às 03:15
por Cidnei
Gostaria de saber como proceder para converter, na função DECABIN, um 'núm' maior que 511 e menor que -512, aumentar [casas], apenas como exemplo: converter o decimal 1962(base 10) para binário 11110101010(base 2) e o inverso binário para decimal, ou seja BINADEC, gostaria de trabalhar com estas conversões no Excel, é possível?
Na "Ajuda do Excel" só diz que: - Se núm < -512 ou se núm > 511, DECABIN retornará o valor de erro #NÚM!, o que comprovei!
Obs.: Tenho Excel 2013 e Win 7 Ultimate.
Forte abraço,
Cidnei C. Alencar

Microsoft Excel 2013 -> Função DECABIN.

Enviado: 15 Abr 2016 às 17:32
por orosolin2
A função DECABIN() tem essa limitação mesmo segundo o Help.

Uma alternativa é você mesmo construir um algoritmo para isso. Faz tanto tempo que aprendi isso na faculdade que não lembro mais...

Achei algo interessante no próprio site da Microsoft. Acho que vale a lida e tentar entender pra ver se se aplica.

Daí é só transformar numa UDF, fazer um teste de mesa comparando o resultado com o intervalo de aceitação da função DECABIN() e usar após comprovação que o algoritmo faz sentido.

Fonte: https://support.microsoft.com/en-us/kb/109260
Código: Selecionar todos
 Sub Text1_Change ()

      Dim i As Long, x As Long, bin As String
      Const maxpower = 30   ' Maximum number of binary digits supported.
      text1.MaxLength = 9   ' Maximum number of decimal digits allowed.
      text2.Enabled = False ' Prevent typing in second text box.
      bin = ""  'Build the desired binary number in this string, bin.
      x = Val(text1.Text) 'Convert decimal string in text1 to long integer

      If x > 2 ^ maxpower Then
         MsgBox "Number must be no larger than " & Str$(2 ^ maxpower)
         text2.Text = ""
         Exit Sub
      End If

      ' Here is the heart of the conversion from decimal to binary:

      ' Negative numbers have "1" in the 32nd left-most digit:
      If x < 0 Then bin = bin + "1" Else bin = bin + "0"

      For i = maxpower To 0 Step -1
         If x And (2 ^ i) Then   ' Use the logical "AND" operator.
            bin = bin + "1"
         Else
            bin = bin + "0"
         End If
      Next
      text2.Text = bin  ' The bin string contains the binary number.

   End Sub
Abs.

Microsoft Excel 2013 -> Função DECABIN.

Enviado: 20 Abr 2016 às 00:31
por Cidnei
Olá orosolin2, muito obrigado pelo apoio e presteza.
O programa funciona perfeitamente e é ótimo!
Estou tentando invertê-lo para BINADEC, ou seja, binário para decimal, que também preciso, conforme mencionei em minha pergunta acima, mas meu conhecimento em VBA é muito pouco!
Teria uma sugestão?
Abraço,
Cidnei C. Alencar