Anzeige
Archiv - Navigation
1592to1596
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

Zellbereich in eine Varibale übergeben

Zellbereich in eine Varibale übergeben
27.11.2017 10:20:36
Lukas
Hallo liebes Forum,
ich habe vor einigen Wochen mein Problem hier gelöst bekommen. Danke nochmal an Werner.
Kann aber den alten Beitrag irgendwie nicht mehr editieren.
Hier mal der Code, so wie er bisher ausschaut.
Public Sub aaa()
Dim raBereich As Range, raZelle As Range
Dim loLetzteZeile As Long, i As Long, j As Long
Dim strZellbereich As String
loLetzteZeile = Cells(Rows.Count, 2).End(xlUp).Row
Set raBereich = Selection.Columns
Application.ScreenUpdating = False
For i = 13 To loLetzteZeile
For Each raZelle In raBereich
j = raZelle.Column
If strZellbereich = vbNullString Then
strZellbereich = Cells(i, j).Address
Else
strZellbereich = strZellbereich & ";" & Cells(i, j).Address
End If
Next raZelle
Cells(i, 1).FormulaLocal = "=SUMME(" & strZellbereich & ")"
strZellbereich = ""
Next i
Range(Cells(13, 1), Cells(loLetzteZeile, 1)).Value = Range(Cells(13, 1), Cells(loLetzteZeile, 1) _
_
_
).Value
Set raBereich = Nothing
Application.ScreenUpdating = True
End Sub

Nun möchte ich, anstatt die Summe mit diesem Teil des Codes:
Cells(i, 1).FormulaLocal = "=SUMME(" & strZellbereich & ")"
in die Zellen (i, 1) zu schreiben an eine Variable übergeben.
Mein Gedanke war die Variable: "Sum" vor der For-Schleife = 0 zu setzen und dann vor dem Next i mit Sum = Sum + aufzuaddieren.
Ich weiß jetzt allerdings nicht wie ich den Zellbereich dort hinein bekomme.
Ich hoffe ihr könnt mir helfen.
Beste Grüße

28
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zellbereich in eine Varibale übergeben
27.11.2017 11:00:46
Robert
Hallo Lukas,
wenn Du die Summe aufaddieren willst, kannst Du das mit
Sum = Sum + Cells(i, 1).Value
vor dem Next i.
Du kannst aber auch nach den For-Schleifen mit
Sum = Application.WorksheetFunction.Sum(Range("A13:A" & i - 1))
die Summe ermitteln, ohne die Werte einzeln aufzuaddieren.
Gruß
Robert
AW: Zellbereich in eine Varibale übergeben
27.11.2017 11:16:41
Lukas
Danke Robert für deine Tips. Ich glaube allerdings, dass das bei mir so nicht funktioniert, auf Grund des varibalen Zellbereichs.
Mir fehlt eigentlich nur der "Befehl", wie ich
Cells(i, 1).FormulaLocal = "=SUMME(" & strZellbereich & ")"
nicht in eine konkrete Zelle schreibe sondern eben in eine Variable.
Anzeige
AW: Zellbereich in eine Varibale übergeben
27.11.2017 11:20:05
yummi
Hallo Lukas
dann so:

dim strFormael as String
und anstatt einer zeile

strFormel = "=SUMME(" & strZellbereich & ")"
Dann kannst du str Formel an die Zelle übergeben, die du möchtest
Gruß
yummi
AW: Zellbereich in eine Varibale übergeben
27.11.2017 11:35:26
Lukas
Ok, dann habe ich schonmal meine Summe pro Zeile in einer Variablen.
Jetzt möchte ich aber in einer weiteren Variablen alle strFormel zu einer Gesamtsumme zusammenfassen.
Ich dachte da könnte ich dann in der For Schleife mit Sum = Sum + strFormel arbeiten.
Aber der gibt mir natürlich dann nur die Formel wieder und nicht den Wert, da es ja als String definiert ist.
Und Sum als Long zu definieren und StrFormel als String verträgt sich so
Sum = Sum + strFormel
leider nicht.
Anzeige
AW: Zellbereich in eine Varibale übergeben
27.11.2017 11:43:45
yummi
Hallo Lukas,
ich weiß noch nicht ganz was Du überhaupt willst. Willst du die summe als Zahl haben oder so wie biher die Summe als Formelstring?
als Zahl kannst Du lSum = lSum + neuerWert, die Summe hochzählen.
wenn Du einen String erweitern willst, dann geht das mit
strFormel = strFormel & NeuerTeil
Du könntest dann den allgemeinen Teil am Anfang vor die Schleife schreiben, in der Schleife deinen variablen Teil und den allgemeinen schliessenden Teil anch der Schleife anhängen.
Vlt hilft dir das ja in deinen Überlegungen weiter
Gruß
yummi
AW: Zellbereich in eine Varibale übergeben
27.11.2017 12:50:23
Lukas
Hallo yummi,
also das Makro bildet bisher aus den vorher manuell markierten Spalte für jede Zeile i eine Summe und schreibt diese in die Cells(i, 1). Dies passiert momentan als Formel.
Ich möchte nun diese ZeilenSummen nicht mehr in die 1. Spalte der jeweiligen Zeile schreiben, sondern in eine Variable im Makro.
Weiterhin soll dann eine Gesamtsumme aus den ZeilenSummen gebildet werden. Diese soll auch in einer Variablen im Makro gespeichert sein.
Ich brauche nicht die Formel in den Summen sondern lediglich die Summe als Zahl..
Anzeige
AW: OT: Was ist ein Varibale? Kenne nur Kannibale! :-]
27.11.2017 13:15:05
Lukas
Ein Varibale ist variabel in dem, was er isst ;)
Gute AW! Besser wäre aber gewesen, in der ...
28.11.2017 01:11:28
Luc:-?
…Folge den Wink mit dem Zaunpfahl zu beachten… :-]
Luc :-?
AW: Zellbereich in eine Varibale übergeben
27.11.2017 13:02:46
yummi
Hallo Lukas,

Public Sub aaa()
Dim raBereich As Range, raZelle As Range
Dim loLetzteZeile As Long, i As Long, j As Long
Dim strZellbereich As String
loLetzteZeile = Cells(Rows.Count, 2).End(xlUp).Row
Set raBereich = Selection.Columns
Application.ScreenUpdating = False
gesamtSumme = 0
For i = 13 To loLetzteZeile
Zeilensumme = 0
For Each raZelle In raBereich
if IsNumeric(raZelle.value) then
Zeilensumme = Zeilensumme + raZelle.value
end if
Next raZelle
gesamtsumme = gesamtsumme + zeilensumme
'hier kannst Du jetzt noch was immer du möchtest mit der Zeilensumme machen
Next i
'hier kannst Du die Gesamtsumme verarbeiten
Set raBereich = Nothing
Application.ScreenUpdating = True
End Sub
siehe Kommentare, wan ndu mit den einzelnen Summen was anstellen kannst.
Gruß
yummi
Anzeige
AW: Zellbereich in eine Varibale übergeben
27.11.2017 13:14:17
Lukas
Aber wo ist in dem Code der Teil mit dem Zellbereich hin?
Die Summe soll ja nur für die vorher markierten Spalten gebildet werden.
AW: Zellbereich in eine Varibale übergeben
27.11.2017 13:20:34
yummi
Hallo Lukas,
der selektierte Bereich ist immer noch in raBereich
Gruß
yummi
AW: Zellbereich in eine Varibale übergeben
27.11.2017 13:39:40
Lukas
Als Wert für die Gesamtsumme kommt allerdings immer 0 heraus, obwohl das nicht stimmt...
AW: Zellbereich in eine Varibale übergeben
27.11.2017 13:41:07
Lukas
Als Wert für die Gesamtsumme kommt allerdings immer 0 heraus, obwohl das nicht stimmt...
AW: Zellbereich in eine Varibale übergeben
27.11.2017 13:55:43
yummi
Hallo Lukas,
und für die zeilensumme kommt ein WErt ungleich Null raus?
dann muss in gesamtsumme auch was drin stehen.
setz mal einen Breakpoint in der if Abfrage Isnumeric. Vlt sind in deinen Zellen keine Zahlen, dann wird auch nix aufsummiert. Die If Abfrage hatte ich eingebaut, damit keine falschen Werte aufsummiert werden.
Schau mal was in der Zeile passiert und ob es zur addition kommt
Gruß
yummi
Anzeige
AW: Zellbereich in eine Varibale übergeben
27.11.2017 14:05:51
Lukas
Hallo yummi,
leider kommt für die Zeilensumme ebenfalls 0 heraus.
In den Zellen stehen allerdings Werte, die auch als Zahl formatiert sind...
AW: Zellbereich in eine Varibale übergeben
27.11.2017 14:43:55
yummi
Hallo Lukas,
das hört sich so an, als wenn die if Abfrage IsNumeric immer false liefert. DAnn nimm die erstmal raus und schau mal, ob du damit was anfangen kannst. Ich hatte die Abfrage nur rein genommen, damit es keine Probleme beim aufsummieren gibt, wenn dort Textzellen oder ähnliches dabei sind.
Gruß
yummi
AW: Zellbereich in eine Varibale übergeben
27.11.2017 14:47:46
Lukas
dann bekomme ich eine Fehlermeldung "Typen unverträglich" in der Zeile:
Zeilensumme = Zeilensumme + raZelle.value
Anzeige
AW: Zellbereich in eine Varibale übergeben
27.11.2017 14:51:10
Lukas
ich korrigiere...
Er macht es mittlerweile mit der if Abfrage IsNumeric. Allerdings bleiben beide Summen 0...
AW: Zellbereich in eine Varibale übergeben
27.11.2017 15:13:13
yummi
Hallo Lucas,
ich geh mal davon aus, dass du zeilensumme als double oder integer definiert hast, je nachdem was für Werte du aufsummieren willst.
Wenn dann ein Typenunverträglich kommt, heisst das für mich, dass es Zellen gibt, die keine Zahlen beinhalten.
Wenn Du sagst, er macht das mit der if Abfrage jetzt, heisst das du kommst in die Abfrage rein oder springt er über die Abfrage hinweg?
Ich kenne deine Datei nicht
Gruß
yummi
Werner HELP! :D
27.11.2017 15:23:21
Lukas
Hi yummi,
Zeilensumme und Gesamtsumme habe ich als Long definiert.
Es gibt Zellen, die 0 als Zahl beinhalten. Viele aber eben ganze Zahlen
Ne er führt die if-Abfrage durch und springt nicht drüber hinweg.
Die Summen sind allerdings weiterhin 0.
Gruß
Lukas
Anzeige
Was willst du jetzt?
27.11.2017 18:05:32
Werner
Hallo Lukas,
...die Endsumme in einer Variablen?
Dann teste mal das hier. Wenn da jetzt weiterhin als Ergebnis in der Messagebox eine 0 ausgegeben wird, dann hast du keine Zahlen (echte Zahlen) in den Spalten.
Sub aaa()
Dim raBereich As Range, raZelle As Range
Dim loLetzteZeile As Long, i As Long, j As Long
Dim strZellbereich As String, loSumme As Long
loLetzteZeile = Cells(Rows.Count, 2).End(xlUp).Row
Set raBereich = Selection.Columns
Application.ScreenUpdating = False
For i = 13 To loLetzteZeile
For Each raZelle In raBereich
j = raZelle.Column
If IsNumeric(Cells(i, j)) Then
loSumme = loSumme + Cells(i, j)
End If
Next raZelle
Next i
'hier hast du die Endsumme
'in der Variablen loSumme
MsgBox loSumme
Set raBereich = Nothing
Application.ScreenUpdating = True
End Sub
Gruß Werner
Anzeige
AW: Was willst du jetzt?
28.11.2017 09:04:37
Lukas
Hallo Werner,
Beste Dank! Genau das was ich brauchte.
Und wenn ich zusätzlich jetzt noch eine Zeilensumme für jede Zeile von den markierten Spalten haben möchte?
Du hattest mir schonmal mit folgendem Code weitergeholfen:
Public Sub aaa()
Dim raBereich As Range, raZelle As Range
Dim loLetzteZeile As Long, i As Long, j As Long
Dim strZellbereich As String
loLetzteZeile = Cells(Rows.Count, 2).End(xlUp).Row
Set raBereich = Selection.Columns
Application.ScreenUpdating = False
For i = 13 To loLetzteZeile
For Each raZelle In raBereich
j = raZelle.Column
If strZellbereich = vbNullString Then
strZellbereich = Cells(i, j).Address
Else
strZellbereich = strZellbereich & ";" & Cells(i, j).Address
End If
Next raZelle
Cells(i, 1).FormulaLocal = "=SUMME(" & strZellbereich & ")"
strZellbereich = ""
Next i
Range(Cells(13, 1), Cells(loLetzteZeile, 1)).Value = Range(Cells(13, 1), Cells(loLetzteZeile, 1) _
_
).Value
Set raBereich = Nothing
Application.ScreenUpdating = True
End Sub
Ich würde dort den Teil:
Cells(i, 1).FormulaLocal = "=SUMME(" & strZellbereich & ")"

durch eine Variable ersetzen...
Gruß
Anzeige
und wohin mit der Zeilensumme? o.w.T.
28.11.2017 09:30:11
Werner
AW: und wohin mit der Zeilensumme? o.w.T.
28.11.2017 09:36:50
Lukas
Ich würde die Zeilensumme gerne in einer Variable haben. Also pro Zeile eine Zeilensumme.
In einem anschließenden Schritt würde ich dann gerne die jeweilige Zeilensumme durch die Gesamtsumme teilen um einen Prozentwert herauszubekommen.
Dieser Prozentwert soll dann in die Spalte 10 der jeweiligen Zeile geschrieben werden.
Also Cells(i, 10).Value = Zeilensumme / Gesamtsumme
AW: und wohin mit der Zeilensumme? o.w.T.
28.11.2017 11:05:27
Werner
Hallo Lukas,
ob du die Gesamtsumme auch irgendwo brauchst und wenn ja wo, weiß ich nicht.
Option Explicit
Public Sub aaa()
Dim raBereich As Range, raZelle As Range
Dim loZeiSumme As Long, loGesSumme As Long
Dim i As Long, j As Long, boSumme As Boolean
Set raBereich = Selection.Columns
Application.ScreenUpdating = False
loGesSumme = 0
For i = 13 To Cells(Rows.Count, 2).End(xlUp).Row
loZeiSumme = 0
For Each raZelle In raBereich
j = raZelle.Column
If IsNumeric(Cells(i, j)) Then
loZeiSumme = loZeiSumme + Cells(i, j)
End If
Next raZelle
loGesSumme = loGesSumme + loZeiSumme
Cells(i, 10) = loZeiSumme
Next i
For i = 13 To Cells(Rows.Count, 10).End(xlUp).Row
If Not loGesSumme = 0 Then
Cells(i, 10) = Cells(i, 10) / loGesSumme
boSumme = True
End If
Next i
If Not boSumme Then
MsgBox "Keine Spalten ausgewählt?"
End If
Set raBereich = Nothing
Application.ScreenUpdating = True
End Sub
Gruß Werner
AW: und wohin mit der Zeilensumme? o.w.T.
28.11.2017 11:57:29
Lukas
Ok besten Dank dafür!
Das erfüllt meine Anforderungen weitestgehend!
Gerne u. Danke für die Rückmeldung. o.w.T.
28.11.2017 12:58:44
Werner

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige