Frage von Snupi99, 71

Gibt es eine Möglichkeit in Excel wenn in einer bestimmten spalte ein wort steht dass die koplette Zeile automatisch in eine neue Excel kopiert wird.?

Hallo, ich habe eine eigene Schlüsseldienst firma.

Ich muss jeden Kunden in mein Kassenbuch mit Monteuren eintragen. Jetzt wollte ich fragen, ob es eine Möglichkeit gibt, das alle Zeilen, wo der gleiche Monteur ist, eine Rechnung erstellt wird?

Danke im vorraus

Hilfreichste Antwort - ausgezeichnet vom Fragesteller
von Ninombre, Community-Experte für Excel, 71

Es geht, wenn ich es richtig verstehe, um eine Art Gehaltsabrechnung für die Monteure. Dazu würden mir drei Alternativen einfallen, abhängig wie gut Du Dich mit Excel auskennst bzw. bereit bist einzuarbeiten.

1. Ganz simpel: Autofilter über die Spalten, nach dem Mitarbeiter filtern und die Ergebnisse auf ein separates Datenblatt kopieren. Keine automatisierte Lösung, dafür aber ziemlich geringes Fehlerrisiko
2. Neues Datenblatt mit einer aber etwas komplexeren Formel. Ganze Zeilen übernehmen geht nicht, die Formel muss in jede Zelle.
=WENNFEHLER(INDEX(B$2:B$14;KGRÖSSTE(($A$2:$A$14=$E$1)*(ZEILE($A$2:$A$14)-1);ZÄHLENWENN($A$2:$A$14;$E$1)+1-ZEILE(A1)));"")
Das ist als Lösung von http://www.at-exceltraining.de/index.php/fragen-a-anworten-zu-excel/49-formeln-u... "geklaut", die Bereiche, in denen gesucht werden soll, muss man noch anpassen.
Da es eine Matrixformel ist, mit Strg+Shift+Enter abschließen, dann bilden sich noch {} um die Formel. Die Variante würde ich allerdings nicht empfehlen, da ziemlich wackelig - um sicherzugehen, dass alles stimmt, würdest Du vermutlich über Filter schauen, ob alle Einträge da sind und dann kann man gleich Variante 1 nehmen.

3. Wenn es auf Dauer notwendig ist: Makro schreiben. Das ist erst mal Aufwand, aber die sauberste Lösung, wenn Variante 1 nicht ok ist. Das Makro sollte ggf. aber auch markieren, welche Vorgänge bereits abgerechnet sind und eine grundsätzliche Funktion zur Archivierung bieten.

Kommentar von Ninombre ,

Auf die "Schnelle" was gebastelt. Das kopiert die Einträge aus dem Kassenbuch nach dem Mitarbeiternamen getrennt in unterschiedliche Tabellenblätter. Was Du Dir noch überlegen müsstest, was mit den alten Einträgen passieren soll. In den momentanen Version wird fröhlich angehängt.

Anmerkungen:
Für Deine Datei musst Du einige der Variablen noch einstellen, d.h. von "lesen ab" bis "Kassenbuch", also in welchen Spalten die Mitarbeiter stehen, wie das Tabellenblatt heißt, auf dem das Kassenbuch geführt wird etc.

Die Tabellenblätter müssen so heißen wie die Mitarbeiter. Wenn das Probleme gibt, gäbe es aber auch andere Lösungen. Weil der Code auf Fehler läuft, wenn es ein Tabellenblatt nicht gibt, läuft am Anfang eine kleine Abfrage, ob alle benötigten Blätter vorhanden sind.
Ich bin davon ausgegangen, dass ein ganzer Monat abgerechnet wird, vom 1. bis Ultimo. Man könnte es auch umbauen, dass beliebige Zeiträume abgerechnet werden.
Um doppeltes Kopieren zu verhindern, wird immer ein Zeitstempel ins Kassenbuch gemacht (neue Spalte, die Du mit spalte_abgerechnet festlegst). Daran auch denken, wenn Du testest - der Zeitstempel muss wieder gelöscht werden, um es zu wiederholen.

Weil bei gutefrage leider lange Zeilen umgebrochen werden, habe ich die | eingefügt. Das muss jeweils am Anfang jeder Zeile stehen. Kannst Du dann mit Suchen/Ersetzen komplett löschen.

| Sub abrechnung()
| Dim i As Integer
| Dim j As Integer
| Dim lesenab As Integer 'Zeile in der die relevanten Einträge beginnen
| Dim schreibenab As Integer 'Zeile ab der im MA Blatt geschrieben wird
| Dim monat As Integer 'Abzurechnender Monat
| Dim kassenbuch As String 'Tabellenblatt auf dem das Kassenbuch geführt wird
| Dim spalte_MA As Integer 'Spalte mit dem Namen des Monteurs
| Dim spalte_datum As Integer 'Spalte mit Rechnungsdatum
| Dim spalte_abgerechnet As Integer 'Spalte zur Kennzeichnung ob abgerechnet
| Dim gefunden As Boolean
| Dim auswahl As Integer
| lesenab = 2
| schreibenab = 15
| spalte_MA = 1
| spalte_datum = 4
| spalte_abgerechnet = 6
| monat = 12 'für mein Beispiel willkürlich auf Dezember gesetzt
| kassenbuch = "Tabelle1"
| ' Prüfen ob es ein Tabellenblatt für jeden Mitarbeiter gibt
| For i = lesenab To Sheets(kassenbuch).Cells(Rows.Count, 1).End(xlUp).Row
| For j = 1 To Sheets.Count
|  If Sheets(j).Name = Sheets(kassenbuch).Cells(i, spalte_MA).Value Then
|  gefunden = True
|  Exit For
|  End If
|   Next j
|   If gefunden <> True Then auswahl = MsgBox("Für den Mitarbeiter " & Sheets(kassenbuch).Cells(i, spalte_MA) & " gibt es noch kein Datenblatt. Anlegen?", vbOKCancel)
|  gefunden = False
|  If auswahl = 1 Then
|  Sheets.Add After:=Sheets(Sheets.Count)
|  ActiveSheet.Name = Sheets(kassenbuch).Cells(i, spalte_MA).Value
|  auswahl = 0
|  End If
|  If auswahl = 2 Then Exit Sub
| Next i
| 'Das Kopieren der Einträge
| For i = lesenab To Sheets(kassenbuch).Cells(Rows.Count, 1).End(xlUp).Row
| If Sheets(kassenbuch).Cells(i, spalte_abgerechnet).Value = "" And Month(Sheets(kassenbuch).Cells(i, spalte_datum).Value) = monat Then
| Sheets(kassenbuch).Rows(i).Copy
| Sheets(Sheets(kassenbuch).Cells(i, 1).Value).Select
| If Sheets(Sheets(kassenbuch).Cells(i, spalte_MA).Value).Cells(Rows.Count, 1).End(xlUp).Row >= schreibenab Then schreibenab = Sheets(Sheets(kassenbuch).Cells(i, spalte_MA).Value).Cells(Rows.Count, 1).End(xlUp).Row + 1
| Cells(schreibenab, 1).Select
| ActiveSheet.Paste
| Sheets(kassenbuch).Cells(i, spalte_abgerechnet).Value = Now()
| End If
| Next
| End sub
Antwort
von neils84, 62

Für so etwas gibt es Software die du damit Verknüpfen kannst, es gibt auch Buchhaltungssoftware die das integriert hat (Personal)

Kommentar von Snupi99 ,

kannst du mir vielleich auch eine software vorschlagen?

Kommentar von neils84 ,

Von Lexware sollte es so etwas geben, am besten mal mit dem Steuerberater sprechen

Antwort
von Allw1553nd3r, 65

Verstehe die Frage nicht ganz, aber du kannst mit Zählenwenn herausfinden wie oft der Name eines Monteurs genannt wird...

Keine passende Antwort gefunden?

Fragen Sie die Community