3.1k Aufrufe
Gefragt in Tabellenkalkulation von erne Einsteiger_in (73 Punkte)
Hallo,

ich möchte die Integerwerte in einem Bereich eines Tabellenblattes in der Hexadezimalen Form darstellen.
Es gibt die Methoden Convert und ToString aber ich kriege es nicht hin den Bereich richtig auszuwählen (glaube ich).
Mein Ansatz war eine For each Schleife:

Dim DiagSignals
Dim DiagValue

Set DiagSignals = Range(Cells(2, 36), Cells(52, lDataRows))
For Each DiagValue In DiagSignals
DiagValue. HierSollteFormatHin
Next


aber das haut so nicht hin.
Kann mir jemand sagen, wie ich das besser machen kann?
Vielen Dank für die Hilfe im Vorraus.

9 Antworten

0 Punkte
Beantwortet von computerschrat Profi (32.2k Punkte)
Hallo Erne,

mit der Funktion
=DEZINHEX(Zellenbezug;Stellenanzahl)
lannst Du eine Dezimalzahl hexadezimal darstellen.
Vielleicht reicht die das schon.

Gruß
computerschrat
0 Punkte
Beantwortet von erne Einsteiger_in (73 Punkte)
Hallo Computerschrat,

danke für die Antwort, aber ich müsste jetzt für jede Zelle die Berechnung durchführen und das Ergebnis zurückkopieren. Und der eigentliche Zellenwert ändert sich ja nicht wirklich, es ist ja nur eine andere Darstellungsform.

Man kann in Excel die Zellen formatieren, als Datum als Währung etc. Gibt es hier nicht auch eine Möglichkeit nach Hexadezimal umzuformatieren?
0 Punkte
Beantwortet von rainberg Profi (14.9k Punkte)
Hallo Erne,

folgender Code wandelt die Zahlen aus A1:A10 in Hexwerte um.

Hilft Dir das?

[code]Option Explicit

Sub convert()
Dim rngC As Range
For Each rngC In Range("A1:A10")
rngC = WorksheetFunction.Dec2Hex(rngC)
Next
End Sub

Gruß
Rainer
0 Punkte
Beantwortet von erne Einsteiger_in (73 Punkte)
Hallo Rainer,

auf den ersten Blick ist das genau die Lösung die ich gesucht habe, allerdings ist die Ausführungsgeschwindigkeit derartig langsam, dass diese Variante so nicht praktikabel ist. Und nach etwa 50 Zeilen bricht die Funktion ab.

Ich werde jetzt mal deine Variante der For Each Schleife verwenden und eine eigene Funktion schreiben (besser gesagt, probieren zu schreiben...
0 Punkte
Beantwortet von rainberg Profi (14.9k Punkte)
Hallo Erne,

warum eine eigene Funktion?

Ich habe mein Makro, mit einem kleinen Zusatz mal über einen Bereich von 50 Zeilen und 200 Spalten geschickt, Laufzeit <2 sec.

Option Explicit

Sub convert()
Dim rngC As Range
Application.ScreenUpdating = False
For Each rngC In Range("AJ2:IB52")
rngC = WorksheetFunction.Dec2Hex(rngC)
Next
Application.ScreenUpdating = True
End Sub


Gruß
Rainer
0 Punkte
Beantwortet von nighty Experte (6.6k Punkte)
hi :-)

eine neue Funktion ist überflüssig

nimm ein dictionary object

gruss nighty
0 Punkte
Beantwortet von erne Einsteiger_in (73 Punkte)
Hallo,

...danke erstmal für die Antworten

Ihr habt recht, neue Funktion nicht nötig: ich habe in meinem Range Zeilen mit Spalten vertauscht... daher die lange Bearbeitungszeit für nur 52 Zeilen

Einen Punkt hätte ich noch: Ich würde gerne eine Abfrage einbauen, um zu verhindern dass leere Zellen mit "0" gefüllt werden.
etwa so:

For Each DiagValue In Range(Cells(2, 36), Cells(lDataRows, 52))
If (DiagValue IsNot Leer)
DiagValue = WorksheetFunction.Dec2Hex(DiagValue, 2) 'ConvertToHex(DiagValue) 'WorksheetFunction.Dec2Hex(DiagValue, 2)
End If

Next


Wie müsste die If - Anweisung aussehen?

Nighty: was ist denn ein dictionary object?

Gruß Erne
0 Punkte
Beantwortet von rainberg Profi (14.9k Punkte)
Hallo Erne,

einfach so:
If DiagValue <> "" Then
DiagValue = WorksheetFunction.Dec2Hex(DiagValue, 2)
End If


Gruß
Rainer
0 Punkte
Beantwortet von erne Einsteiger_in (73 Punkte)
Hallo Rainer,
vielen Dank, jetzt läuft es so wie ich mir das vorgestellt habe...

Und ich bin immer wieder begeistert vom supportnet


viele Grüsse
Erne
...