Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen

Integer

Betrifft: Integer von: Roland
Geschrieben am: 05.09.2020 22:44:20

Guten Tag


wollte gerade in VB6 ein umrechnung machen


Dim x As integer


Jetzt bin ich davon Ausgegangen bei integer zeigt er mir einen Wert ohne Komma an , das stimmt aber nicht

wie kann ich in VBA 6 reine integer werde bekommen z.B


x = 100 0 / 256

x = 3 und nicht 3,9

Betrifft: AW x = 1000 \ 256 owt
von: Daniel
Geschrieben am: 05.09.2020 23:05:27

Gruß Daniel

Betrifft: AW: Integer
von: GerdL
Geschrieben am: 05.09.2020 23:42:11

Moin Roland,

in VBA kommt es drauf an, wie das Ergebnis zu runden ist.
x= Fix(1000/256)
Gruß Gerd

Betrifft: AW: Integer
von: Hajo_Zi
Geschrieben am: 06.09.2020 09:28:11

bei mir wird der korrekte Wert angezeigt.
Sub n()
    Dim x As Integer
    x = 1000 / 256
    MsgBox x
    x = 3
    MsgBox x
End Sub
GrußformelHomepage

Betrifft: AW: Integer
von: volti
Geschrieben am: 06.09.2020 10:01:52

Hallo zusammen,

eine als Integer dimensionierte Variable darf nur Ganzzahlen beinhalten. Und das ist bei mir auch so (VBA7, 64 Bit). Bei VBA6 müsste es genauso sein.
Die Frage ist allerdings, welche Ganzzahl die Variable bei einem Realwert von 3,906 letztendlich hat, denn sowohl 3 als auch 4 sind ja denkbar. Die 4 wäre näher an der Realität, so dass ich ich Ausgabe von 3 nicht ganz nachvollziehen kann, es sei denn, man will es so haben.

Hier ein Experimentiercode wie es hier bei mir aussieht.

Sub Test()
 Dim x As Integer
 
 x = 1000 / 256
 Debug.Print 1, 1000 / 256
 Debug.Print 2, x
 Debug.Print 3, Int(x)
 Debug.Print 4, Round(x, 0)
 x = 1000 \ 256
 Debug.Print 5, x
 Debug.Print 6, 1000 \ 256
 Debug.Print 7, Fix(1000 / 256)
End Sub
Und die Ergebnisse:
1 => 3,90625
2 => 4
3 => 4
4 => 4
5 => 3
6 => 3
7 => 3

Gruß Karl-Heinz

Betrifft: AW: Integer
von: Zwenn
Geschrieben am: 06.09.2020 14:19:05

Hallo Karl-Heinz,

für Variablen eines Ganzzahltyps wird der Nachkommateil eifach abgeschnitten. Da wird nix gerundet. Das ist meines Wissens nach in jeder Programmiersprache so. In VBA kann man das Ausnutzen, um einen Zeitstempel bestehend aus Datum uns Uhrzeit zu trennen. Aufrunden wäre da schlecht ;-)
Sub zeitStempelTeilen()

Dim zeitStempel As Date
Dim nurDatum As Date
Dim nurUhrzeit As Date

  zeitStempel = Now()
  nurDatum = Int(zeitStempel)
  nurUhrzeit = zeitStempel - Int(zeitStempel)
  
  MsgBox "Zeitstempel: " & zeitStempel & " (" & CDbl(zeitStempel) & ")" & Chr(13) & _
         "Datum: " & nurDatum & " (" & CLng(nurDatum) & ")" & Chr(13) & _
         "Uhrzeit: " & nurUhrzeit & " (" & CDbl(nurUhrzeit) & ")"
End Sub
Viele Grüße,

Zwenn

Betrifft: AW: Integer
von: volti
Geschrieben am: 06.09.2020 22:16:12

Hallo Zwenn,

danke für Deine Ausführungen. Auch mein bisheriger Kenntnisstand ist so wie Du sagst.

Trotzdem habe ich es (für meinen Rechner) hier schwarz auf weiß und hier noch mal in Prosa:
Dimensioniere ich x als Integer und fülle es mit der Rechenoperation 1000/256 enthält diese Variable den Wert 4.
Lasse ich mir die Variable als Int(x) ausgeben, bleibt es bei der 4
Lasse ich mir nur Int(1000 / 256) anzeigen, wird eine 3 ausgeben.

Dim x As Integer
x = 1000 / 256
Debug.Print x = 4
Debug.Print Int(1000 / 256) = 3
Debug.Print Int(x) =4

Gruß KH

Beiträge aus dem Excel-Forum zum Thema "Integer"