Excel — как выполнить поиск элементов ВПР в списке с разделителями в одной ячейке

#excel #excel-formula #vba

#excel #excel-формула #vba

Вопрос:

У меня есть документ Excel, который состоит из разных листов. На одном листе у меня есть столбец:

 | text column        |
|#test2,#test3,#test1|
|#test2, #test1      |
|#test1              |
  

На другом листе у меня есть сопоставление значений:

 |some column| value  |
|#test2     | Value2 |
|#test1     | Value1 |
|#test3     | Value3 |
  

Итак, мне нужно получить результат:

 | text column           |
| Value2, Value3, Value1|
| Value2, Value1        |
| Value1                |
  

Возможно ли это получить с помощью функций рабочего листа Excel?

Я пытался разделить данные, но у меня может быть неопределенное количество значений в конкретной ячейке. Также пытался использовать VLOOKUP , но я понятия не имею, как это использовать, потому что мне нужно разделить значения перед VLOOKUP .

Вы можете мне помочь? Спасибо.

Ответ №1:

Поскольку вам нужна некоторая форма итерации, то есть разделение значения, выполнение операции над каждым элементом и воссоединение элементов — маловероятно, что есть способ сделать это с помощью функций Excel. Если вы с удовольствием используете VBA, то определяемая пользователем функция довольно проста:

 Option Explicit

Public Function RemapValues(rngSource As Range, rngLookup As Range, strDelimiter As String) As String

    Dim arrIn() As String
    Dim lngCounter As Long
    Dim arrOut() As String

    ' split input string by supplied delimiter
    arrIn = Split(rngSource.Value, strDelimiter, -1)

    ' set capacity of array storing re-mapped values
    ReDim arrOut(LBound(arrIn) To UBound(arrIn))

    ' loop over input array
    For lngCounter = LBound(arrIn) To UBound(arrIn)
        ' do the vlookup operation
        arrOut(lngCounter) = WorksheetFunction.VLookup(arrIn(lngCounter), rngLookup, 2, 0)
    Next lngCounter

    ' return the re-mapped values
    RemapValues = Join(arrOut, strDelimiter)

End Function
  

Например.

введите описание изображения здесь

Комментарии:

1. Большое тебе спасибо, @Robin Mackenzie! Постараюсь.

Ответ №2:

Я думаю, вы обнаружите, что функция SUBSTITUTE достигнет того, что вы ищете:

ЗАМЕНИТЕ(текст, old_text, new_text, [instance_num])

Синтаксис функции замены имеет следующие аргументы:

Требуется текст. Текст или ссылка на ячейку, содержащую текст, для которого вы хотите заменить символы.

Требуется Old_text. Текст, который вы хотите заменить.

Требуется New_text. Текст, которым вы хотите заменить old_text.

Количество экземпляров необязательно. Указывает, какое вхождение old_text вы хотите заменить на new_text. Если вы укажете instance_num, заменяется только этот экземпляр old_text. В противном случае каждое вхождение old_text в text изменяется на new_text.

Вы могли бы вложить каждую ЗАМЕНУ, но я думаю, что в конечном итоге это было бы довольно сложно читать и поддерживать.

Согласно прилагаемому изображению, мой предлагаемый подход к реализации заключался бы в постепенном выполнении замены. Итак, начиная с исходного текста в столбце A, замените #test1 на value1 в столбце B, а затем замените #test2 в тексте, который теперь находится в столбце B, формулой в столбце C и т.д.

замените пример