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

Daten mit mehreren Abhängigkeiten per VBA kopieren

Daten mit mehreren Abhängigkeiten per VBA kopieren
31.01.2014 17:51:01
Dani
Hallo VBA Profis,
ich möchte in einem Zellbereich, der immer bei der gleichen Zelle anfängt aber eine Variable Breite und Länge hat, von allen Zellen die eine Zahl beinhalten die Zeilen- und Spaltenüberschrift, sowie die jeweilige Zahl in einem neuen Tabellenblatt per Makro zusammenfügen. Das Makro wird im Blatt der Quelldaten ausgeführt. Wenn der Datensatz bereits im Zielblatt existiert, soll der größere Wert bestehen bleiben / eingetragen (die Daten werden aus mehreren Datenexportdateien automatisch eingelesen, bei denen es Überschneidungen geben kann).
Ich habe folgendes versucht, aber es klappt nicht (der Teil, dass nur der größere Wert bestehen bleibt und dass das Datum und die fixen Spalten vorne kopiert werden ist noch nicht drin, weil es schon nicht klappt den Wert zu kopieren...)
Sub aggregieren()
Dim LetzteZeile As Long
Dim LetzteSpalte As Long
Dim Startzeile As Long
Dim Startspalte As Long
Dim AktuelleZeile As Long
Dim AktuelleSpalte As Long
Dim AktuelleZelle As Range
Dim LetzteZielzeile As Long
Dim Wertebereich As Range
LetzteZeile = ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row
LetzteSpalte = ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Column
LetzteZielzeile = Sheets("AggregierteDaten").UsedRange.SpecialCells(xlCellTypeLastCell).Row
Startzeile = 2
Startspalte = 6
Wertebereich = ActiveSheet.Range(Cells(Startzeile, Startspalte), Cells(LetzteZeile,  _
LetzteSpalte))
For Each AktuelleZelle In Wertebereich
If AktuelleZelle  "" Then
AktuelleZelle.Copy
Sheets("AggregierteDaten").Cells(AktuelleZelle).PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = False
End If
Next AktuelleZelle
End Sub

Hier eine Beispieldatei: https://www.herber.de/bbs/user/89048.xlsx
Es wäre total toll, wenn mir jemand helfen könnte!
Viele Grüße,
Dani

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Daten aggregieren per VBA
01.02.2014 09:46:42
Erich
Hi Daniela,
probier mal diese beiden Varianten aus:

Option Explicit
Sub aggregieren2()
Dim lngQ As Long, lngC As Long, arrQu
Dim qq As Long, cc As Long, arZwi(), arErg(), zz As Long
With Sheets("Datenimport")
lngQ = .Cells(.Rows.Count, 1).End(xlUp).Row
lngC = .Cells(1, .Columns.Count).End(xlToLeft).Column
arrQu = .Cells(1, 1).Resize(lngQ, lngC)
End With
ReDim arZwi(1 To lngQ * (lngC - 6), 0 To 6)
For qq = 2 To lngQ
For cc = 6 To lngC
If arrQu(qq, cc) > 0 Then
zz = zz + 1
arZwi(zz, 0) = arrQu(1, cc)
arZwi(zz, 1) = arrQu(qq, 1)
arZwi(zz, 2) = arrQu(qq, 2)
arZwi(zz, 3) = arrQu(qq, 3)
arZwi(zz, 4) = arrQu(qq, 4)
arZwi(zz, 5) = arrQu(qq, 5)
arZwi(zz, 6) = arrQu(qq, cc)
End If
Next cc
Next qq
ReDim arErg(1 To zz, 0 To 6)
For zz = 1 To UBound(arErg)
For cc = 0 To 6
arErg(zz, cc) = arZwi(zz, cc)
Next cc
Next zz
With Sheets("AggregierteDaten")
zz = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
.Cells(zz, 1).Resize(UBound(arErg), 7) = arErg
End With
End Sub
Sub aggregieren3()
Dim lngQ As Long, lngC As Long, arrQu
Dim qq As Long, cc As Long, arKey, arErg(), zz As Long
Dim eDic As Object, strT As String, strK As String, arT()
Set eDic = CreateObject("Scripting.Dictionary")
ReDim arT(1 To 7)
' aggregierte Daten
With Sheets("AggregierteDaten")
lngQ = .Cells(.Rows.Count, 1).End(xlUp).Row - 1
arrQu = .Cells(2, 1).Resize(lngQ, 7)
End With
For qq = 1 To lngQ
strK = arrQu(qq, 1) & arrQu(qq, 2) & arrQu(qq, 3) & _
arrQu(qq, 4) & arrQu(qq, 5) & arrQu(qq, 6)
If eDic.Exists(strK) Then
arT = eDic(strK)                       ' hole Eintrag
If arT(7)  0 Then
strK = arrQu(1, cc) & strT
If eDic.Exists(strK) Then
arT = eDic(strK)                 ' hole Eintrag
If arT(7) 
Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich

Anzeige
Daten aggregieren per VBA - Korrektur
01.02.2014 09:56:23
Erich
Hi Daniela,
sorry, in aggregieren3() habe ich noch etwas übersehen:
Die Routine hängt das Ergebnis derzeit hinten an die bisherigen aggregierten Daten an,
soll sie aber ab Zeile 2 ausgeben, die Altdaten also überschreiben.
Das Ende der Prozedur muss so aussehen:

arErg(qq, cc) = arT(cc)
Next cc
Next qq
' Ausgabe
Sheets("AggregierteDaten").Cells(2, 1).Resize(eDic.Count, 7) = arErg
End Sub
Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich

AW: Daten aggregieren per VBA - Korrektur
01.02.2014 16:23:37
Dani
Lieber Erich,
herzlichen Dank, du bist ja ein absolutes Genie.
"aggregieren3()" mit deiner Korrektur macht genau das gewünschte! Eine Mini Mini Sache funktioniert nicht und zwar gibt es hier einen Fehler, wenn in der Tabelle "AggregierteDaten" nichts steht außer der Überschriftzeile.
Wenn ich die folgende Änderung mache:
With Sheets("AggregierteDaten")
lngQ = .Cells(.Rows.Count, 1).End(xlUp).Row - 1
arrQu = .Cells(2, 1).Resize(lngQ + 1, 7)
End With
scheint es zu gehen. Magst du nochmal Feedback geben, ob das sinnvoll ist oder ob ich damit etwas anderes kaputt mache?
Herzlichen Dank auf jeden Fall dir schonmal und viele Grüße,
Dani

Anzeige
bei (fast) leerer Ausgangstabelle
01.02.2014 17:35:00
Erich
Hi Daniela,
freut mich, dass es auch bei dir funzt!
Den Fehler kannst du so beseitigen, wie du das getan hast. Aber dabei wird ein Array arrQu erzeugt,
das überflüssig ist und nur aus einer Zeile mit leeren Einträgen besteht.
Eine andere Lösung des Problems:

With Sheets("AggregierteDaten")
lngQ = .Cells(.Rows.Count, 1).End(xlUp).Row - 1
If lngQ Then arrQu = .Cells(2, 1).Resize(lngQ, 7)
End With
Da wird bei lngQ=0 (False) das Array arrQu gar nicht erstellt.
Die Schleife danach wird ohnehin nicht durchlaufen, ginge ja von 1 bis 0 - und das ist nur mit Step -1 möglich.
Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich und: Schönes Wochenende allerseits!

Anzeige
AW: bei (fast) leerer Ausgangstabelle
01.02.2014 18:47:30
Dani
Danke nochmals lieber Erich, habe es auf deine ordentliche Lösung abgeändert :)
Herzliche Grüße und ein schönes Wochenende wünscht dir Daniela :)

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige