Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Dezimal in Binär

Dezimal in Binär
David
Hallo zusammen,
gibt es in VBA eine Funktion analog Hex(), die eine Dezimalzahl in eine Binärzahl als String umwandelt?
Hex und Oct habe ich gefunden, aber keine Bin. Die Excelfunktionen lassen sich wohl auch nicht nutzen, da die nur per Addin funzen, oder?
Gruß
David
Anzeige

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Dezimal in Binär
06.07.2009 10:58:01
Kawensmann
Hallo,
so geht's:
Function dec2bin(ByVal lngZahl As Long) As String If lngZahl > 0 Then dec2bin = dec2bin(lngZahl \ 2) & IIf(lngZahl Mod 2, "1", "0") End Function


Gruß
Kawensmann

AW: Dezimal in Binär
06.07.2009 11:21:16
David
Danke, genau DAS habe ich gesucht.
Gruß
David
AW: Dezimal in Binär
06.07.2009 11:24:44
Kawensmann
Wobei Ransis Code genau das gleiche macht, aber auch für größere Zahlen als Long geeignet ist...
Anzeige
AW: Dezimal in Binär
06.07.2009 11:27:55
David
Für meine Zwecke ist long mehr als ausreichend.
Gruß
AW: Dezimal in Binär
06.07.2009 10:58:34
ransi
HAllo
Excel hat da was eigenes.
DezinBin() und BinInDez().
Aber irgendwie funktionieren die bei mir nicht richtig.
HAb mir was eigenes geschrieben:
' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************


Option Explicit


Public Function DezToBin(zahl) As String
Dim TMP As Variant
Dim L As Double
Dim s As String
TMP = CDec(zahl)
Dim P As Long
'MsgBox Log(zahl) / Log(2)
P = Log(zahl) / Log(2)
Redim B(P) As Byte
For L = P To 0 Step -1
    Select Case TMP - 2 ^ L
        Case Is < 0: B(L) = 48
        Case Is >= 0: B(L) = 49: TMP = CDec(TMP - 2 ^ L)
    End Select
Next
If B(UBound(B)) = 48 Then Redim Preserve B(UBound(B) - 1)
DezToBin = StrReverse(StrConv(B, vbUnicode))
End Function


Public Function BinToDez(BinZahl As String)
Dim B() As Byte
Dim TMP
Dim L As Long
B = StrConv(StrReverse(BinZahl), vbFromUnicode)
For L = LBound(B) To UBound(B)
    If B(L) = 49 Then TMP = CDec(TMP + 2 ^ L)
Next
BinToDez = CStr(TMP)
End Function

Aufruf ist dann so:
Tabelle1

 AB
112345678912345811100000100100010000110000011111001000110000010
2123456789123458 

Formeln der Tabelle
ZelleFormel
B1=DezToBin(A1)
A2=BinToDez(B1)


Excel Tabellen im Web darstellen >> Excel Jeanie HTML 4
ransi
Anzeige
AW: Dezimal in Binär
06.07.2009 11:10:37
David
Hallo ransi,
danke, aber leider für meinen Zweck unpassend.
Ich brauche ja eben nicht das Ergebnis in Excel sondern als String innerhalb meines Codes!
Gruß
David
AW: Dezimal in Binär
06.07.2009 11:15:59
ransi
HAllo
Wo ist das Problem ?
Option Explicit

Public Sub test()
Dim Z As Long
Dim strText As String
Z = 123456789
strText = DezToBin(Z)
MsgBox strText
End Sub

Public Function DezToBin(zahl) As String
Dim TMP As Variant
Dim L As Double
Dim s As String
TMP = CDec(zahl)
Dim P As Long
'MsgBox Log(zahl) / Log(2)
P = Log(zahl) / Log(2)
Redim B(P) As Byte
For L = P To 0 Step -1
    Select Case TMP - 2 ^ L
        Case Is < 0: B(L) = 48
        Case Is >= 0: B(L) = 49: TMP = CDec(TMP - 2 ^ L)
    End Select
Next
If B(UBound(B)) = 48 Then Redim Preserve B(UBound(B) - 1)
DezToBin = StrReverse(StrConv(B, vbUnicode))
End Function

ransi
Anzeige
AW: Dezimal in Binär
06.07.2009 11:24:16
David
Ok, ich muss gestehen, als ich in deinem Beitrag auf das Ergebnis geschaut habe, was für mich unpassend war, habe ich mir deinen Lösungsansatz gar nicht weiter zu Gemüte geführt.
Ich kann leider mit meinen beschränkten VBA-Kenntnissen nicht erkennen, ob deine Lösung gegenüber der von Kawensmann etwas Anderes macht, aber seine Lösung reicht auf jeden Fall für meine zwecke vollkommen aus.
Trotzdem Dank für deine Mühe.
Gruß
David
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Dezimal in Binär umwandeln in Excel und VBA


Schritt-für-Schritt-Anleitung

Um eine Dezimalzahl in eine Binärzahl umzuwandeln, kannst Du entweder Excel-Funktionen oder VBA verwenden. Hier sind die Schritte für beide Methoden:

1. Verwendung von Excel-Funktionen:

  • Excel bietet die Funktion DEC2BIN() für die Umwandlung von Dezimal in Binär. Diese Funktion funktioniert nur bis zu einer maximalen Dezimalzahl von 511.
  • Beispiel:
     =DEC2BIN(A1)
  • Diese Formel wandelt die Zahl in Zelle A1 in eine Binärzahl um.

2. Verwendung von VBA:

  • Du kannst auch eine benutzerdefinierte VBA-Funktion erstellen. Hier ist ein Beispiel für eine einfache Funktion:
     Function dec2bin(ByVal lngZahl As Long) As String
         If lngZahl > 0 Then dec2bin = dec2bin(lngZahl \ 2) & IIf(lngZahl Mod 2, "1", "0")
     End Function
  • Diese Funktion kannst Du dann in Deinem VBA-Code verwenden, um Dezimalzahlen in Binärzahlen zu konvertieren.

Häufige Fehler und Lösungen

  1. Fehler bei der Verwendung von DEC2BIN():

    • Problem: Wenn Du eine Zahl größer als 511 eingibst, erhältst Du einen Fehler.
    • Lösung: Nutze VBA-Funktionen, um größere Zahlen zu verarbeiten.
  2. VBA-Funktion gibt keine Binärzahl zurück:

    • Problem: Die Funktion wurde nicht korrekt implementiert.
    • Lösung: Stelle sicher, dass die Funktion korrekt im Modul definiert ist und dass Du die richtige Zahl übergibst.

Alternative Methoden

Wenn Du keine VBA für die Umwandlung nutzen möchtest, gibt es auch einige andere Methoden:

  • Verwendung einer Excel-Tabelle: Erstelle eine Tabelle, in der Du die Dezimalwerte manuell eingibst und die Binärwerte daneben berechnest.
  • Online-Konverter: Es gibt viele Webseiten, die eine Umwandlung von Dezimal in binär anbieten, wenn Du eine schnelle Lösung brauchst.

Praktische Beispiele

Hier sind einige praktische Beispiele, wie Du eine Dezimalzahl in eine Binärzahl umwandeln kannst:

  1. Excel-Beispiel:

    • Angenommen, Zelle A1 enthält die Zahl 10.
    • In Zelle B1 kannst Du die Formel =DEC2BIN(A1) verwenden, um das Ergebnis 1010 zu erhalten.
  2. VBA-Beispiel:

    • In einem VBA-Modul kannst Du die Funktion dec2bin() verwenden:
      Dim binResult As String
      binResult = dec2bin(10) ' Gibt "1010" zurück

Tipps für Profis

  • Wenn Du mit sehr großen Zahlen arbeitest, erwäge die Verwendung von Double anstelle von Long in Deiner VBA-Funktion, um die maximale Zahl zu erhöhen, die verarbeitet werden kann.
  • Du kannst auch eine Kombination aus Excel und VBA verwenden, um Deine Daten effizient zu verwalten, z.B. indem Du die Umwandlungen in einer Tabelle speicherst und dann über VBA darauf zugreifst.

FAQ: Häufige Fragen

1. Frage Kann ich auch negative Dezimalzahlen in Binärzahlen umwandeln?

Antwort: Standardmäßig unterstützt die Funktion DEC2BIN() nur positive Dezimalzahlen. Für negative Zahlen müsstest Du eine angepasste VBA-Funktion verwenden.

2. Frage Wie kann ich eine Binärzahl wieder in eine Dezimalzahl umwandeln?

Antwort: Du kannst die Excel-Funktion BIN2DEC() verwenden oder eine VBA-Funktion wie BinToDez() definieren, um die Umwandlung durchzuführen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige