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

Bits einer Zahl ermitteln, DezInBin in VBA

Forumthread: Bits einer Zahl ermitteln, DezInBin in VBA

Bits einer Zahl ermitteln, DezInBin in VBA
29.08.2006 16:43:28
Reinhard
Hallo Wissende,
wie kann ich die Bitanzahl einer Dezimalzahl (1 - 512) am schnellsten ermitteln?
Brauche ich dazu die Binärzahl der Dezimalzahl und muss ich zur Umwandlung von Dezimal in Binär selbst eine Funktion schreiben oder wie heißt die in VBA, finde da nichts.
Und MsgBox Application.WorksheetFunction.dezinbin(10) geht ja nicht.
Danke ^ Gruß
Reinhard
Anzeige

13
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
=GANZZAHL(LOG(A1;2))+1 oT
29.08.2006 16:49:30
ingoG
.
VBA-Lösung
29.08.2006 17:13:07
ingoG
Hallo Reinhard,
in VBA kannst Du das so umsetzen...
Gruß Ingo
PS eine Rückmeldung wäre nett...

Sub aaa()
MsgBox Int(Application.WorksheetFunction.Log(512, 2)) + 1
End Sub

AW: VBA-Lösung
29.08.2006 17:32:16
Reinhard
Hi Ingo,
ich experimentiere herum was am schnellsten ist.
Jetzt kam mir gerade der Gedanke, einmalig eine Tabelle für die Zahlen 1 bis 512 zu erstellen und nebendran die Anzahl der Bits zu schreiben. Dann kann ich da schnell mit Vlookup zugreifen.
Gruß
Reinhard
Anzeige
AW: VBA-Lösung
29.08.2006 17:45:06
ingoG
Hallo Reinhard,
vlookup() ist nicht schnell
dann bau dir lieber ein array und besetze die werte entsprechend
Gruß Ingo
PS eine Rückmeldung wäre nett...
Option Explicit

Sub aaa()
Dim binLaenge(1 To 512) As Integer, ii As Integer
For ii = 1 To 512
binLaenge(ii) = Int(Application.WorksheetFunction.Log(ii, 2)) + 1
Next ii
MsgBox binLaenge(512)
End Sub

Anzeige
AW: Bits einer Zahl ermitteln, DezInBin in VBA
29.08.2006 16:49:49
c0bRa
hio...
brauchst du nur die Bitanzahl der Zahl?
wenn ja:
=AUFRUNDEN(LOG(A1+1;2);0)
Um die Funktionen DEZINBIN etc. zu nutzen, musst du das Analyse Add-In unter Extras => Add-Ins aktivieren.
Rückmeldung nicht vergessen...
c0bRa
I hacked 127.0.0.1
Anzeige
AW: Bits einer Zahl ermitteln, DezInBin in VBA
29.08.2006 17:20:22
Reinhard
Danke euch beiden,
aber ich suche VBA-Lösungen wo ich aus Performancegründen auf eine Schleife in der Funktion verzichten kann. Also was Schnelles.
Aber okay, werde mal eure Lösungen prüfen ob sie mit Application.Worksheetfunction schneller als meine Funktion sind.
Inzwischen habe ich mir diese Funktion erstellt:
Function EinBit(ByVal Zahl As Integer) As Boolean
Dim n As Byte
For n = 0 To 8
If Zahl = 2 ^ n Then
EinBit = True
Exit For
End If
Next n
End Function

Gruß
Reinhard
Anzeige
AW: Bits einer Zahl ermitteln, DezInBin in VBA
29.08.2006 17:35:49
EtoPHG
Hallo Reinhard,
Wieso Worksheet function ?
VBA so:
NrOfBits = Int(Log(WholeNumber) / Log(2) + 1)
Gruss Hansueli
AW: Bits einer Zahl ermitteln, DezInBin in VBA
29.08.2006 18:44:49
Reinhard
Hi Hansueli,

Sub tt()
Dim NrOfBits
NrOfBits = Int(Log(64) / Log(2) + 1)
MsgBox NrOfBits
End Sub

klappt nicht, kommt 7 heraus, aber lass ma, ich nehm die Arraylösung von Ingo, scheinbar das Allerschnellste was geht.
Danke an Alle
Gruß
Reinhard
Anzeige
AW: Bits einer Zahl ermitteln, DezInBin in VBA
29.08.2006 19:06:28
EtoPHG
Hallo Reinhard,
Ich glaub^s nicht, aber Du hast recht.
Probier mal:

Sub tt()
Dim NrOfBits As Double
NrOfBits = Int(Log(64#) / Log(2#) + 1#)
MsgBox NrOfBits
MsgBox Int(Log(64#) / Log(2#) + 1#)
End Sub

Was zum Teufel soll das ?
die 7 bleibt unerreicht :-)
29.08.2006 19:19:43
Reinhard
Tja nu, k.A., irgendwas mit Typumwandlungen...
Sub ttt()
Dim NrOfBits As Double
NrOfBits = Int(Log(64#) / Log(2#) + 1#)   '                Anzeige:
MsgBox NrOfBits                           '                    7
MsgBox Int(Log(64#) / Log(2#) + 1#)       '                    6
MsgBox CDbl(Int(Log(64#) / Log(2#) + 1#)) '                    6
MsgBox Int(Log(64#) / CDbl(Log(2#) + 1#)) '                    2
MsgBox Int(Log(64#) / CDbl(Log(2#)) + 1#) '                    6
MsgBox Int(CDbl(Log(64#)) / CDbl(Log(2#)) + 1#) '              6
MsgBox CDbl(Int(CDbl(Log(64#))) / CDbl(Log(2#)) + 1#) '        6,77...
MsgBox CDbl(Int(CDbl(Log(64#))) / CDbl(Log(2#)) + CDbl(1#)) '  6,77...
MsgBox Int(CDbl(Log(64#)) / CDbl(Log(2#)) + CDbl(1#)) '        6
End Sub

Gruß
Reinhard
Anzeige
AW: doch jetzt ist's plötzlich 6
29.08.2006 19:58:11
EtoPHG
Hallo Reinhard,
Ich hab schon mal irgendwo einen Thread bezgl. der Genauigkeit von Excel beantwortet. Eigentlicht hätte ich es wissen müssen.
Antwort Excel rechnet mit 15 signifikanten Stellen.
Also die Formel
NrOfBits = Int(Log(WholeNumber) / Log(2#) + 0.99999999999999)
haut hin. Mach aber ja KEINE 9 mehr als hier angegeben ist ;-)
Gruss Hansueli
Anzeige
FALSCH -RICHTIG-FALSCH-RICHTIG
31.08.2006 09:19:01
EtoPHG
Hallo Reinhard,
Nochmals zu diesem Thema:
Wieviel Bits belegt die Zahl 64 ? 7 SIEBEN !!! und nicht 6 !!!!
Hier ist nun die ultimative VBA Formel:
getNrOfBits = Int(Log(Abs(IIf(thisNumber = 0, 1, thisNumber))) / Log(2) + 1)
Gruss Hansueli
mea culpa :-(
31.08.2006 09:57:39
Reinhard
Hallo Hansueli,
es tut mir leid für Alle die sich für mich Gedanken machten. Leider fällt mir erst jetzt auf dass die Frage wohl falsch gestellt war.
Mit ...wie kann ich die Bitanzahl einer Dezimalzahl (1 - 512) am schnellsten ermitteln?...
wollte ich ermitteln wieviele Bits "gesetzt" sind, nicht die Bitbreite. Da ich inzwischen eine Arraylösung
(ein in einer Tabelle aufgelistetes Array(512) hat in den Indexen 1,2,4,8,16,... den Wert 1/True bzw. die anderen Indices den Wert 0/False oder die Anzahl gesetzter Bits)
benutze kann ich sehr schnell feststellen ob die Zahl nur ein Bit besitzt. Von daher hatte ich die Formellösungen nicht weiterverfolgt um herauszufinden wie man auf "7" bei der DezZahl 64 kommt.
Deine Formel schaue ich mir trotzdem gerne an.
Gruß
Reinhard
Anzeige
;
Anzeige

Infobox / Tutorial

Bits einer Zahl ermitteln mit Excel und VBA


Schritt-für-Schritt-Anleitung

Um die Bitanzahl einer Dezimalzahl (1 - 512) in Excel zu ermitteln, kannst du folgende Schritte befolgen:

  1. VBA-Editor öffnen: Drücke ALT + F11, um den VBA-Editor zu öffnen.

  2. Neues Modul erstellen: Klicke mit der rechten Maustaste auf „VBAProject (DeineArbeitsmappe)“ und wähle „Einfügen“ > „Modul“.

  3. Code einfügen: Kopiere den folgenden Code in das Modul:

    Function AnzahlBits(ByVal Zahl As Integer) As Integer
        If Zahl < 1 Or Zahl > 512 Then
            AnzahlBits = -1 ' Ungültige Eingabe
            Exit Function
        End If
        AnzahlBits = Int(Application.WorksheetFunction.Log(Zahl, 2)) + 1
    End Function
  4. Funktion ausführen: Wechsle zurück zu Excel und benutze die Funktion in einer Zelle, z. B. =AnzahlBits(A1).


Häufige Fehler und Lösungen

  • Fehler: Ungültige Eingabe
    Wenn die Eingabe außerhalb des Bereichs 1-512 liegt, gibt die Funktion -1 zurück. Stelle sicher, dass du eine gültige Zahl eingibst.

  • Fehler: MsgBox funktioniert nicht
    Stelle sicher, dass du die richtige Syntax verwendest. Ein Beispiel für die Verwendung von MsgBox:

    Sub Test()
        MsgBox AnzahlBits(64) ' Gibt die Anzahl der Bits zurück
    End Sub

Alternative Methoden

Wenn du keine VBA-Lösung verwenden möchtest, kannst du auch die Excel-Funktion =AUFRUNDEN(LOG(A1 + 1; 2); 0) nutzen, um die Anzahl der Bits zu berechnen. Diese Methode ist einfach und benötigt keine Programmierung.


Praktische Beispiele

Hier sind ein paar Beispiele, wie du die Funktion nutzen kannst:

  • Beispiel 1: Um die Bitanzahl der Zahl 10 zu ermitteln, schreibe in eine Zelle:
    =AnzahlBits(10)
    Das Ergebnis sollte 4 sein.

  • Beispiel 2: Für die Zahl 64:
    =AnzahlBits(64)
    Das Ergebnis ist 7, da 64 in binärer Form 1000000 ist.

  • Beispiel 3: Wenn du die Anzahl der gesetzten Bits (Bits die 1 sind) ermitteln möchtest, kannst du eine Array-Lösung verwenden, bei der du ein Array erstellst, das die Bits speichert.


Tipps für Profis

  • Wenn du häufig mit der Umwandlung von Dezimal zu Binär arbeitest, aktiviere das Analyse-Add-In in Excel unter Extras => Add-Ins, um Zugriff auf die Funktion DEZINBIN zu haben.
  • Verwende Arrays für eine schnellere Berechnung, besonders wenn du mit vielen Zahlen gleichzeitig arbeitest.
Sub BitArray()
    Dim binArray(1 To 512) As Integer
    Dim i As Integer
    For i = 1 To 512
        binArray(i) = Int(Application.WorksheetFunction.Log(i, 2)) + 1
    Next i
    MsgBox binArray(64) ' Gibt die Anzahl der Bits für 64 zurück
End Sub

FAQ: Häufige Fragen

1. Wie kann ich die Anzahl der gesetzten Bits ermitteln?
Du kannst eine Funktion schreiben, die die Bits überprüft und die Anzahl der gesetzten Bits zählt. Hier ist ein einfaches Beispiel:

Function AnzahlGesetzteBits(ByVal Zahl As Integer) As Integer
    Dim count As Integer
    count = 0
    While Zahl > 0
        count = count + (Zahl And 1)
        Zahl = Zahl \ 2
    Wend
    AnzahlGesetzteBits = count
End Function

2. Warum funktioniert DEZINBIN nicht in meiner Excel-Version?
Wenn die Funktion DEZINBIN nicht verfügbar ist, stelle sicher, dass das Analyse-Add-In aktiviert ist. Gehe zu Extras => Add-Ins und aktiviere das entsprechende Kästchen.

Mit diesen Anleitungen und Tipps kannst du schnell und effektiv die Bits einer Zahl in Excel ermitteln!

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