2016-05-23 12 views
-1

Ich suche das folgende Verwendung von Excel zu tun:Wie bedingt Zeilen in Excel basierend auf Zellenwert in eine Tabelle hinzufügen

Im Folgenden finden Sie eine Tabelle von booleans und eindeutigen Kennungen.

Das möchte ich erreichen. Wenn in der ersten Spalte "Nein" steht, möchte ich, dass der Code automatisch eine ganz neue Zeile in einer separaten Tabelle mit dem eindeutigen Bezeichner in der ersten Spalte der neuen Zeile hinzufügt (siehe Tabelle 1).

Spreadsheet 1

In diesem Fall würde C4 und C5, die beiden Reihen unter (Kalkulationstabelle 2) beispielhaft genannt wurden.

Result

-Code aktualisiert:

Sub AddID() 
    Dim c As Range 
    Dim j As Integer 
    Dim Source As Worksheet 
    Dim Target As Worksheet 

    Set Source = ActiveWorkbook.Worksheets("Questionnaire") 
    Set Target = ActiveWorkbook.Worksheets("AI Tracker") 

    j = 1 
    For Each c In Source.Range("C4:C54") 
     If c = "No" Then 
      Target.Cells(j + 4, "A").Value = c.Offset(, 1).Value 
      j = j + 1 
     End If 
    Next c 
End Sub 

Dies aktualisiert das Ziel Arbeitsblatt richtig, aber ich brauche es Update zu tun, wenn die Quelle-Arbeitsblatt geändert wird (dh, wenn etwas No geändert wird, sollte die Funktion füge die neue Zeile zum Zielblatt hinzu).

Ich habe den folgenden Code zu erkennen, Änderungen vorgenommen, aber es funktioniert nicht:

Sub Worksheet_Change(ByVal Target As Range) 
    If Not Intersect(Target, ActiveWorkbook.Worksheets("Questionnaire").Range("C4:C54")) _ 
     Is Nothing Then 
     Call Module2.AddID 
     MsgBox "Cell has changed" 
    End If 
End Sub 
+0

Was haben Sie versucht? posten Sie bitte Ihren Code – litelite

+0

Ich habe ein Code-Snippet hinzugefügt @litelite –

Antwort

1

statt

Source.Rows(c.Row).Copy Target.Rows(j) 

Verwendung

Target.Cells(j,"A").Value = c.Offset(,1).value '<~~ change "A" column index to whatever you need to be copied Unique identifier into 

bearbeitet

nach Ihren weiteren Bedürfnissen und die Lösung, die Sie vor 1 Stunde gebucht, sollten Sie die folgenden Optimierungs

Option Explicit 

Private Sub Worksheet_Change(ByVal Target As Range) 

    If Intersect(Target, ActiveWorkbook.Worksheets("Questionnaire").Range("C4:C54")) Is Nothing Then Exit Sub '<~~ use just one row and avoid the "Else-End If" block. it increases readability 

    Dim dest As Worksheet '<~~ Dim only if needed, i.e. if you didn't exit the sub 
    Set dest = ActiveWorkbook.Worksheets("AI Tracker") '<~~ Set only if needed,i.e. if you didn't exit the sub 
    If Target.Value = "No" Then dest.Range("A" & dest.Rows.Count).End(xlUp).Offset(1).Value = Target.Offset(, 1).Value '<~~ Target has already all you need and it's already a range 

End Sub 

noch bleibt es mit einigen Bedingungen zu beschäftigen. zum Beispiel: Was passiert, wenn eine Mehrfachzelle Range ist?

+0

Ich habe die Änderungen vorgenommen, aber der Code erkennt Änderungen nicht automatisch und fügt sie daher dem Zielarbeitsblatt hinzu. Es wird nur aktualisiert, wenn ich den Code ausführe. Es funktioniert, muss aber während Änderungen aktiv sein. –

+1

Wenn meine Antwort Ihre _ ** ursprüngliche ** _ Frage erfüllt, dann markieren Sie sie als akzeptiert. Danke. – user3598756

+0

Wenn ich nach "Nein" suchen möchte, dann kopiere nicht nur eine Zelle, sondern die angrenzende Zelle in das Zielarbeitsblatt. Wie würde ich diesen Code bearbeiten? –

0

Dinge waren stark vereinfachen, und ich habe mit folgenden Lösung gekommen:

Private Sub Worksheet_Change(ByVal Target As Range) 
    Dim n 
    Dim a 

    Set dest = ActiveWorkbook.Worksheets("AI Tracker") 

    If Intersect(Target, ActiveWorkbook.Worksheets("Questionnaire").Range("C4:C54")) Is Nothing Then 
     Exit Sub 
    Else 

     a = Target.Address 
     n = Range(a).Offset(, 1).Value 

      If Target.Value = "No" Then 
       dest.Range("A" & Rows.Count).End(xlUp).Offset(1).Value = n 
      End If 
    End If 
End Sub 

Dies erkennt eine „Nein“ und dann finden die nächste leere Zeile im Ziel Arbeitsblatt und fügen Sie die Unique Identifier (assoziiertes mit dem "Nein") zur ersten Zelle in dieser Reihe.

+0

sehe meine bearbeitete Antwort für deine _ ** aktuellen ** _ Bedürfnisse. und bedenke meinen Kommentar für deine _ ** ursprünglichen ** _ Einsen. – user3598756

Verwandte Themen