Suche nach Excel-Listen, wobei mehrere Werte getrennt durch ein "|" zurückgegeben werden

612
Peter Kirkwood

OK...

Ich habe also eine Liste von Produkten mit dem Produktnamen wie folgt: "CC973" in Spalte A. dh:

A CC969 CC972 CC973 CC975 CC976 CC977 CC978 CC996 CC997 CC998 CC999 DS009 DS022 DS046 DS088 DS096 

Ich habe auch eine Liste von Produktbildern wie dieser in Spalte A eines anderen Blattes "Bildnamen"! $ A $ 2: $ A $ 617 "(alle Daten befinden sich in dieser einen Spalte):

A CC967 CC968 CC969 (Packaging).jpg CC967 CC968 CC969.jpg CC972 CC973 (Packaging).jpg CC972 CC973 (Rear).jpg CC972 CC973.jpg CC975 CC976.jpg CC977 CC978 CC979 (Packaging).jpg CC977 CC978 CC979.jpg CC980 CC981 CC982 (Packaging).jpg CC980 CC981 CC982 (Rear).jpg CC980 CC981 CC982 (Side).jpg 

Was ich tun möchte, ist nach dem Produkt in der ersten Liste zu suchen und alle Bilder zurückzugeben, die diesen Produktnamen enthalten, getrennt durch ein "|".

Ich möchte, dass der Dateiname ohne zusätzlichen Text, dh in dem Fall "CC972 CC973.jpg", zuerst zurückgegeben wird.
In diesem Beispiel möchte ich Folgendes zurücksenden:

CC972 CC973.jpg|CC972 CC973 (Packaging).jpg|CC972 CC973 (Rear).jpg 

Ich bin mir sicher, dass dies möglich sein muss. Kann mir jemand einen Weg empfehlen?

EDIT Ich habe das ausprobiert:

=Lookup_concat(A2,'Image names'!$A$1:$A$617, 'Image names'!$A$1:$A$617) 

Aber es gibt #name zurück?

Ich denke, um dies zu erreichen, müsste ich VBA mit dem folgenden Code verwenden:

Function Lookup_concat(Search_string As String, _ Search_in_col As Range, Return_val_col As Range) Dim i As Long Dim result As String For i = 1 To Search_in_col.Count If Search_in_col.Cells(i, 1) = Search_string Then result = result & " " & Return_val_col.Cells(i, 1).Value End If Next Lookup_concat = Trim(result) End Function 

Ich glaube jedoch nicht, dass Excel 2008 einen VBA-Editor hat!

Ich habe seit 2003 nicht mehr richtig Tabellen erstellt !!!!

1
Möchten Sie VBA oder eine Formel? Raystafarian vor 9 Jahren 0
Willkommen bei Super User. Leider sind wir kein Code-Writing-Service. Anstatt einfach nach Code für eine bestimmte Aufgabe zu fragen, zeigen Sie uns, was Sie bisher versucht haben (einschließlich des Codes, den Sie derzeit verwenden) und wo Sie stecken bleiben, damit wir Ihnen bei Ihrem spezifischen Problem helfen können. Fragen, die nur nach Code fragen, sind zu umfangreich und wahrscheinlich [gehalten oder geschlossen] (http://stackoverflow.com/help/closed-questions). DavidPostill vor 9 Jahren 2
@Raystafarian Ich suche nach einer Formel Peter Kirkwood vor 9 Jahren 0
@DavidPostill Danke, Sie haben wahrscheinlich gesehen, dass es mein erstes Mal hier ist! Ich habe eine Bearbeitung von dem, was ich versucht habe, hinzugefügt (kann aber Ihre Arbeit nicht bekommen! Danke für den Rat!) Peter Kirkwood vor 9 Jahren 0
@ PeterKirkwood, Dies ist jetzt ein guter Beitrag. +1 und ich werde einen Code für Sie schreiben. Ich muss jedoch ein bisschen mehr wissen, zB wo soll das Ergebnis sein? Spalte B von Arbeitsblatt 2? Dave vor 9 Jahren 0
@Dave Großartig! Danke Dave! Spalte C des Arbeitsblatts 3 ("LMFD-Produkte") Peter Kirkwood vor 9 Jahren 0
Excel 2008 ist eine Mac-Version und hat keine VBA. Tags werden entsprechend aktualisiert Julian Knight vor 9 Jahren 0
Sorry Peter, ich konnte nur helfen, wenn ich VBa benutzen könnte Dave vor 9 Jahren 0
Ich habe es geschafft, einen PC mit Excel 2013 auszuleihen. VBa ist nun auch eine Option. Vielen Dank. Peter Kirkwood vor 9 Jahren 0
@ PeterKirkwood, sorry, war gestern nicht dabei. Erledigt Dave vor 9 Jahren 0

1 Antwort auf die Frage

1
Dave

In Ihren Kommentaren haben Sie erwähnt, dass Sie jetzt Zugriff auf eine Version von Excel haben, auf der VBa ausgeführt werden kann.

Dies ist VBa und macht, was ich denke, du willst. Ich habe Screenshots hinzugefügt.

Ich habe einige Kommentare im Code hinterlassen, der erste Abschnitt muss möglicherweise aktualisiert werden, aber die Kommentare sollten Ihnen helfen.

Denken Sie daran, machen Sie zuerst eine Sicherungskopie Ihrer Datei, da es keine Funktion zum Rückgängigmachen gibt!

Basierend auf Ihren Kommentaren verwende ich die tatsächlichen Arbeitsblattnamen!

Option Explicit Sub WalkThePlank()  'hear ye, only edit this top past of walk the plank 'Remember scurvy sea dog, there is no UNDO so take a copy of the file first as a back up  Dim worksheet1 As String worksheet1 = "Image names" 'The name of the work sheet which has only codes  Dim worksheet1Column As String worksheet1Column = "A" 'Argghh, the name of the column you use in worksheet1  Dim worksheet2 As String worksheet2 = "LMFD products" 'The name of the worksheet with things like CC972 CC973 (Rear).jpg  Dim worksheet2Column As String worksheet2Column = "A" 'Argghh, the name of the column you use in worksheet2  Dim resultsWorksheet As String resultsWorksheet = "LMFD products" 'C'pan, this is where you put the results  Dim resultsWorksheetColumn As String resultsWorksheetColumn = "C" 'Argghh, the name of the column you use in worksheet2    'hear ye, walk below and I'll feed ye to the sharks  Application.ScreenUpdating = False Dim row As Integer row = 2 'The starting row with values to be looked up  Do While (Worksheets(worksheet1).Range(worksheet1Column & row).Value <> "") Dim result As String result = "" Dim lookupValue As String lookupValue = Worksheets(worksheet1).Range(worksheet1Column & row).Value  Dim otherRow As Integer otherRow = 2 'The starting row of the .jpg colum  Dim startString As String Dim endString As String startString = "" endString = "" Do While (Worksheets(worksheet2).Range(worksheet2Column & otherRow).Value <> "")  Dim repoValue As String repoValue = Worksheets(worksheet2).Range(worksheet2Column & otherRow).Value  If (InStr(repoValue, lookupValue)) Then 'we got treasure cap'ain If (InStr(repoValue, "(")) Then endString = Trim(endString) & Trim(repoValue) & "|" Else startString = Trim(startString) & Trim(repoValue) & "|" End If End If  otherRow = otherRow + 1 Loop  'check on the treasure, will we fine riches If (startString <> "" And endString <> "") Then result = Trim(startString & Left(endString, Len(endString) - 1)) Else If (startString = "" And endString <> "") Then result = Trim(Left(endString, Len(endString) - 1)) End If If (endString = "" And startString <> "") Then result = Trim(Left(startString, Len(startString) - 1)) End If End If  Worksheets(resultsWorksheet).Range(resultsWorksheetColumn & row).Value = result ' X Marks the spot row = row + 1 Loop  End Sub 

Mein Arbeitsblatt1 (bevor die VBa ausgeführt wird)

enter image description here

Und mein Arbeitsblatt2

enter image description here

Und das Ergebnis ist

enter image description here

Wie füge ich VBA in MS Office hinzu?

Kommentare sind nicht für eine erweiterte Diskussion vorgesehen. Diese Konversation wurde in den Chat verschoben (http://chat.stackexchange.com/rooms/25156/discussion-on-answer-by-dave-excel-list-lookup-returning-multiple-values-separa). Mokubai vor 9 Jahren 0