2016-07-30 4 views
1

Ich möchte, dass VBA-Code nach bestimmten Datenbereichen sucht, wenn diese Daten im Hauptblatt vorhanden sind, und dann die letzte Zeile der Daten abrufen, die auf Bedingungen basieren. Zum Beispiel (es gibt 3 Zeilen mit "dler" Ich möchte dler mit drei Zeilen des zweiten Blattes vergleichen, wenn alle vorhanden sind, die Zeile von dler abrufen), die meinen, den Namen mit anderen Zeilen zu vergleichen und so weiter ... Das Bild ist zwei Blätter das das erste ist (Hauptblatt) und das zweite ist die Tabelle, an der die vba arbeitet, um Daten in (Hauptblatt) zu finden Ich habe diesen Code, aber ich weiß nicht, wie man es ändert, um mit dynamischen Aufzeichnungen zu arbeiten.Wenn der Wert existiert, holen Sie sich die letzte Zeile dieses Wertes

Main and Search Worksheet Image

Sub Matching_name() 
    Dim a_name As String, i As Long, j As Long, Last_Row As Long 

    For i = Last_Row To 2 Step -1 
     a_name = Cells(i, "B").Value 
     If City = "dler" Then 
      'Set the range destination, Range(“A2”), depending on which 
      'range you want in Sheets(“Remaining”) 
      Rows(i).EntireRow.Copy Destination:=Worksheets("Remaining").Range("A1") 
      Exit For 
     End If 

    Next i 

End Sub 
+0

, was Sie versuchen zu erreichen kopieren. Und können auch Beispiele für Eingabe- und Ausgabedaten sein. – user3598756

+0

Suche mit dieser Bedingung (dler - wakil - 30days) wenn vorhanden letzte Zeile dieser bedingten Daten in verbleibende Tabelle dann kopieren, (dler - wakil - 30days Double) dann (dler - wakil - 30days family) dann (dler - wakil - 100 Stunden) (dler - wakil - 40 Stunden) danach (dler - bazar - 30days) ........ und so weiter – daniel

Antwort

1

Dies wird die letzte passenden Zeilen

Sub Matching_name() 

Dim i As Long, j As Long, k As Long, Last_Row As Long, temp As Long 
Dim a_name As String, s_type As String, c_type As String 

temp = 1 
Last_Row = 6 

For i = 2 To Last_Row 
    Worksheets("Main Sheet").Activate 
    a_name = Cells(i, 2).Value 
    s_type = Cells(i, 5).Value 
    c_type = Cells(i, 6).Value 

    Worksheets("Search Sheet").Activate 
    For j = 1 To 3 
     If Cells(j, 1).Value = a_name And Cells(j, 2).Value = s_type And Cells(j, 3).Value = c_type Then 
      Worksheets("Main Sheet").Activate 
      Rows(i & ":" & i).Select 
      Selection.Copy 
      Worksheets("Remaining").Activate 
      Rows(temp & ":" & temp).Select 
      ActiveSheet.Paste 
      temp = temp + 1 
     End If 
    Next j 
Next i 

Worksheets("Remaining").Activate 
For x = temp To 1 Step -1 
    y = 1 
    While y <= temp 
     If Cells(y, 2).Value = Cells(x, 2).Value And x <> y Then 
      Rows(y & ":" & y).Delete 
      y = y - 1 
      temp = temp - 1 
     End If 
     y = y + 1 
    Wend 
Next x 

End Sub 
+0

es wird nur ein Datensatz abgerufen und nicht letzter Eintrag der spezifischen Bedingung (wenn es viele Zeilen mit dem gleichen Datensatz gibt, möchte ich, dass der letzte Datensatz kopiert wird) .... was ist mit anderen Namen (Pashaw, Zana) mit gleichen Bedingungen? Vielen Dank im Voraus – daniel

+0

siehe meine bearbeitete Antwort oben . In Ihrem Hauptblatt in Zeile 5, wenn dler sale_type wakil und card_type 30 Tage war, dann hat das "verbleibende" Blatt nur die Daten der fünften Zeile (Nein = 4) vom Hauptblatt und nicht die 2 Zeile (Nein = 2) –

+0

der Code muss so funktionieren (zuerst cache dler falls vorhanden suche nach "wakil, ..., ..." wenn eines der Themen vorhanden ist suche dann nach "30 Days, ..., ...") wenn alle Bedingung match dann kopiere die letzte Zeile mit den passenden Daten .... danach (cache dler falls vorhanden suche nach "wakil, ...., ..." falls eines der Themen vorhanden ist suche dann nach 30 Days Double) und so weiter für alle Bedingungen in Suchblatt – daniel

Verwandte Themen