Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
Anzeige
Archiv - Navigation
1568to1572
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
Inhaltsverzeichnis

Zahlen addieren

Zahlen addieren
11.07.2017 15:53:43
Jens
Hallo
ich rechne in Vba folgendes
c = a + b
a = 1
b = 2
c= 12
Aber warum ist das so?
die variablen sind als String deklariert
und die Variabelen werden aus einem Tabellenblatt in dem das Format der Werte als Standard definiert ist gelesen.
Was muss ich machen, dass richtig gerecht wird?

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zahlen addieren
11.07.2017 16:00:18
Max2
Hallo,
eine frage an dich: Was ist Post + Bote =
noch eine, was ist: 1 + 2 = ?
Genau da ist das Problem :)
Du versuchst Sätze zu einer Zahl zu addieren.
Dass geht einfach nicht.
Du musst diese String Werte in Integer Werte umwandeln.
So z.B.:

Sub a()
Dim a As String
Dim b As String
Dim c As String
a = "1"
b = "2"
c = CInt(a) + CInt(b)
Debug.Print c
End Sub

AW: Zahlen addieren
11.07.2017 16:04:31
Jens
a = CInt(Worksheets("Aufstellung").Cells(i, 6).Value)
so funktioniert es nicht
muss ich das in jeder meiner Berechnung anpassen?
Kann ich das nicht irgendwie global vorab definieren.
Anzeige
AW: Zahlen addieren
11.07.2017 16:18:16
Jens
So sieht mein Code aus.
geht aber nicht.
Dim a As String
Dim b As String
Dim c_m As String
Dim d As String
Dim e As String
Dim f_h As String
Dim g_l As String
Dim r As String
Dim x As String
Dim y As String
Dim US_Umax As String
Dim US_Lmax As String
Dim US_A As String
Dim US_D As String
Dim i As Integer
'If Cells(i, 28).Value "" Then
Dim lr As Long
lr = Cells(Rows.Count, "A").End(xlUp).Row
For i = 13 To lr
a = CInt(Worksheets("Aufstellung").Cells(i, 6).Value)
b = CInt(Worksheets("Aufstellung").Cells(i, 7).Value)
c_m = CInt(Worksheets("Aufstellung").Cells(i, 8).Value)
d = CInt(Worksheets("Aufstellung").Cells(i, 9).Value)
e = CInt(Worksheets("Aufstellung").Cells(i, 10).Value)
f_h = CInt(Worksheets("Aufstellung").Cells(i, 11).Value)
g_l = CInt(Worksheets("Aufstellung").Cells(i, 12).Value)
r = CInt(Worksheets("Aufstellung").Cells(i, 13).Value)
x = CInt(Worksheets("Aufstellung").Cells(i, 14).Value)
y = CInt(Worksheets("Aufstellung").Cells(i, 15).Value)
If Cells(i, 4).Value = "L" Then
Cells(i, 30).Value = a
Cells(i, 31).Value = b
Cells(i, 32).Value = a + b
Cells(i, 29).Value = 2 * (a + b) * g_l
Else
Anzeige
AW: Zahlen addieren
11.07.2017 16:34:07
Max2
Hallo,
einfach als Integer deklarieren.
Dim a As Integer...etc.
Um zu verhindern, dass er nen Fehler rausgibt, schreibe einfach nach deinen
Dim's (Deklarierungen) folgendes:
On Error Resume Next
AW: Zahlen addieren
11.07.2017 17:03:26
Jens
Hallo
danke funktioniert.
aber ich bekommen nun einen Überlauf z.b gleich bei
2 * (a + b) * g_l / 1000 / 1000
a = 300
b = 450
c = 1500
irgendwie mag er die Multiplikation nicht.
Die einzelnen Variablen würden aber richtig übergeben werden.
AW: Zahlen addieren
11.07.2017 18:15:31
yummi
Hallo Jens,
danit Du wirklich mit Zahlen arbeitest und nicht mit etwas andrem mach mal bitte folgendes:
hinter jede dieser Zeilen wo du a= b= usw stehen hast am Ende in jede Zeile * 1
Das sorgt dafür dass Du wirklich mit Zahlen arbeitest und nicht mit Strings die aussehen wie Zahlen.
Gruß
yummi
Anzeige
AW: Zahlen addieren
12.07.2017 15:49:54
Jens
Hallo,
komme irgendwie nicht weiter.
Ich lese eine Datei (CSV) ein und soweit würde alles gehen.
Aber das Makro Dämmung im Modul 1 rechnet nicht richtig zusammen.
Kann sein, dass in den vielen Formeln noch ein Berechnungsfehler ist. Aber das ist mal vorerst egal.
Mir geht es momentan nur darum das die if-Abfragen "L" und "LT" funktionieren. Alles andere würde ich dann selber anwenden, wenn ich die Lösung verstanden habe.
Hat jemand eine Idee? Kann mir da nicht weiterhelfen.
https://www.herber.de/bbs/user/114839.xlsm
Anzeige
AW: Zahlen addieren
12.07.2017 15:51:57
Jens
Hallo,
komme irgendwie nicht weiter.
Ich lese eine Datei (CSV) ein und soweit würde alles gehen.
Aber das Makro Dämmung im Modul 1 rechnet nicht richtig zusammen.
Kann sein, dass in den vielen Formeln noch ein Berechnungsfehler ist. Aber das ist mal vorerst egal.
Mir geht es momentan nur darum das die if-Abfragen "L" und "LT" funktionieren. Alles andere würde ich dann selber anwenden, wenn ich die Lösung verstanden habe.
Hat jemand eine Idee? Kann mir da nicht weiterhelfen.
https://www.herber.de/bbs/user/114839.xlsm
BlattschutzPW: sperl
Anzeige
AW: Zahlen addieren
12.07.2017 19:43:26
Werner
Hallo Jens,
Dim(ensioniere) mal alle deine Variablen (bis auf i und lr) als VARIANT, dann wird der Datentyp von Excel angepasst.
Das sollte man eigentlich nicht machen, aber ich habe ehrlich gesagt keine Lust mir deine ganzen Variablen rauszusuchen und nachzuschauen, von welchem Datentyp die sein müssen.
Zudem ist deine hochgeladene Datei mit einem Blattschutz versehen.
 Dim a As Variant
Dim b As Variant
Dim c_m As Variant
Dim d As Variant
Dim e As Variant
Dim f_h As Variant
Dim g_l As Variant
Dim r As Variant
Dim x As Variant
Dim y As Variant
Dim z As Variant
Dim US_Umax As Variant
Dim US_Lmax As Variant
Dim US_A As Variant
Dim US_D As Variant
Dim i As Long
'If Cells(i, 28).Value  "" Then
Dim lr As Long
Gruß Werner
Anzeige
AW: Zahlen addieren
12.07.2017 19:45:02
Werner
Hallo Jens,
und noch was, in den Spalten 12 / 14 / 15 steht Text der wie eine Zahl aussieht, aber keine echte Zahl.
Gruß Werner
AW: Zahlen addieren
12.07.2017 21:00:24
Max2
Hallo,
die Werte sind zu groß für Integer, du brauchst Long oder Double.
Ich habe mal auf die schnelle, ohne zu sehr auf alle regeln zu achten, deinen
Code etwas anders geschrieben.
Dort siehst du vielleicht, ein oder zwei Möglichkeiten, ewig lange
Verkettungen von IF Sätzen zu vermeiden(Schadet der Übersicht).
Persönlich schaue ich mir immer gerne fremden Code an, da man immer das ein
oder andere sich abgucken kann.
Beide Codes brauchen ungf. die gleiche Zeit (0,05 Sekunden).
Hier die Mappe mit Code(in Modul: Berechnung): https://www.herber.de/bbs/user/114849.xlsm
Hier nur Code:
Option Explicit
Private ws As Worksheet
Private rowValues()
Const PI As Double = 3.1417
Sub GetFormulaValues()
Dim cRow As Long, i As Long
Dim US_Umax As Double, US_Lmax As Double
Dim US_A As Double, US_D As Double
Dim define As String
Dim functionNumber As Byte
On Error Resume Next
ReDim rowValues(9)
Set ws = ThisWorkbook.Sheets("Aufstellung")
With ws
cRow = .Cells(.Rows.Count, 1).End(xlUp).Row
ClearRange cRow
For i = 13 To cRow
If .Cells(i, 4).Value  "" Then
GetValue (i)
define = .Cells(i, 4).Value
functionNumber = ValidDefinedString(define)
.Cells(i, 29) = Round(GetFormulaData(functionNumber), 4)
End If
Next i
End With
End Sub
Private Sub ClearRange(ByVal cRow As Long)
Dim rng As Range
With ws
Set rng = .Range(.Cells(13, 29), .Cells(cRow, 29))
rng.ClearContents
End With
End Sub
Private Sub GetValue(ByVal currentRow As Long)
Dim i As Integer
With ws
For i = 6 To 15
rowValues(i - 6) = .Cells(currentRow, i)
Next i
End With
End Sub
Private Function ValidDefinedString(ByVal define As String) As Byte
Dim definingString As Variant
Dim i As Integer
definingString = Array("L", "LT", "SU", "BS", "BA", "WS", "WA", "US", "UA", _
"RS", "RA", "ES", "EA", "BO", "TG", "TA", "HS")
For i = 0 To 16
If define = definingString(i) Then ValidDefinedString = i + 1: Exit For
Next i
End Function
Private Function GetFormulaData(ByVal formulaNumber As Byte) As Double
Select Case formulaNumber
Case 1
GetFormulaData = L_Formula(rowValues(0), rowValues(1), rowValues(6))
Case 2
GetFormulaData = LT_Formula(rowValues(0), rowValues(1), rowValues(6))
Case 3
GetFormulaData = SU_Formula(rowValues(0), rowValues(1), rowValues(6), rowValues(3))
Case 4
GetFormulaData = BS_Formula(rowValues(0), rowValues(1), rowValues(6), rowValues(7),  _
rowValues(4), rowValues(5))
Case 5
GetFormulaData = BA_Formula(rowValues(0), rowValues(1), rowValues(6), rowValues(7),  _
rowValues(3), rowValues(4), rowValues(5), rowValues(2))
Case 6
GetFormulaData = WS_Formula(rowValues(0), rowValues(1), rowValues(4), rowValues(5))
Case 7
GetFormulaData = WA_Formula(rowValues(0), rowValues(1), rowValues(3), rowValues(4),  _
rowValues(5), rowValues(2))
Case 8
GetFormulaData = US_Formula(rowValues(0), rowValues(1), rowValues(2), rowValues(3),  _
rowValues(4), rowValues(5), rowValues(6))
Case 9
GetFormulaData = UA_Formula(rowValues(0), rowValues(1), rowValues(2), rowValues(3),  _
rowValues(4), rowValues(5), rowValues(6))
Case 10
GetFormulaData = RS_Formula(rowValues(0), rowValues(1), rowValues(3), rowValues(5),  _
rowValues(6), rowValues(4))
Case 11
GetFormulaData = RA_Formula(rowValues(0), rowValues(1), rowValues(3), rowValues(4),  _
rowValues(5), rowValues(6))
Case 12
GetFormulaData = ES_Formula(rowValues(0), rowValues(1), rowValues(6), rowValues(4))
Case 13
GetFormulaData = EA_Formula(rowValues(0), rowValues(1), rowValues(3), rowValues(2),  _
rowValues(4), rowValues(6))
Case 14
GetFormulaData = BO_Formula(rowValues(0), rowValues(1))
Case 15
GetFormulaData = TG_Formula(rowValues(0), rowValues(1), rowValues(2), rowValues(3),  _
rowValues(6), rowValues(5))
Case 16
GetFormulaData = TA_Formula(rowValues(0), rowValues(1), rowValues(3), rowValues(2),  _
rowValues(6), rowValues(5), rowValues(4))
Case 17
GetFormulaData = HS_Formula(rowValues(0), rowValues(1), rowValues(2), rowValues(3),  _
rowValues(4), rowValues(5), rowValues(6))
End Select
End Function
Private Function L_Formula(ByVal a, b, g_L) As Double
L_Formula = 2 * (a + b) * g_L
End Function
Private Function LT_Formula(ByVal a, b, g_L) As Double
LT_Formula = 2 * g_L * (a + b) / 1000 / 1000
End Function
Private Function SU_Formula(ByVal a, b, g_L, d) As Double
SU_Formula = 2 * (a + b) * (g_L ^ 2 + (b - d) ^ 2) ^ 0.5 / 1000 / 1000
End Function
Private Function BS_Formula(ByVal a, b, g_L, r, e, f_h) As Double
BS_Formula = 2 * (a + b) * (PI * g_L * (r + b) / 180 + e + f_h) / 1000 / 1000
End Function
Private Function BA_Formula(ByVal a, b, g_L, r, d, e, f_h, c_m) As Double
If b >= d Then BA_Formula = 2 * (a + b) * (PI * g_L * (r + b) / 180 + e + f_h)
If b = d Then WA_Formula = 2 * (a + b) * (b + d + e + f_h)
If b = (c_m + d) Then US_Umax = 2 * (a + b) Else: US_Umax = 2 * (c_m + d)
If e >= f_h Then US_Lmax = (g_L ^ 2 + e ^ 2) ^ 0.5 Else: US_Lmax = (g_L ^ 2 + f_h ^ 2) ^ 0. _
5
US_Formula = US_Umax * US_Lmax
End Function
Private Function UA_Formula(ByVal a, b, c_m, d, e, f_h, g_L) As Double
Dim US_Umax As Double, US_Lmax As Double
If (a + b) >= (c_m + d) Then
US_Umax = 2 * (a + b)
If (b - d + e) >= e Then US_Lmax = (g_L ^ 2 + (b - d + e) ^ 2) ^ 0.5 Else: US_Lmax = ( _
g_L ^ 2 + e ^ 2) ^ 0.5
Else
US_Umax = 2 * (c_m + d)
If (a - c_m + f_h >= f_h) Then US_Lmax = (g_L ^ 2 + (a - c_m + f_h) ^ 2) ^ 0.5 Else:  _
US_Lmax = (g_L ^ 2 + (f_h) ^ 2) ^ 0.5
End If
UA_Formula = US_Umax * US_Lmax
End Function
Private Function RS_Formula(ByVal a, b, d, f_h, g_L, e) As Double
Dim US_Umax As Double, US_Lmax As Double
If (a + b) >= (PI * d * 0.5) Then US_Umax = 2 * (a + b) Else: US_Umax = PI * d
If e >= f_h Then US_Lmax = (g_L ^ 2 + e ^ 2) ^ 0.5 Else: US_Lmax = (g_L ^ 2 + f_h ^ 2) ^ 0. _
5
RS_Formula = US_Umax * US_Lmax
End Function
Private Function RA_Formula(ByVal a, b, d, e, f_h, g_L) As Double
Dim US_Umax As Double, US_Lmax As Double
If (a + b) >= (PI * d * 0.5) Then
US_Umax = 2 * (a + b)
If (b - d + e >= e) Then US_Lmax = (g_L ^ 2 + (b - d + e) ^ 2) ^ 0.5 Else: US_Lmax = ( _
g_L ^ 2 + (e) ^ 2) ^ 0.5
Else
US_Umax = PI * d
If (a - d + f_h >= f_h) Then US_Lmax = (g_L ^ 2 + (a - d + f_h) ^ 2) ^ 0.5 Else:  _
US_Lmax = (g_L ^ 2 + (f_h) ^ 2) ^ 0.5
End If
RA_Formula = US_Umax * US_Lmax
End Function
Private Function ES_Formula(ByVal a, b, g_L, e) As Double
ES_Formula = 2 * (a + b) * (g_L ^ 2 + e ^ 2) ^ 0.5
End Function
Private Function EA_Formula(ByVal a, b, d, c_m, e, g_L) As Double
Dim US_Umax As Double, US_Lmax As Double
If b >= d Then US_Umax = 2 * (a + b) Else: US_Umax = 2 * (c_m + d)
If (b - d + e) >= e Then US_Lmax = (g_L ^ 2 + (b - d + e) ^ 2) ^ 0.5 Else: US_Lmax = (g_L ^  _
2 + e ^ 2) ^ 0.5
EA_Formula = US_Umax * US_Lmax
End Function
Private Function BO_Formula(ByVal a, b) As Double
BO_Formula = a * b
End Function
Private Function TG_Formula(ByVal a, b, c_m, d, g_L, f_h) As Double
Dim US_Umax As Double, US_Lmax As Double
Dim US_D As Double, US_A As Double
If (a + b) >= (c_m + d) Then US_Umax = 2 * (a + b) Else: US_Umax = 2 * (c_m + d)
US_D = US_Umax * g_L
If (d + c_m - b) >= c_m Then US_Lmax = d + c_m - b Else: US_Lmax = c_m
US_A = US_Lmax * (2 * (g_L + f_h))
TG_Formula = US_D + US_A
End Function
Private Function TA_Formula(a, b, d, c_m, g_L, f_h, e) As Double
Dim US_Umax As Double, US_Lmax As Double
Dim US_D As Double, US_A As Double
If (b) >= (d) Then US_Umax = 2 * (a + b) Else: US_Umax = 2 * (c_m + d)
US_D = US_Umax * (g_L ^ 2 + e ^ 2) ^ 0.5
If (d + c_m - b - e) >= c_m Then US_Lmax = d + c_m - b - e Else: US_Lmax = c_m
US_A = US_Lmax * (2 * (g_L + f_h))
TA_Formula = US_D + US_A
End Function
Private Function HS_Formula(a, b, c_m, d, e, f_h, g_L) As Double
Dim US_Umax As Double, US_Lmax As Double
If b >= (d + c_m + f_h) Then US_Umax = 2 * (a + b) Else: US_Umax = 2 * (c_m + d + c_m + f_h) _
If (b - f_h - c_m - d + e) >= e Then US_Lmax = (g_L ^ 2 + (b - f_h - c_m - d + e) ^ 2) ^ 0. _
5 Else: US_Lmax = (g_L ^ 2 + e ^ 2) ^ 0.5
HS_Formula = US_Umax * US_Lmax
End Function

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige