Das Clever-Excel-Forum.de - Treffen
findet vom 15. - 17. September 2017 in Thüringen / Region Großer Inselsberg statt. Hotelbuchung ab sofort möglich.


Zelle kopieren nach 3 Bedingungen
#1
Guten Tag zusammen,

ich möchte die Begriffe aus Spalte1 von "Wartungsarbeiten" in die Tabelle von Sheet4 kopieren. Dabei müssen 3 Bedingungen behandelt werden. Ich kriege es nicht hin, dass nur die erste Spalte kopiert wird. Die Datei nimmt die 1. Spalte und spammt die Reihen durch bis XDF. Woran liegt das?




Hab dazu folgenden Code erstellt:
Code:
Code:
Sub Kopieren()

Dim Zeile As Long
Dim ZeileMax As Long
Dim n As Long

With Tabelle1
ZeileMax = .UsedRange.Rows.Count
n = 1

For Zeile = 2 To ZeileMax

If .Cells(Zeile, 3).Value = "Wöchentlich" And .Cells(Zeile, 4).Value = "Freitag" And .Cells(Zeile, 5).Value = "Spätschicht" Then

.Cells(Zeile,1).Copy Destination:=Tabelle5.Rows(n)
n = n + 1


End If
Next Zeile
End With
End Sub

mit freundlichen Grüßen


Angehängte Dateien
.xlsm   Wartungsarbeiten.xlsm (Größe: 24,78 KB / Downloads: 7)
to top
#2
(19.03.2015, 15:40)Excelsius schrieb:
Code:
.Cells(Zeile,1).Copy Destination:=Tabelle5.Rows(n)

Mit Rows nimmst Du die ganze Zeile. Du müsstest innerhalb der Zeile oder der Tabelle noch die Zelle bestimmen:

Code:
Tabelle5.Rows(n).Cells(1,1)
oder kürzer:

Code:
Tabelle5.Cells(n, 1)

Du musst die Werte nicht über Copy einfügen. Es reicht auch so:
Code:
Tabelle5.Cells(n, 1).value = .Cells(Zeile,1).value
Gruß
Steuerfuzzi
[-] Folgende(r) 1 Benutzer sagt Danke an Der Steuerfuzzi für diesen Beitrag:
Excelsius
to top
#3
Danke es funktioniert! 19  

Hab es jetzt auf folgenden Code ausgebaut, jedoch werden die Zellen nicht in den angegebenen Zellen abgespeichert.. das wird immer ohne Sinn verschoben.:/

Code:
Sub Kopieren()

Dim Zeile As Long
Dim ZeileMax As Long
Dim n As Long

With Tabelle1
ZeileMax = .UsedRange.Rows.Count
n = 1

For Zeile = 2 To ZeileMax

If .Cells(Zeile, 3).Value = "Wöchentlich" And .Cells(Zeile, 4).Value = "Freitag" And .Cells(Zeile, 5).Value = "Spätschicht" Then

Tabelle4.Rows(n).Cells(36, 10).Value = .Cells(Zeile, 1).Value
n = n + 1
End If

If .Cells(Zeile, 3).Value = "Wöchentlich" And .Cells(Zeile, 4).Value = "Donnerstag" And .Cells(Zeile, 5).Value = "Spätschicht" Then

Tabelle4.Rows(n).Cells(34, 8).Value = .Cells(Zeile, 1).Value
n = n + 1

End If

If .Cells(Zeile, 3).Value = "Wöchentlich" And .Cells(Zeile, 4).Value = "Mittwoch" And .Cells(Zeile, 5).Value = "Spätschicht" Then

Tabelle4.Rows(n).Cells(34, 6).Value = .Cells(Zeile, 1).Value
n = n + 1

End If

If .Cells(Zeile, 3).Value = "Wöchentlich" And .Cells(Zeile, 4).Value = "Dienstag" And .Cells(Zeile, 5).Value = "Spätschicht" Then

Tabelle4.Rows(n).Cells(34, 4).Value = .Cells(Zeile, 1).Value
n = n + 1

End If

If .Cells(Zeile, 3).Value = "Wöchentlich" And .Cells(Zeile, 4).Value = "Montag" And .Cells(Zeile, 5).Value = "Spätschicht" Then

Tabelle4.Rows(n).Cells(34, 2).Value = .Cells(Zeile, 1).Value
n = n + 1

End If

If .Cells(Zeile, 3).Value = "Wöchentlich" And .Cells(Zeile, 4).Value = "Montag" And .Cells(Zeile, 5).Value = "Frühschicht" Then

Tabelle4.Rows(n).Cells(8, 2).Value = .Cells(Zeile, 1).Value
n = n + 1
End If

If .Cells(Zeile, 3).Value = "Wöchentlich" And .Cells(Zeile, 4).Value = "Dienstag" And .Cells(Zeile, 5).Value = "Frühschicht" Then

Tabelle4.Rows(n).Cells(8, 4).Value = .Cells(Zeile, 1).Value
n = n + 1
End If

If .Cells(Zeile, 3).Value = "Wöchentlich" And .Cells(Zeile, 4).Value = "Mittwoch" And .Cells(Zeile, 5).Value = "Frühschicht" Then

Tabelle4.Rows(n).Cells(8, 6).Value = .Cells(Zeile, 1).Value
n = n + 1
End If

If .Cells(Zeile, 3).Value = "Wöchentlich" And .Cells(Zeile, 4).Value = "Donnerstag" And .Cells(Zeile, 5).Value = "Frühschicht" Then

Tabelle4.Rows(n).Cells(8, 8).Value = .Cells(Zeile, 1).Value
n = n + 1
End If

If .Cells(Zeile, 3).Value = "Wöchentlich" And .Cells(Zeile, 4).Value = "Freitag" And .Cells(Zeile, 5).Value = "Frühschicht" Then

Tabelle4.Rows(n).Cells(8, 10).Value = .Cells(Zeile, 1).Value
n = n + 1
End If

If .Cells(Zeile, 3).Value = "Täglich" Then
Tabelle4.Rows(n).Cells(20, 2).Value = .Cells(Zeile, 1).Value
n = n + 1
End If

Next Zeile
End With
End Sub

Mir fällt grad aber etwsa auf:


Glaub der übernimmt die Anordnung aus Tabelleblatt1, sodass ein Begriff aus Zeile5 nicht in Cells(8,2) wie angegeben angespeichert wird, sondern in Cells (12,2) (halt um 5 verschoben).

Wie krieg ich die Verschiebung weg?
to top
#4
Hallo,

1. UsedRange ist eine gefährliche Angelegenheit, da wäre es besser die letzte gefüllte Zelle in A zu wählen.
2. das n brauchst Du für jede Spalte separat!
3. das .Value kannst Du auch weglassen.

Ich würde das Makro so aufbauen, habe es aber nicht getestet:


Code:
Sub Kopieren()


Dim Zeile As Long
Dim ZeileMax As Long
Dim loWFMo As Long
Dim loWFDi As Long
Dim loWFMi As Long
Dim loWFDo As Long
Dim loWFFr As Long
Dim loWSMo As Long
Dim loWSDi As Long
Dim loWSMi As Long
Dim loWSDo As Long
Dim loWSFr As Long
Dim loTFMo As Long
Dim loTFDi As Long
Dim loTFMi As Long
Dim loTFDo As Long
Dim loTFFr As Long
Dim loTSMo As Long
Dim loTSDi As Long
Dim loTSMi As Long
Dim loTSDo As Long
Dim loTSFr As Long

 loWFMo = 8
 loWFDi = 8
 loWFMi = 8
 loWFDo = 8
 loWFFr = 8
 loWSMo = 36
 loWSDi = 36
 loWSMi = 36
 loWSDo = 36
 loWSFr = 36
 loTFMo = 20
 loTFDi = 20
 loTFMi = 20
 loTFDo = 20
 loTFFr = 20
 loTSMo = 48
 loTSDi = 48
 loTSMi = 48
 loTSDo = 48
 loTSFr = 48
 
With Tabelle1
ZeileMax = Cells(Rows.Count, 1).End(xlUp).Row
n = 1

For Zeile = 2 To ZeileMax
Set Rng = .Cells(Zeile, 1)
    If .Cells(Zeile, 3) = "Wöchentlich" Then
            If .Cells(Zeile, 5) = "Spätschicht" Then
                Select Case .Cells(Zeile, 4)
                    Case "Montag"
                        Cells(loWSMo, 2) = Rng
                        loWSMo = loWSMo + 1
                    Case "Dienstag"
                        Cells(loWSDi, 2) = Rng
                        loWSDi = loWSDi + 1
                    Case "Mittwoch"
                        Cells(loWSMi, 2) = Rng
                        loWSMi = loWSMi + 1
                    Case "Donnerstag"
                        Cells(loWSDo, 2) = Rng
                        loWSDo = loWSDo + 1
                    Case "Freitag"
                        Cells(loWSFr, 2) = Rng
                        loWSFr = loWSFr + 1
                End Select
            Else
                Select Case .Cells(Zeile, 4)
                    Case "Montag"
                        Cells(loWFMo, 2) = Rng
                        loWFMo = loWFMo + 1
                    Case "Dienstag"
                        Cells(loWFDi, 2) = Rng
                        loWFDi = loWFDi + 1
                    Case "Mittwoch"
                        Cells(loWFMi, 2) = Rng
                        loWFMi = loWFMi + 1
                    Case "Donnerstag"
                        Cells(loWFDo, 2) = Rng
                        loWFDo = loWFDo + 1
                    Case "Freitag"
                        Cells(loWFFr, 2) = Rng
                        loWFFr = loWFFr + 1
                End Select
            End If
        Else
             If .Cells(Zeile, 5) = "Spätschicht" Then
                Select Case .Cells(Zeile, 4)
                    Case "Montag"
                        Cells(loTSMo, 2) = Rng
                        loTSMo = loTSMo + 1
                    Case "Dienstag"
                        Cells(loTSDi, 2) = Rng
                        loTSDi = loTSDi + 1
                    Case "Mittwoch"
                        Cells(loTSMi, 2) = Rng
                        loTSMi = loTSMi + 1
                    Case "Donnerstag"
                        Cells(loTSDo, 2) = Rng
                        loTSDo = loTSDo + 1
                    Case "Freitag"
                        Cells(loTSFr, 2) = Rng
                        loTSFr = loTSFr + 1
                End Select
            Else
                Select Case .Cells(Zeile, 4)
                    Case "Montag"
                        Cells(loTFMo, 2) = Rng
                        loTFMo = loTFMo + 1
                    Case "Dienstag"
                        Cells(loTFDi, 2) = Rng
                        loTFDi = loTFDi + 1
                    Case "Mittwoch"
                        Cells(loTFMi, 2) = Rng
                        loTFMi = loTFMi + 1
                    Case "Donnerstag"
                        Cells(loTFDo, 2) = Rng
                        loTFDo = loTFDo + 1
                    Case "Freitag"
                        Cells(loTFFr, 2) = Rng
                        loTFFr = loTFFr + 1
                End Select
            End If
        End If
Next Zeile
End With
End Sub
Gruß


Edgar

Meine Antworten sind freiwillig und ohne Gewähr!
Über Rückmeldungen würde ich mich freuen.
to top
#5
Schonmal vielen Dank Edgar!

Ich musste nur die Spaltennummern anpassen dann lief das alles. Nur bei den TäglichenAufgaben spuckt der nichts aus :/
to top
#6
Hallo,

ich habe es gerade überarbeitet, weil man da doch einiges sparen kann:


Code:
Sub Kopieren()



Dim Zeile As Long
Dim ZeileMax As Long
Dim loWFMo As Long
Dim loWFDi As Long
Dim loWFMi As Long
Dim loWFDo As Long
Dim loWFFr As Long
Dim loWSMo As Long
Dim loWSDi As Long
Dim loWSMi As Long
Dim loWSDo As Long
Dim loWSFr As Long
Dim loTF As Long
Dim loTS As Long
Dim loSpalte As Long

 loWFMo = 8
 loWFDi = 8
 loWFMi = 8
 loWFDo = 8
 loWFFr = 8
 loWSMo = 36
 loWSDi = 36
 loWSMi = 36
 loWSDo = 36
 loWSFr = 36
 loTF = 20
 loTS = 48
 
With Tabelle1
ZeileMax = .Cells(Rows.Count, 1).End(xlUp).Row
n = 1

For Zeile = 2 To ZeileMax
Set Rng = .Cells(Zeile, 1)
    If .Cells(Zeile, 3) = "Wöchentlich" Then
            If .Cells(Zeile, 5) = "Spätschicht" Then
                Select Case .Cells(Zeile, 4)
                    Case "Montag"
                        Cells(loWSMo, 2) = Rng
                        loWSMo = loWSMo + 1
                    Case "Dienstag"
                        Cells(loWSDi, 4) = Rng
                        loWSDi = loWSDi + 1
                    Case "Mittwoch"
                        Cells(loWSMi, 6) = Rng
                        loWSMi = loWSMi + 1
                    Case "Donnerstag"
                        Cells(loWSDo, 8) = Rng
                        loWSDo = loWSDo + 1
                    Case "Freitag"
                        Cells(loWSFr, 10) = Rng
                        loWSFr = loWSFr + 1
                End Select
            Else
                Select Case .Cells(Zeile, 4)
                    Case "Montag"
                        Cells(loWFMo, 2) = Rng
                        loWFMo = loWFMo + 1
                    Case "Dienstag"
                        Cells(loWFDi, 4) = Rng
                        loWFDi = loWFDi + 1
                    Case "Mittwoch"
                        Cells(loWFMi, 6) = Rng
                        loWFMi = loWFMi + 1
                    Case "Donnerstag"
                        Cells(loWFDo, 8) = Rng
                        loWFDo = loWFDo + 1
                    Case "Freitag"
                        Cells(loWFFr, 10) = Rng
                        loWFFr = loWFFr + 1
                End Select
            End If
        Else
                    For loSpalte = 2 To 10 Step 2
                        Cells(loTF, loSpalte) = Rng
                        Cells(loTS, loSpalte) = Rng
                    Next
                    loTF = loTF + 1
                    loTS = loTS + 1
        End If
Next Zeile
End With
End Sub
Gruß


Edgar

Meine Antworten sind freiwillig und ohne Gewähr!
Über Rückmeldungen würde ich mich freuen.
to top
#7
Musste noch die Tabelle "Erledigt" (->"Tabelle1", unter der eigentlichen Tabelle)hinzuführen. Deshalb löscht mir dein neuer Code ein par Zeilen aus.
Dein Code ist super so wie er war, nur ich kriege es nicht hin, dass er mir alle "Täglich" Spalten ausfüllt.
Für Erledigt hab ich einfach den selben Code genommen, nur dass er mir jetzt in Wartungsarbeiten!Spalte2 nach der Tätigkeit sucht.

Um das "Täglich"-Problem zu lösen, hab ich einfach die Cases z.Bsp. "Montag" in "" umgewandelt, da diese Felder in Wartungsarbeiten!Spalte3-5 ja auch nicht ausgefüllt sind, das klappt jedoch auch nicht.. nach wie vor werden die "Täglich"-Aufgaben nur in Spalte B im passenden Abschnitt abgespeichert. Sollte man das umsetzen können wäre die Tabelle so, wie ich sie mir vorgestellt habe.Smile

Code:
With Tabelle1
ZeileMax = Cells(Rows.Count, 1).End(xlUp).Row
n = 1

For Zeile = 2 To ZeileMax
Set Rng = .Cells(Zeile, 1)
   If .Cells(Zeile, 3) = "Wöchentlich" Then
           If .Cells(Zeile, 5) = "Spätschicht" Then
               Select Case .Cells(Zeile, 4)
                   Case "Montag"
                       Cells(loWSMo, 2) = Rng
                       loWSMo = loWSMo + 1
                   Case "Dienstag"
                       Cells(loWSDi, 4) = Rng
                       loWSDi = loWSDi + 1
                   Case "Mittwoch"
                       Cells(loWSMi, 6) = Rng
                       loWSMi = loWSMi + 1
                   Case "Donnerstag"
                       Cells(loWSDo, 8) = Rng
                       loWSDo = loWSDo + 1
                   Case "Freitag"
                       Cells(loWSFr, 10) = Rng
                       loWSFr = loWSFr + 1
               End Select
           Else
               Select Case .Cells(Zeile, 4)
                   Case "Montag"
                       Cells(loWFMo, 2) = Rng
                       loWFMo = loWFMo + 1
                   Case "Dienstag"
                       Cells(loWFDi, 4) = Rng
                       loWFDi = loWFDi + 1
                   Case "Mittwoch"
                       Cells(loWFMi, 6) = Rng
                       loWFMi = loWFMi + 1
                   Case "Donnerstag"
                       Cells(loWFDo, 8) = Rng
                       loWFDo = loWFDo + 1
                   Case "Freitag"
                       Cells(loWFFr, 10) = Rng
                       loWFFr = loWFFr + 1
               End Select
           End If
       Else
            If .Cells(Zeile, 5) = "" Then
               Select Case .Cells(Zeile, 4)
                   Case ""
                       Cells(loTSMo, 2) = Rng
                       loTSMo = loTSMo + 1
                   Case ""
                       Cells(loTSDi, 4) = Rng
                       loTSDi = loTSDi + 1
                   Case ""
                       Cells(loTSMi, 6) = Rng
                       loTSMi = loTSMi + 1
                   Case ""
                       Cells(loTSDo, 8) = Rng
                       loTSDo = loTSDo + 1
                   Case ""
                       Cells(loTSFr, 10) = Rng
                       loTSFr = loTSFr + 1
               End Select
           Else
               If .Cells(Zeile, 5) = "" Then
               Select Case .Cells(Zeile, 4)
                   Case ""
                       Cells(loTSMo, 2) = Rng
                       loTSMo = loTSMo + 1
                   Case ""
                       Cells(loTSDi, 4) = Rng
                       loTSDi = loTSDi + 1
                   Case ""
                       Cells(loTSMi, 6) = Rng
                       loTSMi = loTSMi + 1
                   Case ""
                       Cells(loTSDo, 8) = Rng
                       loTSDo = loTSDo + 1
                   Case ""
                       Cells(loTSFr, 10) = Rng
                       loTSFr = loTSFr + 1
               End Select
           Else
               Select Case .Cells(Zeile, 4)
                   Case ""
                       Cells(loTFMo, 2) = Rng
                       loTFMo = loTFMo + 1
                   Case ""
                       Cells(loTFDi, 4) = Rng
                       loTFDi = loTFDi + 1
                   Case ""
                       Cells(loTFMi, 6) = Rng
                       loTFMi = loTFMi + 1
                   Case ""
                       Cells(loTFDo, 8) = Rng
                       loTFDo = loTFDo + 1
                   Case ""
                       Cells(loTFFr, 10) = Rng
                       loTFFr = loTFFr + 1
               End Select
       End If
       End If
       End If
Leider kann ich keine Datei hochladen, da diese zu groß geworden ist.
to top
#8
Hi,

(20.03.2015, 14:36)Excelsius schrieb: Leider kann ich keine Datei hochladen, da diese zu groß geworden ist.

Du könntest sie in die Dropbox legen und den Link hier veröffentlichen!
Gruß Ralf

?mage

Die deutsche Rechtschreibung ist Freeware, d.h. du kannst sie kostenlos nutzen.
Allerdings ist sie nicht Open Source, deswegen darfst du sie nicht verändern oder in veränderter Form veröffentlichen.
to top
#9
Hallo,

mein geänderter Code sollte eigentlich die Tagesaufgaben sowohl in Früh- als auch in Spätschicht eintragen.
Gruß


Edgar

Meine Antworten sind freiwillig und ohne Gewähr!
Über Rückmeldungen würde ich mich freuen.
to top
#10
Dropbox kann ich hier auf Arbeit leider nicht benutzen.
to top


Möglicherweise verwandte Themen...
Thema Verfasser Antworten Ansichten Letzter Beitrag
  Zelle kopieren Platzwart 2 40 02.12.2016, 15:00
Letzter Beitrag: Platzwart
  Excel VBA, Bild aus nebenstehender Zelle kopieren wenn Zelle ausgewählt ist xChristianx 5 74 30.11.2016, 11:32
Letzter Beitrag: xChristianx
  Zellbereiche von Excel nach Word an bestimmte Stelle kopieren Timo 4 99 22.11.2016, 19:14
Letzter Beitrag: schauan
  Bestimmter teil aus Zelle in eine andere Kopieren markaay 3 54 17.11.2016, 11:13
Letzter Beitrag: BoskoBiati
  [geteilt] Summewenns Formel die nach mehreren Bedingungen Summen bildet ConDucTi 7 140 01.11.2016, 17:29
Letzter Beitrag: Jockel
  Zeilen in neues Arbeitsblatt je nach Bedingung kopieren Zeppi 1 60 24.10.2016, 11:22
Letzter Beitrag: IchBinIch
  Sortierung mehrerer Zeilen nach Größe einer bestimmten Zelle Godman2 8 210 05.10.2016, 18:30
Letzter Beitrag: schauan
  Nach zwei Kriterien in zwei Spalten gefilterte Zeilen lückenlos kopieren (oder so) Sommer 2 131 26.09.2016, 12:40
Letzter Beitrag: Sommer
  Hyperlink fortlaufend nach unten Kopieren Martin und Kamilla 2 182 27.08.2016, 08:42
Letzter Beitrag: Martin und Kamilla
  Nach Inhalt Zelle filtern D K 5 289 26.07.2016, 19:24
Letzter Beitrag: schauan

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste