2016-08-18 2 views
-2

suchen Ich bin total verwirrt, was in diesem Szenario zu tun ist. Jede Hilfe wäre großartig.Wie in einer Spalte nach bestimmten Wert in Excel

Ich habe drei Spalten und in der ersten Spalte habe ich Name mit doppelten Eintrag und dafür habe ich eine andere Spalte als Rolle und seinen entsprechenden Wert (PRIMARY/SECONDARY). Jetzt versuche ich den Status Wert Ja oder Nein auf der Grundlage von Spalte A und B zu erhalten. Wenn für Name in Spalte A Rolle als PRIMÄR hat, dann sollte der Status Ja sein, andernfalls Nein. Bedeutet, wenn in Spalte A für keine ein Primärwert vorhanden ist von der Aufzeichnung sollte dann der Status NEIN sein. Unten ist das Beispiel für Referenz.

Name   Role  Status 
C7E748588B6D PRIMARY  Yes 
C7E748588B6D SECONDARY Yes 
C7E748588B6D SECONDARY Yes 
C7E748588B6D SECONDARY Yes 
C7E748588B6D SECONDARY Yes 
5E0463D34209 SECONDARY No 
5E0463D34209 SECONDARY No 
5E0463D34209 SECONDARY No 
5E0463D34209 SECONDARY No 
46C14AEC2EB5 PRIMARY  Yes 
46C14AEC2EB5 SECONDARY Yes 
46C14AEC2EB5 SECONDARY Yes 
46C14AEC2EB5 SECONDARY Yes 
46C14AEC2EB5 SECONDARY Yes 
A6C883388E3D PRIMARY  Yes 
A6C883388E3D SECONDARY Yes 
A6C883388E3D SECONDARY Yes 

Danke.

+2

Muss dies VBA sein? Dies könnte mit einer Formel geschehen, vorausgesetzt, Ihre Spalte Status Ja/Nein befindet sich in Spalte C und Zeile 1 ist eine Kopfzeile, so dass Ihre tatsächlichen Daten in Zeile 2 beginnen und dann in Zelle C2 kopiert werden IF (COUNTIFS (A: A, A2, B: B, "PRIMARY")> 0, "Ja", "Nein") ' – tigeravatar

Antwort

0

BEARBEITEN: Änderte meine Antwort den folgenden Kommentaren folgend.

Dies ist wahrscheinlich nicht der einfachste Weg, aber es sollte

Dim l As Long 
Dim name As String 
Dim cnt As Integer 

l = 1 
cnt = 0 

For l = 1 To ActiveSheet.UsedRange.Rows.Count 

    If Cells(l, 2).Value = "PRIMARY" Then 
     name = Cells(l, 1) 
     Do While (Cells(l + cnt, 1) = name) 
      Cells(l + cnt, 3).Value = "YES" 
      cnt = cnt + 1 
     Loop 
     cnt = 0 
    ElseIf Cells(l, 3).Value = "" Then Cells(l, 3).Value = "No" 
    End If 

Next l 
+0

Dadurch werden nur Zeilen mit dem Wort" PRIMARY "gesetzt, um Ja anzuzeigen. OP möchte, dass alle Zeilen mit wiederholtem Namen "Ja" anzeigen, wenn es eine Primary hat, wie in seinem Beispiel angegeben. – tigeravatar

+0

Und 'Cells' verwendet' (rows, columns) '. Es scheint, als ob Sie Ihre Indizes umgekehrt haben – PartyHatPanda

+0

@tigeravatar Wenn alle Zeilen, die Namen wiederholt haben, ja zeigen, wird er nie einen Wert von No – phil652

0

Dies sollte unabhängig davon, was die Daten in ist arbeiten, um arbeiten. Es ist für Ihre 18 Zeilen geschrieben wird Ihnen zur Verfügung gestellt haben. Sie müssen natürlich die Arbeitsblattvariablen und das Steuerelement für die For-Schleife an Ihre spezifische Anwendung anpassen.

Option Explicit 
Sub PrimaryCheck() 

Dim i As Integer 
Dim w1 As Worksheet 
Set w1 = ThisWorkbook.Sheets(1) 
Dim SearchString As Range 
Dim SearchRange As Range 
Dim SearchAddress As String 
Dim FoundRange As Range 

Set SearchRange = w1.Range(w1.Cells(1, 1), w1.Cells(18, 1)) 


For i = 2 To 18 
    If IsEmpty(w1.Cells(i, 3)) Then 
     If w1.Cells(i, 2).Value = "PRIMARY" Then 
      w1.Cells(i, 3) = "YES" 
     ElseIf w1.Cells(i, 2).Value = "SECONDARY" Then 
      Set SearchString = w1.Cells(i, 1) 
      SearchAddress = w1.Cells(i, 1).Address 
      Set FoundRange = SearchRange.Find(SearchString, w1.Cells(i, 1), , , , xlNext, True) 
      Do While Not FoundRange Is Nothing And FoundRange.Address <> SearchAddress 

       If w1.Cells(FoundRange.Row, 2).Value = "PRIMARY" Then 
        w1.Cells(i, 3) = "YES" 
       End If 
       Set FoundRange = SearchRange.FindNext(FoundRange) 
      Loop 
      If IsEmpty(w1.Cells(i, 3)) Then 
       w1.Cells(i, 3).Value = "NO" 
      End If 
     End If 
    End If 
Next i 
End Sub 
Verwandte Themen