2016-10-27 2 views
0

Ich bin neu mit VBA-Codierung, könnten Sie mir zu diesem Anliegen helfen?Excel VBA Codierung

Ich erstelle gerade ein Makro, das den spezifischen Text in der Spalte AJ (z. B. "Chase") sucht und wenn es gefunden wird, sucht es nach der Entität aus der Spalte A und kopiert sie dann in ein anderes Blatt.

enter image description here

enter image description here

Vielen Dank im Voraus!

+0

Bitte senden Sie den Code so weit haben. – jsheeran

+0

Vielleicht ist 'SVERWEIS' Funktion, was Sie suchen! – RCaetano

+0

Sub EachLoopExample() Dim ws1 Wie Arbeitsblatt, WS2 Als Arbeitsblatt Set WS1 = Sheets ("Sheet1") Set WS2 = Sheets ("Sheet3") For Each MyCell In ws1.Range ("AE: AE ") Wenn MyCell.Value =" check "Dann sResult = Application.WorksheetFunction.VLookup (" check ", ws1.Cells (" AE7: A2693 "), 31). Wählen Sie ws2.Range (" A2 "). Selection.Value Ende Wenn Nächste MyCell End Sub – Irvin

Antwort

0

Versuchen Sie dies. Aus den Kommentaren genommen. Denken Sie daran, dass die Fehler, die Sie möglicherweise haben, auf die VLookup-Formel zurückzuführen sind. Sie müssen sich ansehen, wie die VLookup-Formel funktioniert.

Die Formel sucht nach "Check". Die Fehler, die Sie bekommen, befinden sich in dem Bereich, in dem Sie suchen. Sie suchen nach "AE7: A2693", das ist Spalte AE zu A - es ist nicht möglich rückwärts zu suchen, also sollte es A2693: AE7 sein. Sie müssen den richtigen Bereich finden und im folgenden Code ändern.
Sind Sie sicher, dass die Spalte 31 den Rückgabewert enthält?

Sub EachLoopExample() 

Dim ws1 As Worksheet, ws2 As Worksheet 
Dim MyCell As Range 
Dim sResult As String 

Set ws1 = Sheets("Sheet1") 
Set ws2 = Sheets("Sheet3") 
For Each MyCell In ws1.Range("AE:AE") 
    If MyCell.Value = "check" Then 

     sResult = Application.WorksheetFunction.VLookup("check", ws1.Range("B1:C3"), 1, False) 
     ws2.Range("A2").Value = sResult 
    End If 
Next MyCell 
End Sub 
+0

Hallo Niclas, ich schaffe es, die obige Kodierung funktionieren zu lassen, vielen Dank für deine Anweisungen und berate. Es kann jedoch nur ein Zellenwert nach der obigen Codierung gesucht werden. Wenn beispielsweise in der Spalte AK drei Zellen mit dem Wert "Chase" vorhanden sind, wird nur die erste Zeile in das angegebene Blatt kopiert. Können Sie uns bitte mitteilen, was in der obigen Codierung geändert werden könnte? – Irvin

+0

Können Sie die genaue VLookup-Formel, die Sie verwenden, zusammen mit dem Datenbereich posten? Ich bin mir immer noch nicht ganz sicher, was Sie zu tun versuchen. Sie möchten diese VLookup-Formel in Sheet3 einfügen (um die Übereinstimmungen zu sehen), aber was haben Sie in Sheet1? AE ist check, AK ist chase? – Niclas

+0

Lesen Sie Ihre Frage erneut. Was Sie wollen, ist z. "Chase" in Spalte AJ, und wenn es gefunden wird, soll es den Wert von Spalte A (z. B. OC_81) in Sheet3 Spalte A? – Niclas

0
Sub EachLoop() 

Dim ws1 As Worksheet 
Dim ws2 As Worksheet 
Dim FinalRow As Integer 
Dim i As Integer 

Set ws1 = Sheet1 
Set ws2 = Sheet3 

ws1.Select 
FinalRow = Cells(Rows.Count, 1).End(xlUp).Row 

For i = 7 To FinalRow 
    If Cells(i, 31) = "check" Then 
     Range(Cells(i, 1), Cells(i, 7)).Copy 
     ws2.Select 
     Range("A200").End(xlUp).Offset(1, 0).PasteSpecial xlPasteValuesAndNumberFormats 
     ws1.Select 
    End If 

Next i 

ws2.Select 

Range("B2").Select 

Call EachLoop2 

End Sub 

Sub EachLoop2() 

Dim ws1 As Worksheet 
Dim ws2 As Worksheet 
Dim FinalRow As Integer 
Dim i As Integer 

Set ws1 = Sheet1 
Set ws2 = Sheet3 

ws1.Select 
FinalRow = Cells(Rows.Count, 1).End(xlUp).Row 

For i = 7 To FinalRow 
    If Cells(i, 32) = "check" Then 
     Range(Cells(i, 1), Cells(i, 13)).Copy 
     ws2.Select 
     Range("H200").End(xlUp).Offset(1, 0).PasteSpecial xlPasteValuesAndNumberFormats 
     ws1.Select 
    End If 

Next i 

ws2.Select 

Range("B2").Select 

Call EachLoop2_ext 


End Sub 

Sub EachLoop2_ext() 

Dim ws1 As Worksheet 
Dim ws2 As Worksheet 
Dim FinalRow As Integer 
Dim i As Integer 

Set ws1 = Sheet1 
Set ws2 = Sheet3 

ws2.Select 
FinalRow = Cells(Rows.Count, 1).End(xlUp).Row 

For i = 3 To FinalRow 
    If Range(Cells(i, 9), Cells(i, 13)) = "" Then 
     ws2.Select 
     Range(Cells(i, 9), Cells(i, 13)).ClearContents 
     Range(Cells(i, 14), Cells(i, 20)).Cut 
     Range("I200").End(xlUp).Offset(1, 0).PasteSpecial xlPasteValuesAndNumberFormats 

    Else 
     ws2.Select 
     Range(Cells(i, 9), Cells(i, 13)).ClearContents 
     Range(Cells(i, 14), Cells(i, 20)).Cut 
     Range("I200").End(xlUp).Offset(1, 0).PasteSpecial xlPasteValuesAndNumberFormats 

    End If 

Next i 

ws2.Select 

Range("I2").Select 

End Sub 
+0

Hallo Niclas, ich hatte es bereits geschafft, einen anderen Code zu schreiben, der mein gewünschtes Ergebnis bringen würde. Allerdings habe ich immer noch einen Fehler mit der letzten Codierung für EachLoop2_ext(). Fehler 1004. Könntest du bitte einen Blick darauf werfen? – Irvin

+0

Ich habe gerade eine andere Makrocodierung von der EachLoop gemacht, weil ich nicht weiß, wie man Spalten in der Bereichsauswahl überspringt. Beispiel in EachLoop2: Range (Cells (i, 1), Cells (i, 13)) Kopieren Was ich wirklich will ist, dass es nur aus Range kopieren würde (Cell (I, 1)) und dann zu Cell (i, 8) an Cell (i, 13) – Irvin

+0

Kennen Sie die einfachere Codierung dafür? – Irvin