Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1092to1096
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

Werte in Spalte summieren

Werte in Spalte summieren
Andreas
Hallo,
ich habe ein Problem bezüglich der Addition von Werten aus einer Spalte.
Zuvor aber noch meine Problembeschreibung:
Ich habe 2 Tabellen (Tabelle1 und Tabelle3).
Die Struktur der Tabelle3 sieht wie folgendermaßen aus.
Fach1:
Spalte A: Person1
Spalte B: Person2
Spalte C: Person3
Spalte D: Person4
Fach2:
Spalte F: Person1
Spalte G: Person2
Spalte H: Person3
Spalte i: Person4
In Tabelle 3 können nun getrennt nach Personen die Werte eingegeben werden.
Die Tabelle 1 sieht wie folgt aus.
Spalte A: Person1
Spalte B: Person2
Spalte C: Person3
Spalte D: Person4
Ich möchte nun mittels VBA alle Werte von Person1 aus Tabelle3 in die Spalte A der Tabelle 1 kopieren. Soweit funktioniert noch alles wunderbar mittels folgendem Code:
Dim quelle As String
Dim ziel As String
quelle = "Tabelle3"
ziel = "Tabelle1"
Dim person1 As String 'erste leere Zeile ermitteln
Worksheets(quelle).Range("A3:A2000").Copy Destination:=Worksheets(ziel).Range("A2")
person1 = Sheets(ziel).Range("A65536").End(xlUp).Row + 1
Worksheets(quelle).Range("E3:E2000").Copy Destination:=Worksheets(ziel).Range("A" & person1)
person1 = Sheets(ziel).Range("A65536").End(xlUp).Row + 1
Worksheets(quelle).Range("i3:i2000").Copy Destination:=Worksheets(ziel).Range("A" & person1)
Nun kommt aber mein Problem. Ich habe in Tabelle1 lediglich 40 Zeilen zur Verfügung. Also muss ich schauen, dass diese 40 Zeilen durch das Kopieren nicht überschritten werden.
Meine Idee ist nun, dass ich mittels VBA prüfe, ob ich bereits in Zeile 40 auf der Tabelle1 bin und wenn ja, die restlichen Werte aus Tabelle3 addiere und in Zeile 40 einfüge.
Eine Addition von Werten kann ich mittels
MsgBox WorksheetFunction.Sum(Tabelle3.Range("E4:E" & Sheets(ziel).Range("E65536").End(xlUp).Row)), , "Hinweis"
realisieren.
Jedoch weiß ich nicht, wie ich beim Kopiervorgang die Zeilen abfrage und die RESTLICHEN Werte kopiere. Kopiere ich jede Zelle für sich dauert es ewig und verbraucht wohl sehr viel Arbeitsspeicher.
Weiß jemand Rat?
Sinn und Zweck ist es, dass ich zwei Druckansichten habe. Einmal die Möglichkeit über mehrere Seiten zu drucken und einmal alles auf einer Seite vereint zu haben.
Vielen Dank.
Mfg. Andreas

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Werte in Spalte summieren
13.08.2009 13:52:09
Daniel
Hi
irgendwie wäre es sinnvoll, wenn du mal ne beispieldatei hochlädst, weil deine Beschreibung net so ganz klar ist.
aber probier mal diesen Code zum übertragen der Daten aus, vielleicht ist es ja das, was du brauchts:
Die Daten werden solange einzeln übertragen, bis die Zelle 39 erreicht ist, danach werden die Werte nur noch aufsummiert und die Restsumme in Zeile 40 eingetragen:
Sub Test
Dim ZELLE As Long
Dim i As Long
Dim Summe As Double
dim Quelle as Worksheet
dim Ziel as Worksheet
Set Ziel = Sheets("Tabelle1")
Set Quelle = Sheets("Tabelle3")
i = 2
For Each ZELLE In Sheets(Quelle).Range("A2:A2000,E2:E2000,I2:I2000").SpecialCells( _
xlCellTypeConstants, 1)
If i  0 Then Sheets(Ziel).Cells(40, 1).Value = Summe
End Sub
Gruß, Daniel
Anzeige
AW: Werte in Spalte summieren
13.08.2009 14:51:46
Andreas
Hi Daniel,
danke für die Antwort. Leider kommt an folgender Stelle:
For Each ZELLE In Sheets(Quelle).Range("A2:A2000,E2:E2000,I2:I2000").SpecialCells( _
xlCellTypeConstants, 1)
eine Fehler-Meldung:
"Steuervariable für FOR EACH muss vom Typ Variant oder Object sein"
Da habe ich mir gedacht, schreib doch mal das zelle as long in ein zelle as range um. Danach erscheint mir dann aber diese Fhlermeldung:
"Typen unverträglich"
Ich stehe gerade total auf dem Schlauch. Krieg den Code einfach nicht zum Laufen...
Kannst du noch mal drüber schauen?
Von deiner Beschreibung her ist es genau das was ich suche.
Würde es jetzt noch gerne testen...
Mfg. Andreas
Anzeige
AW: Werte in Spalte summieren
13.08.2009 15:12:53
fcs
Hallo Andreas,
Quelle und Ziel sind schon als Worksheets deklariert. Deshalb muss in den Code-Zeilen das "Sheets(Quelle)" bzw. "Sheets(Ziel)" in "Quelle" bzw. "Ziel" geändert werden.
Sub Test()
Dim ZELLE As Variant
Dim i As Long
Dim Summe As Double
Dim Quelle As Worksheet
Dim Ziel As Worksheet
Set Ziel = Sheets("Tabelle1")
Set Quelle = Sheets("Tabelle3")
i = 2
For Each ZELLE In Quelle.Range("A3:A2000,E3:E2000,I3:I2000").SpecialCells( _
xlCellTypeConstants, xlNumbers)
If i  0 Then Ziel.Cells(40, 1).Value = Summe
End Sub

Mein Alternativ-Vorschlag, der ggf. alle Personen in einer Schleife abarbeitet:

Sub aaatest()
Dim wksQuelle As Worksheet
Dim wksZiel As Worksheet
Dim Person As Long, SpaltenProFach As Long
Dim Fach As Long
Set wksQuelle = Worksheets("Tabelle3")
Set wksZiel = Worksheets("Tabelle1")
SpaltenProFach = 5 'Anpassen!!!! =Anzahl Spalten von Fach zu Fach
'  For Person = 1 To SpaltenProFach -1 '- 1 erforderlich für Leerspalte
Person = 1
wksZiel.Cells(1, Person) = wksQuelle.Cells(2, Person).Value
For Fach = 1 To 3 '3 ggf. Anpassen
Call Kopieren(SpalteQuelle:=Person + (Fach - 1) * SpaltenProFach, SpalteZiel:=Person, _
ZeileZiel:=IIf(Fach = 1, 2, 0))
Next Fach
'  Next Person
End Sub
Sub Kopieren(SpalteQuelle As Long, SpalteZiel As Long, _
Optional ZeileZiel As Long)
Dim wksQuelle As Worksheet
Dim wksZiel As Worksheet
'ZeileZiel = 'nächste leere Zeile im Zielblatt, wenn =0 dann wird Zeile berechnet
Dim Bereich As Range
Set wksQuelle = Worksheets("Tabelle3")
Set wksZiel = Worksheets("Tabelle1")
With wksQuelle
'Spalte A (1) kopieren
'nächste freie Zelle in Ziel-Spalte
With wksZiel
If ZeileZiel = 0 Then ZeileZiel = .Cells(.Rows.Count, SpalteZiel).End(xlUp).Row + 1
End With
'Prüfen ob Daten vorhanden
If .Cells(.Rows.Count, 1).End(xlUp).Row >= 3 Then
Set Bereich = .Range(.Cells(3, SpalteQuelle), _
.Cells(.Rows.Count, SpalteQuelle).End(xlUp))
If ZeileZiel + Bereich.Rows.Count >= 40 Then
ZeileZiel = 40
wksZiel.Cells(ZeileZiel, SpalteZiel) = wksZiel.Cells(ZeileZiel, SpalteZiel) _
+ Application.WorksheetFunction.Sum(Bereich)
Else
Bereich.Copy Destination:=wksZiel.Cells(ZeileZiel, SpalteZiel)
End If
End If
End With
End Sub

Gruß
Franz
Anzeige
AW: Werte in Spalte summieren
13.08.2009 15:14:10
Daniel
dann mach mal aus "Dim Zelle as Long" ein "Dim Zelle as Range"
ohne Beispieldatei kann man den Code nur schwer testen, da muss man dann auch mal mit Tipfehlern in der Antwort leben :-)
Gruß, Daniel
AW: Werte in Spalte summieren
13.08.2009 15:27:05
Andreas
Hallo Franz,
die Korrektur hat gestimmt. Jetzt funktioniert der Code von Daniel.
Dein Codebeispiel ist leider nicht das, was ich gesucht habe. Ich wollte zuerst alles kopieren und erst ab der 40. Zeile die Werte addieren. Bei deinem Code addiert es alles (ohne Kopieren der ersten Werte) und fügt die Daten von Person 2,3,4 auch als Summe zu Person1 in Zeile 40 hinzu.
Trotzdem danke.
Mfg. Andreas
Anzeige
AW: Werte in Spalte summieren
13.08.2009 18:52:28
Daniel
Hi
ja ohne Beispieldatei ist es halt schwierig, was passendes zu programmieren.
diese alte Regel bestätigt sich immer wieder.
Gruß, Daniel

340 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige