19.2k Aufrufe
Gefragt in WindowsXP von exceluser91 Mitglied (103 Punkte)
Hallo und feinen Nachmittag zusammen,

ich bin derzeit in der Arbeit als Werkstudent mit einem Project involviert.
Excel!

Um einen schnelleren Arbeitsfluss zu ermöglichen, sollten manche Vorgänge per Makros funktionieren..
Jetzt zu der Aufgabe und ich hoffe ihr könnt mir helfen sonst, bin ich verloren^^

1. Jedes Monat werden aus einer txt datei ( monatl. wird eine neue txt datei angelegt) die Daten in eine Excel-datei eingelesen.
kann man dafür ein Makro erstellen?


2. Die Lasche "Tabelle 1" sollte sich per Makro in "Reichweite" umändern lassen, ebenso sollte gleichzeitig dann eine neue Lasche mit Titel "Summe" zusätzlich hinzugefügt werden.

3, Per Makro: Aus der oben genannten txt (oder aus der fertig importierten) müssen dann, alle Zeilen ausgeschnitten, welche in der Spalte C "Summe" stehen haben und in das erstellte Tabellenblatt "Summe" eingefügt werden.

4. Per Makro würde ich dann gerne alle leeren Zeilen, sowie Zeilen
welche doppelt genannt werden löschen, außer in der ersten Zeile, Quasi eine Doppelnennung dieser Zeile vermeiden!

Test Inventur: Reichweiten-/Abwertsatzermittlung 02.10.2012 10:59:25 Seite: 2

das 5. und letzte Makro

a)Spalte einfügen in das erste Tabellenblatt mit dem Namen "Dispo_Name"
b) Spalte löschen WFG


Ob mir hier jmd helfen kann, das wäre der Knüller!
Leider habe ich erst ab kommenden März eine Excel spezifische Weiterbildung in meiner Uni.. und leisten kann ich Sie mir bis dato schwer!
Vielen vielen Dank im voraus und ich freue mich über jede produktive Antwort!

Viele Grüße
Ben

81 Antworten

0 Punkte
Beantwortet von m-o Profi (22.8k Punkte)
Hallo Benjamin,

noch einmal leicht geändert:

Sub kopieren_loeschen_neu4()

Dim anfang, ende, zeile, lzeile, szeile As Integer

'Bildschirmaktualisierung ausschalten:
Application.ScreenUpdating = False

'letzte Zeile im aktiven Arbeitsblatt "Reichweite" ermitteln
lzeile = ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row

'Anfang des zu kopierenden Bereichs suchen: zwei Zeilen untereinander mit ---
For zeile = 6 To lzeile
If Left(ActiveSheet.Cells(zeile, 1).Value, 1) = "-" And Left(ActiveSheet.Cells(zeile - 1, 1).Value, 1) = "-" Then
anfang = zeile + 1
Exit For
End If
Next zeile

For zeile = 6 To lzeile
'Gesamtsumme
If Left(ActiveSheet.Cells(zeile, 3).Value, 11) = "Gesamtsumme" Then
ende = zeile
Exit For
End If
Next zeile

'gefundenen Bereich kopieren
ActiveSheet.Range(Cells(anfang, 1), Cells(ende, 1)).EntireRow.Copy Destination:=Worksheets("Summe").Cells(1, 1)

For zeile = lzeile To 6 Step -1
'Zeile mit VD suchen und kopieren
If Left(ActiveSheet.Cells(zeile, 9).Value, 2) = "VD" And Left(ActiveSheet.Cells(zeile, 1).Value, 1) = " " Then
ActiveSheet.Cells(zeile, 1).EntireRow.Copy Destination:=Worksheets("Summe").Cells(6 + ende - anfang + 1, 1)
szeile = szeile + 1
End If
Next zeile

'Nun alle nicht benötigten Zeilen löschen
'Löschen von rückwärts
For zeile = lzeile To 6 Step -1
'alle Zeilen, die hinter Gesamtsumme stehen werden gelöscht
If zeile >= ende Then ActiveSheet.Rows(zeile).Delete

'Alle Zeilen mit Summe löschen
If Left(ActiveSheet.Cells(zeile, 3).Value, 5) = "Summe" Then ActiveSheet.Rows(zeile).EntireRow.Delete

'leere Zeilen löschen
With ActiveSheet.Range(Cells(zeile, 1), Cells(zeile, 19))
If Application.WorksheetFunction.CountBlank(.Cells) = .Cells.Count Then
Rows(zeile).EntireRow.Delete
End If
End With

'Zeilen, die mit - beginnen werden gelöscht
If Left(ActiveSheet.Cells(zeile, 1).Value, 1) = "-" Then ActiveSheet.Rows(zeile).EntireRow.Delete

'Zellen in denen in Spalte A keine Zahl steht werden gelöscht
If Not IsNumeric(ActiveSheet.Cells(zeile, 1)) Then ActiveSheet.Rows(zeile).EntireRow.Delete

'Zellen mit Leerzeichen in Spalte A werden gelöscht
If IsNumeric(ActiveSheet.Cells(zeile, 1)) And ActiveSheet.Cells(zeile, 1).Value = 0 Then ActiveSheet.Rows(zeile).EntireRow.Delete

Next zeile

'Spalte 2 mit WFG löschen
Sheets("Summe").Columns(2).Delete Shift:=xlToLeft

'Im Blatt Summe alle Zeilen löschen, die mit -, A, D oder S anfagen
For zeile = Worksheets("Summe").UsedRange.SpecialCells(xlCellTypeLastCell).Row To 1 Step -1
If Left(Worksheets("Summe").Cells(zeile, 1).Value, 1) = "-" Then Worksheets("Summe").Rows(zeile).EntireRow.Delete
If Left(Worksheets("Summe").Cells(zeile, 1).Value, 1) = "A" Then Worksheets("Summe").Rows(zeile).EntireRow.Delete
If Left(Worksheets("Summe").Cells(zeile, 1).Value, 1) = "D" Then Worksheets("Summe").Rows(zeile).EntireRow.Delete
If Left(Worksheets("Summe").Cells(zeile, 1).Value, 1) = "S" Then Worksheets("Summe").Rows(zeile).EntireRow.Delete
'Zeilen löschen, in denen in Spalte I die Buchstaben AS stehen
If Left(Worksheets("Summe").Cells(zeile, 9).Value, 2) = "AS" Then Worksheets("Summe").Rows(zeile).EntireRow.Delete
Next zeile

'Bildschirmaktualisierung einschalten:
Application.ScreenUpdating = True

End Sub


Gruß

M.O.
0 Punkte
Beantwortet von exceluser91 Mitglied (103 Punkte)
hat alles geklappt

nur 0,00% VD 0 0

steht noch 6 zeilen unter der Gesamtsumme, VD in spalte "H"
0 Punkte
Beantwortet von exceluser91 Mitglied (103 Punkte)
Machst du das hier eigentl. hobbymäßig oder beruflich?
0 Punkte
Beantwortet von m-o Profi (22.8k Punkte)
Hallo Benjamin,

ich dachte das soll auch mitkopiert werden. Wenn das nicht der Fall ist, dann hier das geänderte Makro:

Sub kopieren_loeschen_neu5()

Dim anfang, ende, zeile, lzeile, szeile As Integer

'Bildschirmaktualisierung ausschalten:
Application.ScreenUpdating = False

'letzte Zeile im aktiven Arbeitsblatt "Reichweite" ermitteln
lzeile = ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row

'Anfang des zu kopierenden Bereichs suchen: zwei Zeilen untereinander mit ---
For zeile = 6 To lzeile
If Left(ActiveSheet.Cells(zeile, 1).Value, 1) = "-" And Left(ActiveSheet.Cells(zeile - 1, 1).Value, 1) = "-" Then
anfang = zeile + 1
Exit For
End If
Next zeile

For zeile = 6 To lzeile
'Gesamtsumme
If Left(ActiveSheet.Cells(zeile, 3).Value, 11) = "Gesamtsumme" Then
ende = zeile
Exit For
End If
Next zeile

'gefundenen Bereich kopieren
ActiveSheet.Range(Cells(anfang, 1), Cells(ende, 1)).EntireRow.Copy Destination:=Worksheets("Summe").Cells(1, 1)

'Nun alle nicht benötigten Zeilen löschen
'Löschen von rückwärts
For zeile = lzeile To 6 Step -1
'alle Zeilen, die hinter Gesamtsumme stehen werden gelöscht
If zeile >= ende Then ActiveSheet.Rows(zeile).Delete

'Alle Zeilen mit Summe löschen
If Left(ActiveSheet.Cells(zeile, 3).Value, 5) = "Summe" Then ActiveSheet.Rows(zeile).EntireRow.Delete

'leere Zeilen löschen
With ActiveSheet.Range(Cells(zeile, 1), Cells(zeile, 19))
If Application.WorksheetFunction.CountBlank(.Cells) = .Cells.Count Then
Rows(zeile).EntireRow.Delete
End If
End With

'Zeilen, die mit - beginnen werden gelöscht
If Left(ActiveSheet.Cells(zeile, 1).Value, 1) = "-" Then ActiveSheet.Rows(zeile).EntireRow.Delete

'Zellen in denen in Spalte A keine Zahl steht werden gelöscht
If Not IsNumeric(ActiveSheet.Cells(zeile, 1)) Then ActiveSheet.Rows(zeile).EntireRow.Delete

'Zellen mit Leerzeichen in Spalte A werden gelöscht
If IsNumeric(ActiveSheet.Cells(zeile, 1)) And ActiveSheet.Cells(zeile, 1).Value = 0 Then ActiveSheet.Rows(zeile).EntireRow.Delete

Next zeile

'Spalte 2 mit WFG löschen
Sheets("Summe").Columns(2).Delete Shift:=xlToLeft

'Im Blatt Summe alle Zeilen löschen, die mit -, A, D oder S anfagen
For zeile = Worksheets("Summe").UsedRange.SpecialCells(xlCellTypeLastCell).Row To 1 Step -1
If Left(Worksheets("Summe").Cells(zeile, 1).Value, 1) = "-" Then Worksheets("Summe").Rows(zeile).EntireRow.Delete
If Left(Worksheets("Summe").Cells(zeile, 1).Value, 1) = "A" Then Worksheets("Summe").Rows(zeile).EntireRow.Delete
If Left(Worksheets("Summe").Cells(zeile, 1).Value, 1) = "D" Then Worksheets("Summe").Rows(zeile).EntireRow.Delete
If Left(Worksheets("Summe").Cells(zeile, 1).Value, 1) = "S" Then Worksheets("Summe").Rows(zeile).EntireRow.Delete
'Zeilen löschen, in denen in Spalte I die Buchstaben AS stehen
If Left(Worksheets("Summe").Cells(zeile, 9).Value, 2) = "AS" Then Worksheets("Summe").Rows(zeile).EntireRow.Delete
Next zeile

'Bildschirmaktualisierung einschalten:
Application.ScreenUpdating = True

End Sub



Und ich mache das hauptsächtlich hobbymäßig aus Spaß an der Freude :-).

Gruß

M.O.
0 Punkte
Beantwortet von exceluser91 Mitglied (103 Punkte)
Ja Wahnsinn, jetzt is es SUPER!

evtl. könnte es sein dass auch die Überschriften ganz oben gelöscht werden müssen, daher wuerde ich diesen Thread gerne offen lassen, falls es wirklich dazu kommen sollte!?

M.O. an dich, vielen vielen Dank für die Hilfe, weltklasse!
0 Punkte
Beantwortet von exceluser91 Mitglied (103 Punkte)
Mist, ich hab noch was gefunden,

Unter Gesamtsumme ist auch nochmal so eine Auflistung
Gesamtsumme 6.100.400,51 59.046.472,86 6.797.684,90
1,11% 10 x,75 xxxxxx 0,45% 11 xxxxx 266.920,59
0,13% 13 76x,02 , 81.8xy81
1,75% 14 1.x.102,21 1.yx,91
6,96% 15 3.991.332,66 3.995.402,84
0,23% 16 132sds,66 132.673,66
0,00% 29 0 0
0,00% VD 0 666.113,31
0 Punkte
Beantwortet von exceluser91 Mitglied (103 Punkte)
könnten die weiteren werte ab Gesamtsumme bis zu den nächsten --------- da auch noch mit rüberkopiert werden
sind meist so 7-8 Zeilen, war leider bei den vorherigen Datein nicht so
0 Punkte
Beantwortet von m-o Profi (22.8k Punkte)
Hallo Benjamin,

schau mal nach ob das so klappt (ungetestet):

Sub kopieren_loeschen_neu6()

Dim anfang, ende, zeile, lzeile, szeile As Integer

'Bildschirmaktualisierung ausschalten:
Application.ScreenUpdating = False

'letzte Zeile im aktiven Arbeitsblatt "Reichweite" ermitteln
lzeile = ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row

'Anfang des zu kopierenden Bereichs suchen: zwei Zeilen untereinander mit ---
For zeile = 6 To lzeile
If Left(ActiveSheet.Cells(zeile, 1).Value, 1) = "-" And Left(ActiveSheet.Cells(zeile - 1, 1).Value, 1) = "-" Then
anfang = zeile + 1
Exit For
End If
Next zeile

For zeile = 6 To lzeile
'Gesamtsumme
If Left(ActiveSheet.Cells(zeile, 3).Value, 11) = "Gesamtsumme" Then
ende = zeile
Exit For
End If
Next zeile

For zeile = ende To lzeile
'Trennlinie nach Gesamtsumme suchen
If Left(ActiveSheet.Cells(zeile, 1).Value, 1) = "-" Then
ende = zeile
Exit For
End If
Next zeile


'gefundenen Bereich kopieren
ActiveSheet.Range(Cells(anfang, 1), Cells(ende, 1)).EntireRow.Copy Destination:=Worksheets("Summe").Cells(1, 1)

'Nun alle nicht benötigten Zeilen löschen
'Löschen von rückwärts
For zeile = lzeile To 6 Step -1
'alle Zeilen, die hinter Gesamtsumme stehen werden gelöscht
If zeile >= ende Then ActiveSheet.Rows(zeile).Delete

'Alle Zeilen mit Summe löschen
If Left(ActiveSheet.Cells(zeile, 3).Value, 5) = "Summe" Then ActiveSheet.Rows(zeile).EntireRow.Delete

'leere Zeilen löschen
With ActiveSheet.Range(Cells(zeile, 1), Cells(zeile, 19))
If Application.WorksheetFunction.CountBlank(.Cells) = .Cells.Count Then
Rows(zeile).EntireRow.Delete
End If
End With

'Zeilen, die mit - beginnen werden gelöscht
If Left(ActiveSheet.Cells(zeile, 1).Value, 1) = "-" Then ActiveSheet.Rows(zeile).EntireRow.Delete

'Zellen in denen in Spalte A keine Zahl steht werden gelöscht
If Not IsNumeric(ActiveSheet.Cells(zeile, 1)) Then ActiveSheet.Rows(zeile).EntireRow.Delete

'Zellen mit Leerzeichen in Spalte A werden gelöscht
If IsNumeric(ActiveSheet.Cells(zeile, 1)) And ActiveSheet.Cells(zeile, 1).Value = 0 Then ActiveSheet.Rows(zeile).EntireRow.Delete

Next zeile

'Spalte 2 mit WFG löschen
Sheets("Summe").Columns(2).Delete Shift:=xlToLeft

'Im Blatt Summe alle Zeilen löschen, die mit -, A, D oder S anfagen
For zeile = Worksheets("Summe").UsedRange.SpecialCells(xlCellTypeLastCell).Row To 1 Step -1
If Left(Worksheets("Summe").Cells(zeile, 1).Value, 1) = "-" Then Worksheets("Summe").Rows(zeile).EntireRow.Delete
If Left(Worksheets("Summe").Cells(zeile, 1).Value, 1) = "A" Then Worksheets("Summe").Rows(zeile).EntireRow.Delete
If Left(Worksheets("Summe").Cells(zeile, 1).Value, 1) = "D" Then Worksheets("Summe").Rows(zeile).EntireRow.Delete
If Left(Worksheets("Summe").Cells(zeile, 1).Value, 1) = "S" Then Worksheets("Summe").Rows(zeile).EntireRow.Delete
'Zeilen löschen, in denen in Spalte I die Buchstaben AS stehen
If Left(Worksheets("Summe").Cells(zeile, 9).Value, 2) = "AS" Then Worksheets("Summe").Rows(zeile).EntireRow.Delete
Next zeile

'Bildschirmaktualisierung einschalten:
Application.ScreenUpdating = True

End Sub


Gruß

M.O.
0 Punkte
Beantwortet von exceluser91 Mitglied (103 Punkte)
Hallo, bin nur kurz in der Arbeit und hab fix druebergeschaut

Sah sehr gut aus, etwas kleines habe ich glaube ich noch gefunden,
dazu werde ich dich am Dienstag nochmals kontaktieren!

ps: für hobby, is das ganz schoen ein aufwand, nicht? :)
0 Punkte
Beantwortet von exceluser91 Mitglied (103 Punkte)
Ok, nach der der Gesamtsumme, steht nochmal ein Text, den ich wohl nicht erwähnt habte, der auch noch mit in die lasche summe kopiert habe,
das sind hauptsächlich acc spezifische Daten, Benutzername usw.
kann das evtl auch noch gelöscht werden?
...