Поиск в списке Excel, возвращающий несколько значений, разделенных «|»

472
Peter Kirkwood

ХОРОШО...

Итак, у меня есть список продуктов, с названием продукта, например: «CC973» в столбце A. т.е.

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

У меня также есть список изображений продуктов, подобных этому, в столбце А другого листа «Имена изображений! $ A $ 2: $ A $ 617» (все данные в этом столбце) .:

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 

То, что я хотел бы сделать, это проверить продукт в первом списке и вернуть все изображения, которые содержат это имя продукта, разделенные "|".

Я хотел бы, чтобы имя файла без дополнительного текста, т. Е. В случае только "CC972 CC973.jpg", было возвращено первым.
Так что в этом примере я хотел бы, чтобы было возвращено следующее:

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

Я уверен, что это должно быть возможно, кто-нибудь может посоветовать способ сделать это?

РЕДАКТИРОВАТЬ Я пытался это:

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

Но это возвращает #name?

Я думаю, чтобы сделать эту работу, я должен был бы использовать VBA со следующим кодом:

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 

Однако я не думаю, что Excel 2008 имеет редактор VBA!

Я не делал электронные таблицы должным образом с 2003 года !!!!

1
Вы хотите VBA или формулу? Raystafarian 8 лет назад 0
Добро пожаловать в Супер пользователя. К сожалению, мы не сервис для написания кода. Вместо того, чтобы просто запрашивать код для выполнения конкретной задачи, пожалуйста, покажите нам, что вы уже пробовали (включая любой код, который у вас есть) и где вы застряли, чтобы мы могли помочь вам с вашей конкретной проблемой. Вопросы, которые задают только код, слишком широки и, вероятно, будут [отложены или закрыты] (http://stackoverflow.com/help/closed-questions). DavidPostill 8 лет назад 2
@Raystafarian Я ищу формулу Peter Kirkwood 8 лет назад 0
@DavidPostill спасибо, вы, наверное, видели, что я здесь впервые! Я внес изменения в то, что я пробовал (но не могу заставить тебя работать! Спасибо за совет! Peter Kirkwood 8 лет назад 0
@PeterKirkwood, теперь это хороший пост. +1, и я напишу код для вас. Тем не менее, мне нужно знать немного больше о том, где вы хотите получить результат? Колонка B рабочего листа 2? Dave 8 лет назад 0
@ Дэйв Отлично! Спасибо, Дейв! Столбец C Рабочего листа 3 (называется «Продукция LMFD») Peter Kirkwood 8 лет назад 0
Excel 2008 является версией для Mac и не имеет VBA, соответственно обновляя теги Julian Knight 8 лет назад 0
Извините, Питер, я мог бы помочь, только если бы я мог использовать VBa Dave 8 лет назад 0
@ Дэйв Мне удалось одолжить компьютер под управлением Excel 2013, так что VBa теперь тоже вариант. Благодарю. Peter Kirkwood 8 лет назад 0
@PeterKirkwood, извините, не был вчера. Готово Dave 8 лет назад 0

1 ответ на вопрос

1
Dave

In your comments, you mentioned you now have access to a version of Excel which can run VBa.

This is VBa, and does what I think you want. I have included screen shots.

I have left some comments in the code, the first section you may need to update but the comments should help you out.

Remember, take a back up of your file first as there is no undo feature!

Based upon your comments, I'm using the actual worksheet names!

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 

My Worksheet1 (before the VBa is run)

enter image description here

And my Worksheet2

enter image description here

And the result is

enter image description here

How do I add VBA in MS Office?

Комментарии не для расширенного обсуждения; этот разговор был [перемещен в чат] (http://chat.stackexchange.com/rooms/25156/discussion-on-answer-by-dave-excel-list-lookup-returning-multiple-values-separa). Mokubai 8 лет назад 0

Похожие вопросы