Excel Tabellenblätter zusammenführen?

... komplette Frage anzeigen

4 Antworten

Auf Basis der neuen Tabelle mit meinen folgenden Annahmen:
- Die Tabelle beginnt mit dem Datum in Spalte A (da nicht im Screenshot zu sehen, welche Spalten es sind)
- Der Kunde ist das eindeutige Suchkriterium (ich sehe sonst keine ID o.ä.)
- Aus dem Import des CSV wird nur der Status übernommen, sonst keine Aktualisierung

Da ich keinen Einblick habe, wie die Tabelle für den CSV Import aussieht, habe ich als einfaches Beispiel angenommen, dass in Spalte A der Kunde steht und in Spalte B der Status. Ggf. musst Du noch die Spalten ändern, wo sheets(import) genannt ist. in VBA kommt allerdings anders als in der Tabellensicht zuerst die Zeile, dann die Spalte (die auch mit Zahlen statt Buchstaben bezeichnet wird). Wenn der Status nicht in Spalte B sondern D stehen sollte wäre es also sheet(import).cells(i,4).value

Hinsichtlich Datum weiß ich nicht, ob das auch im Import steht. Aktuell wird einfach das Tagesdatum verwendet.
Die Sternchen werden wirklich nur dann gesetzt, wenn sich der Status geändert hat, ansonsten ist keine Markierung vorhanden. Die Farben setze ich nicht im Code, sondern gehe davon aus, dass sie ganz normal als Formatierung der Zellen eingestellt ist.
Sub abgleich()
Dim i As Long
Dim wohin As Long
Dim x As Range
Dim projekte As String
Dim import As String
' Das an Deine Tabellennamen anpassen
projekte = "Übersicht"
import = "Import"
For i = 2 To Sheets(import).Cells(Rows.Count, 1).End(xlUp).Row
If WorksheetFunction.CountIf(Sheets(projekte).Range("B:B"), Sheets(import).Cells(i, 1).Value) = 0 Then
wohin = Sheets(projekte).Cells(Rows.Count, 1).End(xlUp).Row + 1
Sheets(projekte).Cells(wohin, 1).Value = Now()
Sheets(projekte).Cells(wohin, 2).Value = Sheets(import).Cells(i, 1).Value
Sheets(projekte).Cells(wohin, 3).Value = Sheets(import).Cells(i, 2).Value
Sheets(projekte).Cells(wohin, 11).Interior.Color = vbBlue
Else:
Set x = Sheets(projekte).Range("B:B").Find(Sheets(import).Cells(i, 1).Value)
Sheets(projekte).Cells(x.Row, 1).Value = Now()
Sheets(projekte).Range(Cells(x.Row, 6), Cells(x.Row, 10)).Value = ""
Sheets(projekte).Cells(x.Row, 11).Interior.Color = vbWhite
If Sheets(projekte).Cells(x.Row, 3).Value <> Sheets(import).Cells(i, 2).Value Then
Sheets(projekte).Cells(x.Row, 3).Value = Sheets(import).Cells(i, 2).Value
Select Case Sheets(projekte).Cells(x.Row, 3).Value
Case "Besuch": Sheets(projekte).Cells(x.Row, 6).Value = "*"
Case "gewonnen": Sheets(projekte).Cells(x.Row, 7).Value = "*"
Case "Angebot": Sheets(projekte).Cells(x.Row, 8).Value = "*"
Case "Besuch": Sheets(projekte).Cells(x.Row, 9).Value = "*"
Case "verloren": Sheets(projekte).Cells(x.Row, 10).Value = "*"
End Select
End If
End If
Next i
End Sub

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von deschroe
30.11.2015, 15:02

Vielen Dank nochmal für die erneute Hilfe. Deine Annahmen waren soweit fast richtig. Allerdings steht das Projektdatum auch noch mit im Import. Was genau soll ich an meine Tabellennamen anpassen (die Lauten Monat2015)

0

Die Sache ist etwas schwierig, wenn man nicht in die tatsächliche Datei schauen kann bzw. verstehe ich den Ablauf noch nicht ganz. In meiner vereinfachten Annahme wäre es so, dass es irgendeine ID gibt, die eindeutig für jedes Projekt oder jeden Auftrag ist. Es gibt weitere Angaben (wer macht das Projekt, bei welcher Firma), die gleichbleiben, also nicht aktualisiert werden. Dann gibt es noch einen Projektstatus, der jeden Monat unterschiedlich sein kann. Der Status wird in der Übersicht für jeden Monat getrennt ausgewiesen (jeder Monat in einer eigenen Spalte). Den Status "NEU" würde ich einfach als Statusausprägung im jeweiligen Monat anzeigen (es ginge natürlich auch eine eigene Spalte).

S. Screenshot zu meiner groben Vorstellung.

Entspricht das dem, was Dir vorschwebt??

Zu klären wäre noch:
Woher weiß das Makro um welchem Monat es sich handelt, wenn neue Daten eingelesen werden? Gibt es ein Datumsfeld je Datensatz? Steht das in der CSV Datei irgendwo als übergreifende Information? Man könnte es sonst aus dem Erstelldatum der CSV ermitteln, über eine Eingabemaske erfragen, einfach in die nächste Spalte klatschen (d.h. organisatorisch sicherstellen, dass nur einmal im Monat eine Aktualisierung erfolgt) 

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von deschroe
26.11.2015, 20:20

Hallo, vielen Dank für die ausführliche Antwort. Allerdings ist immer nur ein Status in dem Bericht gegeben und nicht der Monat, da es sich im Großen und Ganzen um Monatsberichte handelt. Sicherlich wäre es zu überlegen, immer wieder eine neue Spalte mit anzulegen für jeden weiteren Monat. Ich schlage vor ich lade kommende Woche ein Screenshot der Datei hoch, da ich bis dato nicht mehr im Büro sein werde.

Vielen Dank und ich würde mich freuen, wenn noch der ein oder andere Vorschlag kommen würde

0

Hier mal ein Bild der Tabelle:

Dabei sollen im Vergleich zum Vormonat wenn Neukunden hinzu gekommen sind diese in der Spalte "Neu" kenntlich gemacht werden. Eine Veränderung des Status soll ebenfalls markiert werden in dem jeweiligen Sternefeld mit einer zusätzlichen farblichen Hinterlegung.

Grüße

Antwort bewerten Vielen Dank für Deine Bewertung

Verstehst Du unter Zusammenführen, dass Du die Tabellen einfach untereinander kopierst? Dann könnte man auf doppelte Datensätze abfragen bzw. Mehrfacheinträge. Ist der Auftragsstand auch mehrfach vorhanden? Dann bräuchte man ein Kennzeichen, wie man den aktuellen ermittelt.

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von deschroe
24.11.2015, 16:43

Hallo,

danke für die schnelle Antwort. Es handelt sich bei den Datensätzen um Aufträge beispielsweise aus Januar. Diesen Daten sind Mitarbeiter als auch Projekte zugewiesen. Daher hat auch jedes Projekt einen anderen Status. (Teilweise mehrfache Projekte bei einer Firma). Gerne würde ich also im folge Monat Februar die laufenden Projekte abbilden und darstellen, wenn sich der Projektstatus verändert hat. Punkt zwei ist es, dass neue Kunden aus dem Februar als Neukunden in einer extra Spalte markiert werden. Die soll suksessiv fortgeführt werden und möglichst automatisiert, sobald man neue Daten per CSV Datei in Excel einfügt.

Grüße

0
Kommentar von Ninombre
24.11.2015, 16:46

In meinem Beispiel werden die Daten aller Tabellen einfach in einer neuen Tabelle zusammenkopiert. In Spalte A steht der Name des Kunden, in Spalte B das Auftragsdatum

=WENN(ZÄHLENWENN(A1:A25;A1)>1;WENN(B1=MAX(WENN(A1:A25=A1;B1:B25;0));"AKTUELL";"");"NEU")

Als Matrixformel nicht einfach mit Enter, sondern mit Enter+STRG+SHIFT abschließen, dann bilden sich nur {} um die Klammer.

Funktionsweise: Es wird geprüft (zählenwenn), ob es mehr als einen Eintrag gibt. 1 Eintrag = Neukunde. Bei Mehrfacheinträgen wird geprüft, ob das Datum in der jeweiligen Spalte das neueste ist. Dann ist das der aktuelle Auftrag, ansonsten bleibt das Feld leer. Das wären dann die älteren Mehrfacheinträge, die Du löschen kannst.


edit: ich hab nach dem Abschicken gesehen, dass Du etwas ergänzt hast. Das ist in meinem Kommentar nicht berücksichtigt. Muss ich mir später anschauen.

0

Was möchtest Du wissen?