2017-10-06 2 views
0

Ich habe derzeit einen Excel-Datensatz, der Produkte zu verschiedenen Zeiten verkauft und wie der Verkäufer die Produktklasse des Artikels verkauft.Anzeigen von Zellen mit mehreren entsprechenden Werten

Product# Product Class 

10001  Hardware 
20002  Software 
30003  Misc. 
10001  Hardware 
10001  Software 
20002  Software 
10001  Hardware 
30003  Misc. 

Sie werden bemerken, dass für Produkt # 10001, ein Verkäufer irrtümlich bezeichnet eine der Vertrieb (die als „Hardware“ eingestuft werden sollte) „Software“.

Also, wenn ich nach Produkt # 10001 filtern, werde ich 2 verschiedene Produktklassen bekommen. Ich versuche herauszufinden, welches Produkt # mehr als 1 Produktklassen für ungefähr 30.000 verschiedene Produkte hat, damit sie repariert werden können.

Wie kann ich durch die Daten gehen, um anzugeben, welche Produktnummern repariert werden müssen, um nur eine Produktklasse zu haben?

Ich erwarte nur eine Handvoll Fälle, in denen dieses mehrfache Klassenbenennung Problem existiert, sobald ich herausfinden kann, welches Produkt # das Problem hat, kann es manuell behoben werden.

Danke!

Antwort

1

Sie können diese Formel =IF(COUNTIF($A$3:$A$1000,A3)-COUNTIFS($A$3:$A$1000,A3,$B$3:$B$1000,B3)>0,"Wrong","OK") in Zelle C3 verwenden. Passen Sie den Bereich an Ihre Bedürfnisse an und ziehen Sie die Formel nach unten.

enter image description here

0

können Sie diese Matrixformel verwenden (klicken Ctrl + Umschalttaste + zusammen Enter), um herauszufinden, welche genommen werden muss, der Betreuung von:

=IF(IFERROR(VLOOKUP(A2,$A$1:A1,1,0),0)>0,IF(ISTEXT(VLOOKUP(A2&B2,$A$1:A1&$B$1:B1,1,0)),"","Dup"),"") 

Formel von cell C2 und nach unten ziehen .

Dann tun nur einen Filter mit dem Wortlaut Dup. Dies sollte für Sie arbeiten.

+0

Hey Danke für die Antwort! Ich versuche jedoch nicht, Duplikate zu finden, sondern nur die Fälle, in denen eine Produktnummer mehr als eine Produktklassenbezeichnung hat, und ignoriere dann alle anderen Fälle. In Ihrem Beispiel hat Produkt 30003 "2" Duplikate, aber es hat nur 1 Produktklasse, also sollte es ignoriert werden – djkim0403

+0

Ich habe gerade meine Antwort überarbeitet und hoffentlich ist das, was Sie suchen. – ian0411

1

können Sie ein Objekt als dictionary bekannt verwenden. Ein Wörterbuch hat einen Schlüssel und einen entsprechenden Wert. Die Art und Weise, wie der Schlüssel gespeichert wird, ist implementiert, so dass schnell herausgefunden werden kann, ob ein bestimmter Schlüssel im Wörterbuch vorhanden ist, was beim Suchen nach doppelten Produktcodes hilfreich sein kann.

Aus Gründen der Einfachheit (und weil ich wenig Erfahrung mit VBA in Excel haben), habe ich die Daten angenommen ist Check-in Spalten 1 und 2 des Blattes (1):

Option Explicit 

' Add reference to get Dictionary: http://www.techbookreport.com/tutorials/vba_dictionary.html 
' Excel VBA- Finding the last column with data: https://stackoverflow.com/a/11927387 

Sub FindDuplicates() 
    Dim dict As Dictionary 
    Set dict = New Dictionary 

    Dim ws As Worksheet 
    Set ws = Sheets(1) 

    Dim rLastCell As Range 
    Set rLastCell = ws.Cells.Find(What:="*", After:=ws.Cells(1, 1), LookIn:=xlFormulas, LookAt:= _ 
            xlPart, SearchOrder:=xlByRows, SearchDirection:=xlPrevious, MatchCase:=False) 

    Dim key As String 
    Dim val As String 
    Dim dupes As String 
    Dim i As Long 
    ' use maxFinds to limit the number of duplicates found 
    Dim maxFinds As Integer 
    maxFinds = 32 
    Dim nFound As Integer 
    nFound = 0 

    For i = 1 To rLastCell.Row 
     key = Cells(i, 1).Value 
     val = Cells(i, 2).Value 
     If dict.Exists(key) Then 
      If dict(key) <> val Then 
       dupes = dupes & "Row: " & i & " Class: " & val & vbCrLf 
       nFound = nFound + 1 
      End If 
     Else 
      dict.Add key, val 
     End If 
     If nFound = maxFinds Then 
      Exit For 
     End If 
    Next 

    If nFound = 0 Then 
     MsgBox ("No duplicates found.") 
    Else 
     MsgBox (dupes) 
    End If 

End Sub 

Das Wörterbuch Objekt isn‘ Da es in Excel integriert ist, müssen Sie über das Menü "Extras" -> "Referenzen ..." einen Verweis auf Microsoft Scripting Runtime hinzufügen.

Ich hatte eine Testdatei mit 50.000 Zeilen und ziemlich viele Duplikate erstellt, weshalb der Code mit einer Möglichkeit endete, die Anzahl der gefundenen Duplikate zu begrenzen, also könnten Sie maxFinds = 10 setzen und diese durchlaufen, dann die wieder Makro, um weitere zehn zu finden, und so weiter. Außerdem, wenn es viel mehr als 32-ish gibt, passen sie nicht in die Nachrichtenbox.

Es wird davon ausgegangen, dass das erste Auftreten einer "Produktklasse" (oder der Wert in Spalte 2 im obigen Codebeispiel) der richtige ist.

Beispiel Ausgabe:

enter image description here

Verwandte Themen