2.5k Aufrufe
Gefragt in Tabellenkalkulation von Einsteiger_in (19 Punkte)
Hallo,

ich habe ein kleines Problem. Ich möchte bestimmte Daten aus einem Tabellenblatt in ein neues kopieren. Die Tabelle sieht wie folgt aus:

Spalte B = Materialnummern (ca. 400 unterschiedliche) es können jedoch auch mehrere gleiche Nummern untereinander stehen)
Spalte M = Datum

Nun möchte ich die nur die Zeile der unterschiedlichen Materialnummern mit dem letzten Datum in ein neues Tabellenblatt kopieren.

Könnt ihr mir helfen?



MfG

Aggi

8 Antworten

0 Punkte
Beantwortet von coros Experte (4k Punkte)
Hallo Aggi,

nachfolgendes Makro sortiert Dir das tabellenblatt mit dem Namen "Tabelle1", Spalte A. Danach wird über eine Schleife die Daten geprüft und nur jeweils ein Datensatz von Mehrfach-Datensätzen in das Tabellenblatt "Tabelle2", Spalte A in die erste freie Zeile.

Kopiere das Makro in ein StandardModul und starte es z.B. über eine Befehlsschaltfläche
[b]Teste das Makro aber bitte in einer Testdatei und nicht gleich in Deiner Originaldatei.[/b]

[b][code]Option Explicit

Sub Prüfen_kopieren()
Dim lngRow As Long
Dim lngLastRow As Long
Dim lngFirstFreeRow As Long
Application.ScreenUpdating = False
lngLastRow = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row
Sheets("Tabelle2").Range("A1") = Sheets("Tabelle1").Range("A1")
Sheets("Tabelle1").Range("A1:A" & lngLastRow).Sort Key1:=Range("A2"), _
                                    Order1:=xlAscending, Header:=xlYes
For lngRow = 2 To lngLastRow
    If Cells(lngRow, 1) <> Cells(lngRow - 1, 1) Then
        lngFirstFreeRow = Sheets("Tabelle2").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row
        Sheets("Tabelle1").Cells(lngRow, 1).Copy Sheets("Tabelle2").Cells(lngFirstFreeRow, 1)
    End If
Next
End Sub[/code][/b]Blattnamen und Bereich musst Du natürlich noch anpassen.

Solltest Du nicht wissen, wie Du den Code in Deine Datei bekommst, dann schau mal auf [url=http://www.excelbeispiele.de] [b][u] meiner HP [/u][/b][/url] in der [b] Rubrik Anleitungen [/b]und dort dann in der[b] Anleitungsnummer 3 [/b]nach. Dort stelle ich dazu eine bebilderte Anleitung zur Verfügung, die Dir sicherlich helfen wird.

Bei Fragen melde Dich.

MfG,
Oliver
[sub]Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du[/sub]
[sup] ein Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.[/sup]
0 Punkte
Beantwortet von Einsteiger_in (19 Punkte)
Hallo Oliver,

vielen Dank für deine schnelle Antwort. Das Makro funzt auch einwandfrei, aber ich möchte die komplette Zeile mit den Materialnummern des letzten Datums (steht in Zeile "M") kopieren.

Kannst du mir auch hierbei weiterhelfen?


MfG

Aggi
0 Punkte
Beantwortet von coros Experte (4k Punkte)
Hallo Aggi,

was genau möchtest Du denn nun? Beschreibe das etwas genauer. Mache Angaben zu Deiner Datei. Denn ansonsten kommt wieder etwas heraus, was Du so nicht haben wolltest, bzw. bei Deiner Datei so nicht angewandt werden kann. Eventuell lädst Du z.B. bei [url=http://www.file-upload.net/]http://www.file-upload.net/ [/url] Deine Datei hoich und postest hier den Link, den Du erhälst. Denn wie Du siehst, funktioniert das Makro, eben nur bei Deiner Datei nicht wie Du es Dir gedacht hast.

MfG,
Oliver
[sub]Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du[/sub]
[sup] ein Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.[/sup]
0 Punkte
Beantwortet von Einsteiger_in (19 Punkte)
Hallo Oliver,

hier ist der Link zu meiner Tabelle.

http://www.file-upload.net/download-1931025/Standardpreisermittlung.xls.html

Nun möchte ich die Zeilen mit den Materialnummern (Spalte "B")des aktuellen Datums (Spalte"K") in eine neue Tabelle kopieren.

MfG

Aggi
0 Punkte
Beantwortet von coros Experte (4k Punkte)
Hallo Aggi,

das sollte nun mit nachfolgendem Makro funktionieren.

Kopiere das Makro in ein StandardModul und starte es z.B. über eine Befehlsschaltfläche
Teste das Makro aber bitte in einer Testdatei und nicht gleich in Deiner Originaldatei.

Option Explicit

Sub Prüfen_kopieren()
Dim lngRow As Long
Dim lngLastRow As Long
Dim lngFirstFreeRow As Long
Application.ScreenUpdating = False
lngLastRow = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row
Sheets("Tabelle3").Range("A1") = Sheets("Standartpreis Ermittlung").Range("A1")
With Sheets("Standartpreis Ermittlung")
.Range("A1:K" & lngLastRow).Sort _
Key1:=.Range("B2"), Order1:=xlAscending, _
Key2:=.Range("K2") _
, Order2:=xlDescending, Header:=xlGuess
End With
For lngRow = 2 To lngLastRow
If Cells(lngRow, 1) <> Cells(lngRow - 1, 1) Then
lngFirstFreeRow = Sheets("Tabelle3").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row
Sheets("Standartpreis Ermittlung").Rows(lngRow).Copy Sheets("Tabelle3").Cells(lngFirstFreeRow, 1)
End If
Next
End Sub
Ich hoffe, es klappt bei Dir. Bei mir hats funktioniert.

MfG,
Oliver
[sub]Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du[/sub]
[sup] ein Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.[/sup]
0 Punkte
Beantwortet von Einsteiger_in (19 Punkte)
Hi Oliver,

ich weiß das ich nerve aber jetzt möchte ich die doppelten Materialnummern (Spalte "B") noch löschen, so das jede Materialnummer mit dem neuesten Datum (Spalte "K") nur noch einmal aufgelistet wird.


MfG

Aggi
0 Punkte
Beantwortet von
Hi,

@Oliver (coros)
Kann es sein, dass sich die For-Schleife an der falschen Spalte orientiert? Aggi (Aggi11) wollte unique Materialnummern (Spalte B). Zu allem Überfluss hat er bei den Bestellungen (Spalte A) leere Zellen (lngFirstFreeRow-Ermittlung).


@Aggi (Aggi11)
Ändere beim Code aus AW5 die For-Schleife wie folgt:
For lngRow = 2 To lngLastRow
If Cells(lngRow, 2) <> Cells(lngRow - 1, 2) Then
lngFirstFreeRow = Sheets("Tabelle3").Cells(Rows.Count, 2).End(xlUp).Offset(1, 0).Row
Sheets("Standartpreis Ermittlung").Rows(lngRow).Copy Sheets("Tabelle3").Cells(lngFirstFreeRow, 1)
End If
Next

Dann sollte das Ergebnis passen.

bye
malSchauen
0 Punkte
Beantwortet von Einsteiger_in (19 Punkte)
Hi,

so funktioniert es.

vielen Dank für eure Hilfe!!



MfG

Aggi
...