#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 и т.д.