Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
992to996
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
992to996
992to996
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Zellwert und Variable addieren

Zellwert und Variable addieren
13.07.2008 20:04:00
Burghard
Hallo,
ich habe eine Problem damit, einen Zellenwert [H3] mit einer Variablen zu addieren. Ich weiß nicht, warum das nicht funktinioniert.
[J17] = DifferenzA geht.
Das Ergebnis der Addition soll in Zelle J17 ausgegeben werden. Hilfe wäre nett.
Schönen Gruß
Burghard
===============================

Sub Differenz()
On Error GoTo ende
Dim DifferenzA
DifferenzA = "=ABS(C2-F2)"
[J17] = DifferenzA + [H3]
ende:
End Sub


15
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zellwert und Variable addieren
13.07.2008 20:11:17
Herbert
Hi,

Sub Differenzio()
Dim DifferenzA
DifferenzA = Abs([C2] - [F2])
[J17] = DifferenzA + [H3]
End Sub


mfg Herbert

AW: Zellwert und Variable addieren
13.07.2008 20:12:32
{Boris}
Hi,
die Variable DifferenzA enthält lediglich den String "=ABS(C2-F2)".
Du hättest auch "Huhu!!!" zuweisen können - wäre das selbe.
Entweder evaluierst Du Deinen String
DifferenzA = Evaluate("=ABS(C2-F2)")
oder Du greifst auf die VBA-eigene ABS-Funktion zurück (ist empfehlenswerter):
DifferenzA = Abs([c2] - [F2])
Grüße Boris

AW: Zellwert und Variable addieren
13.07.2008 20:12:43
mumpel
Hallo!
1. Variablen immer korrekt referenzieren, in diesem Fall Dim Differenz as String. Ist aber nicht notwendig.
2. Differenz ist eine Formel und in der Regel unsinnig.
3. So vielleicht?
Sub Differenz()
Range("J17") = (Range("C2") - Range("F2")) + Range("H3")
End Sub

Code eingefügt mit VBA in HTML 1.2 ( Hilfe zum Programm)size>
Gruß, René

Anzeige
AW: Zellwert und Variable addieren
13.07.2008 20:22:25
mumpel
Da ich gerade die Abs-Funktion sehe, dann so:
Sub Differenz()
Range("J17") = (Abs(Range("C2") - Range("F2"))) + Range("H3")
End Sub

Code eingefügt mit VBA in HTML 1.2 ( Hilfe zum Programm)size>
Mal eine Frage an die Profis. Weshalb immer diese elenden Eckklammern? Sollte man nicht besser immer richtig referenzieren ( Range("H3") oder Sheets("Tabelle1").Range("H3") ), eventuell mit einem .valuecolor> dahinter?

Anzeige
AW: Zellwert und Variable addieren
13.07.2008 20:43:00
Daniel
Hi
ja, man sollte richtig referenzieren.
die eckigen Klammern stehen ja für EVALUATE, also ausrechnen.
mit einem korrekten Zellbezug (Range oder Cells) ist man c.a. 20% schneller, wobei Cells nochmal einen Tick schneller ist als Range.
dazu kommt, das innerhalb von Cells ode Range selbst der Zellbezug über Variablen angegeben werden kann, man ist also wesentlich flexibler
bei Verwendung von .Value ist man etwas langsamer als ohne, das ist aber unbedeutend.
in komplexeren Makros weist man ja nicht immer nur Werte, sondern auch mal Formeln einer Zelle zu, von daher sollte man schon dazuschreiben, was man genau meint.
wers Testen will, kann ja mal das hier laufen lassen (Ergebnisausgabe erfolgt im Direktfenster)

Sub Test()
Const X As Long = 5000
Dim T As Single
Dim i As Long
T = Timer
For i = 1 To X
[A1] = [A1] / [A1]
Next
T = Timer - T
Debug.Print "Evaluate: " & T
T = Timer
For i = 1 To X
Range("A1").Value = Range("A1").Value / Range("A1").Value
Next
T = Timer - T
Debug.Print "Range.V : " & T
T = Timer
For i = 1 To X
Range("A1") = Range("A1") / Range("A1")
Next
T = Timer - T
Debug.Print "Range   : " & T
T = Timer
For i = 1 To X
Cells(1, 1).Value = Cells(1, 1).Value / Cells(1, 1).Value
Next
T = Timer - T
Debug.Print "Cells.V : " & T
T = Timer
For i = 1 To X
Cells(1, 1) = Cells(1, 1) / Cells(1, 1)
Next
T = Timer - T
Debug.Print "Cells   : " & T
End Sub


Gruß, Daniel

Anzeige
AW: Zellwert und Variable addieren
13.07.2008 20:18:03
Daniel
Hi
dein Code enthält folgende Fehler:
1. unsinniges On Error Goto
2. Variablendeklaration als Variant, obwohl ein numerischer Datentyp verwendet werden kann.
3. die []-Schreibweise für Zellbezüge, ist zwar Optisch eleganter, aber wesentlich langsamer als RANGE() oder Cells()
das Problem ist, daß daß DifferenzA keinen Zahlenwert, sondern einen Text-String enthält (nämlich "=ABS(C2-F2)" )
du kannst aber einen Textstring nicht zu einem Zahlenwert hinzuaddieren.
Korrkterweise müsste dein Code so aussehen:

Sub Differenz()
Dim DifferenzA As Double
DifferenzA = Abs(Range("C2").Value - Range("F2").Value)
Range("J17").Value = DifferenzA + Range("H3").Value
End Sub


Gruß, Daniel

Anzeige
AW: Zellwert und Variable addieren
13.07.2008 20:51:00
Gerd
Hallo,
wenn schon, denn schon.
Für die konkrete Aufgabe ist keine Variable erforderlich. Und falls aus anderen Gründen dennoch,
der Variablentyp Double hat seine kleinen Macken. Für Zahlen mit bis 4 Nackommastellen
empfehle ich Currency.

Sub egal()
With Thisworkbook.Tabelle1
.Cells(17, 10).Value = Abs(.Cells(2, 3).Value - .Cells(2, 6).Value) + .Cells(3, 8).Value
End With
End Sub


Grüße Gerd

AW: der Variablentyp Double hat seine kleinen Mack
13.07.2008 20:57:12
Daniel
Hi
und welche?
Gruß, Daniel

AW: der Variablentyp Double hat seine kleinen Mack
13.07.2008 22:06:00
Gerd
Hi Daniel,
google mal nach "Excel rechnet falsch" oder ähnlichem.
Gruß Gerd

Anzeige
AW: der Variablentyp Double hat seine kleinen Mack
13.07.2008 22:11:13
Daniel
du weißt also auch nix konkretes ;-)?
Gruß, Daniel

AW: Zellwert und Variable addieren
13.07.2008 22:28:25
Daniel
HI
egal ob du Variablen verwendest oder nicht:
da Excel auch bei direkten Berechnungen ohne Variablen intern irgendwelche Datentypen verwenden muss, bleibt das Problem bestehen.
Gruß, Daniel

AW: Double rechnet falsch
14.07.2008 11:44:00
Gerd
Hi Daniel,
nix ist egal.

Sub start()
Call FktDbl(33.6, 28)
Call FktCur(33.6, 28)
End Sub



Function FktDbl(a As Double, b As Double)
If (a / b) - 1 = 0.2 Then _
MsgBox " double gleich" Else MsgBox "double ungleich"
End Function



Function FktCur(a As Currency, b As Currency)
If (a / b) - 1 = 0.2 Then _
MsgBox " currency gleich" Else MsgBox "currency ungleich"
End Function


Gruß Gerd

Anzeige
AW: Double rechnet falsch
14.07.2008 23:21:18
Daniel
Hi
ok, wenn man Currency verwendet, wird korrekt gerechnet.
dh. dann aber, daß man IMMER mit Variablen rechnen muss und nicht direkt mit Zellbezügen, so wie du es vorgeschlagen hast.
Wenn direkt mit den Zellwerten gerechnet wird, verwendet Excel den Datentyp Double und man hat das Genauigkeitsproblem (ab der 17. NK-Stelle)
Gruss, Daniel

AW: Double rechnet falsch
15.07.2008 10:28:00
Gerd
Hi,
einen vollständigen Überblick über diese gelegentlichen Phänome, solche können auch beim Datentyp Single auftreten, kann ich dir leider nicht bieten.
Deine Schlußfolgerung, stets Variablen zu verwenden, geht allerdings zu weit.
CCur(Cells(zeile,spalte).Value bewirkt das Selbe.
Bei gewollter oder erforderlicher Rechengenauigkeit von mehr als vier Nachkommastellen kommst ohne Workaround an dem Typ Double nicht vorbei.
Gruß Gerd

Anzeige
AW: An alle
14.07.2008 13:59:11
Burghard
Hallo an alle,
vielen Dank für die Beiträge. Da hab ich durch meine Frage ja was losgetreten.
Ich habe jedenfalls ne Menge gelernt.
Übrigens: Die Lösung von Gerd funktioniert.
Vielen Dank an alle.
Schönen Gruß
Burghard

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige