Zwei Bedingungen
#1
Hallo zusammen,

ich möchte folgendes machen mit zwei Tabellen:

Tabelle 1: Prüfen Spalten G und F

1. Wenn in G ein x steht und in F daneben MMM, dann nehme Wert aus Spalte D(myX) und Wert aus G2(myY), N2(myN) und U2(myU)
2. Aktiviere Tabelle 2 und suche nach Wert myX und schreibe die drei Werte myY, myN und myU in die Spalten neben gefundenem myX mit einer Spalte Abstand zwischen myX und den anderen drei

Bisher habe ich das hier, macht aber nicht was es soll:
Code:
myWertP = "MMM"
         Set rng1 = Application.Worksheets("XXX").Range("F11:F19")
         myAnzahl = Application.WorksheetFunction.CountIf(rng1, myWertP)
         Set rng2 = Application.Worksheets("MMM").Range("D5:M5")
         Set rng3 = Application.Worksheets("XXX").Range("G11:G19")


For k = 1 To myAnzahl
    Application.Worksheets("XXX").Activate
         For Each rng1 In Application.Worksheets("XXX").Range("F11:F19")
            For Each rng3 In Application.Worksheets("XXX").Range("G11:G19")
                If rng1.Value = "MMM" And rng3.Value = "x" Then

                        myMA = Worksheets("XXX").Cells(ActiveCell.Row, 4).Value
                        mySchulung = Worksheets("XXX").Range("G6").Value
                   
                     Application.Worksheets("MMM").Activate

                    For Each Cell In Application.Worksheets("MPKG1").Range("B5:B19").Cells
                        If Cell.Value = myX Then
                            Cells.Activate

                            Worksheets("MMM").Cells(ActiveCell.Row, k).Value = myY

                            k = k + 1
                        End If
                    Next
                End If
            Next
        Next
Next
Die Werte von N2 und U2 sind noch nicht integriert. Ich wollte das es erstmal wenigstens für G funktioniert.

Danke euch.
Top
#2
Hallo,

wie wäre es mit einer Mustertabelle, damit man das nachvollziehen kann?
Gruß

Edgar

Meine Antworten sind freiwillig und ohne Gewähr!
Über Rückmeldungen würde ich mich freuen.
Top
#3
Gerne, s, Anhang.
Tabelle XXX ist der Ursprung, Tabelle MMM wo die Übertragung hin statt findet.

Die Namen in MMM sind bereits so gefiltert, dass nur die zu sehen sind die zu MMM gehören.


Danke.


Angehängte Dateien Thumbnail(s)
       
Top
#4
Hallo Gast,

Edgar schrieb: "eine Mustertabelle" und keine Bildchen!
Mit Bildern kann man nichts anfangen und Nachbauen will keiner deine Tabellen!

Siehe unter "Wichtig" am Anfang des Forums wie man eine Datei hier hinein bringt.
[Bild: attachment-190.gif]
Gruß Günter
aus der Helden-, Messe-, Musik-, Buch-, Universitäts- und Autostadt Leipzig
Top
#5
s. Mustertabelle im Anhang.

THX


Angehängte Dateien
.xlsm   Mustertabelle.xlsm (Größe: 8,97 KB / Downloads: 7)
Top
#6
Hallöchen,

leider ist es ja trotz Beispieltabelle nicht weitergegangen Sad

Ich versuche es allerdings erst mal ohne.

In Dienem Code hast DU
Code:
         For Each rng1 In Application.Worksheets("XXX").Range("F11:F19")
            For Each rng3 In Application.Worksheets("XXX").Range("G11:G19")
                If rng1.Value = "MMM" And rng3.Value = "x" Then

Ich würde das ggf. in einer Schleife lösen, falls das nicht explicit so nötig ist. Du hast ja geschrieben, dass Du es willst, wenn in der einen Zelle das eine steht und daneben das andere ...

Code:
         For Each rng1 In Application.Worksheets("XXX").Range("F11:F19")
                If rng1.Value = "MMM" And rng1.Offset(0,1).Value = "x" Then

Warum Du zwischendurch
Code:
Application.Worksheets("MMM").Activate
hast und anschließend in einem anderen Blatt
Code:
For Each Cell In Application.Worksheets("MPKG1").Range("B5:B19").Cells
suchst, erschließt sich mir gerade nicht.

Auch fehlt in dem codefragment ein Hinweis auf myAnzahl, myX und myY ...

Das ginge dann zusammenzufassen
Code:
Cells.Activate
Worksheets("MMM").Cells(ActiveCell.Row, k).Value = myY
zu
Code:
Worksheets("MMM").Cells(Cell.Row, k).Value = myY

Übrigens würde sich zu jeder Zeile auch ein Kommentar gut machen, damit man sieht, was da passieren soll.
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Top
#7
Danke für die Hilfestellung.

Ich habe einiges komplett überarbeitet.

Nun habe ich folgendes Code das funktioniert, wenn folgendes gemacht werden soll:

Wenn bei Offset 2 ein wert gefunden wird soll die zelle oben drüber kopiert und woanders in Zeile k eingefügt werden.
Dann geht es zu Offset 5 und wenn wert gefunden wird kopiere und einfügen in zeile k+1 usw.

For k = 1 To 4
   For Each rng In Application.Worksheets("PKG").Range("C6:C50")

          
        If rng.Value = myMA Then
         
rng.Offset(0, 2).Select

                If Not Selection.Value = "" Then
                    mySchulung = rng.Offset(-1, 2).Value
                    rng2.Offset(k, 0).Select
                    Selection.Value = mySchulung
                    k = k + 1

rng.Offset(0, 5).Select
                    If Not Selection.Value = "" Then
                        mySchulung = rng.Offset(-1, 5).Value
                        rng2.Offset(k, 0).Select
                        Selection.Value = mySchulung
                        k = k + 1
                                          
rng.Offset(0, 8).Select
                            If Not Selection.Value = "" Then
                                mySchulung = rng.Offset(-1, 8).Value
                                rng2.Offset(k, 0).Select
                                Selection.Value = mySchulung
                                k = k + 1
                               
rng.Offset(0, 11).Select
                                    If Not Selection.Value = "" Then
                                        mySchulung = rng.Offset(-1, 11).Value
                                        rng2.Offset(k, 0).Select
                                        Selection.Value = mySchulung
                                        k = k + 1
       
        'MsgBox (" Mitarbeiter " & myMA & " hat keine Schulungen besucht")
        
           
                End If
                End If
                End If
                End If
                End If

Next
Next

Ich habe jetzt bei jeder Abfrage die Bedingung If Not "" eingesetzt.

Wenn aber die Zelle tatsächlich leer ist haut alles natürlich nicht mehr hin. Das Programm soll dann aber trotzdem weiter gehen und scheun, ob beim nächsten Offset die Bedingung erfüllt wir und das kopieren und einfügen machen.

Wie baue ich das nun ein?

THX
Top
#8
Hallöchen,

dann solltest Du eventuell die Ifs nicht verschachteln, sondern nacheinander ausführen. ALso

Code:
rng.Offset(0, 2).Select
If Not Selection.Value = "" Then
  ...
End IF
rng.Offset(0, 5).Select
If Not Selection.Value = "" Then
  ...
End IF

usw.


man könnte das z.B. auch durch eine Schleife verkürzen, schauen wir aber erst mal, ob diese Änderung die Lösung ist.
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Top
#9
Das war klar. So einfach und ich sehe es nicht Sad.

Lässt sich auch rauslesen in welcher Zeile der Treffer gefunden wurde?

Ich habe ja jetzt:

   For Each rng In Application.Worksheets("PKG").Range("C6:C50")

          
        If rng.Value = myMA Then
         
rng.Offset(0, 2).Select

                If Not Selection.Value = "" Then
                    mySchulung = rng.Offset(-1, 2).Value

Die -1 gilt aber nur, wenn mein Treffer in rng gleich in der ersten Zeile gefunden wurde.

Wenn der Treffer aber erst in der 5. Zeile gefunden wurde, müsste ich -6, 2 hoch gehen.

Ich müsste irgend wie schreiben, wenn Treffer in Zeile x, dann Offset -x, 2

Das wäre klasse Big Grin !

Danke und Grüße
Top
#10
Hallo,

meinst Du vielleicht so?

Code:
mySchulung = rng.Offset(-rng.Row + 5, 2).Value
Gruß Stefan
Win 10 / Office 2016
Top


Gehe zu:


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