Anzeige
Archiv - Navigation
932to936
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
932to936
932to936
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Format-Funktion in VB

Format-Funktion in VB
13.12.2007 12:50:00
Thomas
Hallo Leute,
Hilfe!
Kann mir jemand bitte folgendes erklären:
In Zellen A1:A15 stehen die Zahlen bzw. Texte 10 bis 1F (also hexadezimale Zahlen).
Nun schreibe ich per VB die folgende Sub:

Sub Hexa()
For Each c In [B1:B16]
c.Value = Format(c.Offset(0, -1), "00")
Next
End Sub

In B1:B16 sollten nun im Prinzip nochmal die Zahlen drinstehen. Das klappt auch ganz gut, bis auf "1A", dort wird komischerweise "0" ausgegeben. Warum?
Ich benötige die Format-Funktion, da ich manchmal auch nur einstellige Zahlen habe, die aber 2-stellig ausgegeben werden sollen. Oder hat jemand eine andere Idee? Gut, man könnte mit Length usw., aber warum geht es nicht so?
Noch 'ne Frage: geht das auch ohne For..Next? Ich habe schon probiert mit


[B1:B16] = Format([A1:A16].Value, "00")

aber das geht nicht. Merkwürdigerweise geht aber


[B1:B16] = [A1:A16].Value

, da werden die Werte nochmal übernommen.
Besten Dank schon mal für eine Antwort.
Gruß aus Berlin,
Thomas

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Format-Funktion in VB
13.12.2007 12:59:00
Thomas
Nur nochmal zur Verständlichkeit bzw. Hexadezimal: es stehen also die Zahlen
10
11
12
13
14
15
16
17
18
19
1A
1B
1C
1D
1E
1F
drin.

AW: Format-Funktion in VB
13.12.2007 13:26:35
ransi
HAllo
Keine Ahnung was Excel da wieder zusammrechnet.
Irgendwie erkennt Excel in 1A eine ZAhl.
Versuche es mal so:

Sub Hexa()
With Range("B1:B16")
    .NumberFormat = "00"
    .Value = Range("A1:A16").Value
End With
End Sub

ransi

Anzeige
AW: Format-Funktion in VB
13.12.2007 13:11:00
Bjoern
okay...
Hast du dir schon mal die Format Funktion angeschaut ?
Du willst alpha numerische Werte konvertieren und es soll immer eine mindestens null erscheinen...
Wenn die Werte Alphanummerisch sind kann deine Funktion keine Zahlen erkennnen sondern lediglich
Alphanummerische Zeichen.
Die Vorgehensweise ist denke ich mal falsch!
Sorry wenn ich das so hart sage ...
Schau dir mal diese Funktion an (Funktioniert auch in Excel)
Quelle :
http://dbwiki.de/wiki.php?title=VBA_Tipp:_Strings_rechtsb%FCndig_formatieren

Public Function RightFix(ByVal S As Variant, _
Optional ByVal Lg As Long = 12, _
Optional ByVal FuellZeichen as String = " ") As String
RightFix = Right(String(Lg, FuellZeichen) & S, Lg)
End Function


Zusätzlich solltest du deine Zellen vorher als Textwerte markieren (mit dem "@"-Zeichen = Zellenformat)
Schau dir zusätzlich noch folgende Beispiele an!
http://www.vb4fun.de/vb/tipps/tip0211.shtml
http://www.vb4fun.de/vb/tipps/tip0484.shtml
Ich frage mich, warum du grade das Rad neu erfinden willst ...
Ohne For Next geht das so nicht weil die Funktion Format eigentlich keinen Array bzw eine Range mit mehreren Values unterstützt.

Anzeige
AW: Format-Funktion in VB
13.12.2007 14:37:00
Thomas
Hallo Björn,
niemand will das Rad neu erfinden! Ich habe hier lediglich einen Auszug aus einer _ Konvertierungsfunktion gezeigt, die fehlerhaft ist. Im wesentlichen geht es darum, die hexadezimalen Werte aus 2 Spalten in eine Dezimalzahl zu konvertieren und diese in die Spalte daneben zu schreiben. Dies geschah bisher mit

c.Value = CInt("&H" & c.Offset(0, -5) & Format(c.Offset(0, -4), "00"))

in einer For-Next-Schleife und funktionierte auf dem ersten Blick ganz gut.
Die Format-Funktion benötigte ich, da die Hexadezimalzahlen auch mal einstellig sein könnten und die Formel somit ein falsches Ergebnis liefern würde. Ich benötige hier keine führende Null, sondern lediglich ein zweistelliges Ergebnis.
Meine Frage ist ja eigentlich auch, warum der Fehler nur bei Hez-Zahlen mit einer "A" als zweiter Ziffer ist! Bei allen anderen hexadezimalen Ziffern (also auch B..F) funktioniert die Formel, wie auch schon ransi richtig erkannt hat. Das hat dann auch nichts mehr mit alphanumerisch oder so zu tun, oder?
Inzwischen habe ich mir aber damit beholfen, die beiden Zahlen nicht zusammen, sondern ganz _ konventionell einzeln zu konvertieren und entsprechend zu multiplizieren:


c.Value = CInt("&H" & c.Offset(0, -5)) * 256 + CInt("&H" & c.Offset(0, -4))

Etwas aufwändiger, funktioniert aber. Zufriedenstellend ist das trotzdem nicht!
Trotzdem vielen Dank für deine Zeit und deinen Versuch, meine Frage zu beantworten.
Thomas

Anzeige
AW: Format-Funktion in VB
14.12.2007 13:50:24
Bjoern
Also ich würde das echt so nicht machen...
Ist nur meine persönliche Meinung.
Die Funktion RightFix mit 0en auffüllen. Das Ergebnis muss ja ein String sein, daher sollte die Zelle vorher auch so formatiert sein.
Hexwerte sind keine Zahlen !
Sie sind alphanummerisch!
mit rightfix(Value,2,"0") hättest du den String bei bedarf mit 0en auffüllen können.
Mit der Format Funktion versuchst du Zahlen zu formatieren... oder reden wir jetzt an einander vorbei ?

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige