Добрый день уважаемые форумчане! Уже второй день бьюсь над решением как мне казалось тривиальной задачи.
Вводные. В ячейке, через запятую с пробелом перечислены свойства/комплектация товара, к примеру: "зеркало с антизапотевателем, зеркало с подсветкой, крепления". Всего свойств товара 14 и каждый товар имеет свой (не уникальный, т.е. товар1 и товар7 могут иметь схожие свойства/комплектацию) набор (комбинаций) свойств которым присвоены id, к примеру: "зеркало с антизапотевателем - #=3", "зеркало с подсветкой - #=1", "крепления - #=8".
Задача. При помощи формулы вместо свойств/комплектации подставить соответствующие им id, чтобы в ячейке вместо "зеркало с антизапотевателем, зеркало с подсветкой, крепления" получить "#=3, #=1, #=8".
Добрый день уважаемые форумчане! Уже второй день бьюсь над решением как мне казалось тривиальной задачи.
Вводные. В ячейке, через запятую с пробелом перечислены свойства/комплектация товара, к примеру: "зеркало с антизапотевателем, зеркало с подсветкой, крепления". Всего свойств товара 14 и каждый товар имеет свой (не уникальный, т.е. товар1 и товар7 могут иметь схожие свойства/комплектацию) набор (комбинаций) свойств которым присвоены id, к примеру: "зеркало с антизапотевателем - #=3", "зеркало с подсветкой - #=1", "крепления - #=8".
Задача. При помощи формулы вместо свойств/комплектации подставить соответствующие им id, чтобы в ячейке вместо "зеркало с антизапотевателем, зеркало с подсветкой, крепления" получить "#=3, #=1, #=8".exelunion
Если допустимо использование пользовательской функции (суть макрос) - добро пожаловать во вложение. Макросы должны быть включены.
Как Вам такой вариант?
Формула прописывается как показано ниже. Первый аргумент - свойства текстом через запятую. Второй аргумент - свойства, которые будем отлавливать и заменять. Третий аргумент - на что будем заменять.
Код
=RioSwap(C2;F$2:F$15;G$2:G$15)
Для знатоков собственно код функции:
[vba]
Код
Function RioSwap$(StrX$, RngA As Range, RngB As Range) Dim ArrX, ArrA, ArrB, i&, j& ArrX = Split(StrX, ", "): ArrA = RngA: ArrB = RngB For i = 0 To UBound(ArrX) For j = 1 To UBound(ArrA, 1) If ArrX(i) = ArrA(j, 1) Then ArrX(i) = ArrB(j, 1) Next j Next i RioSwap = Join(ArrX, ", ") End Function
[/vba] [moder]Роман, макрофункция и ЮДФ - это разные вещи.[/moder] Да, спасибо, опечатался =) В тексте поправил на "пользовательскую функцию".
exelunion, здравствуйте!
Если допустимо использование пользовательской функции (суть макрос) - добро пожаловать во вложение. Макросы должны быть включены.
Как Вам такой вариант?
Формула прописывается как показано ниже. Первый аргумент - свойства текстом через запятую. Второй аргумент - свойства, которые будем отлавливать и заменять. Третий аргумент - на что будем заменять.
Код
=RioSwap(C2;F$2:F$15;G$2:G$15)
Для знатоков собственно код функции:
[vba]
Код
Function RioSwap$(StrX$, RngA As Range, RngB As Range) Dim ArrX, ArrA, ArrB, i&, j& ArrX = Split(StrX, ", "): ArrA = RngA: ArrB = RngB For i = 0 To UBound(ArrX) For j = 1 To UBound(ArrA, 1) If ArrX(i) = ArrA(j, 1) Then ArrX(i) = ArrB(j, 1) Next j Next i RioSwap = Join(ArrX, ", ") End Function
[/vba] [moder]Роман, макрофункция и ЮДФ - это разные вещи.[/moder] Да, спасибо, опечатался =) В тексте поправил на "пользовательскую функцию".Rioran
_Boroda_, Ваше решение работает, спасибо огромное! А то на обработку вариантов цветов через ЕСЛИ (вложенность была больше 120 и вручную забивались вариации цветов с сопоставлением каждой вариации id ) ушло 2 рабочих дня. В общем ужас.
Правда, в силу того, что свойства совпадают (зеркало с подогревом/с подсветкой, зеркало) неправильно подставляются id свойства, решил проблему удалением пробелов, к примеру: было "зеркало с антизапотевателем, зеркало с подсветкой, крепления" стало "зеркалосантизапотевателем, зеркалосподсветкой, крепления". Видимо эксель обрабатывает/воспринимает первые совпадения (слово зеркало).
От всей души Вас благодарю!!!
_Boroda_, Ваше решение работает, спасибо огромное! А то на обработку вариантов цветов через ЕСЛИ (вложенность была больше 120 и вручную забивались вариации цветов с сопоставлением каждой вариации id ) ушло 2 рабочих дня. В общем ужас.
Правда, в силу того, что свойства совпадают (зеркало с подогревом/с подсветкой, зеркало) неправильно подставляются id свойства, решил проблему удалением пробелов, к примеру: было "зеркало с антизапотевателем, зеркало с подсветкой, крепления" стало "зеркалосантизапотевателем, зеркалосподсветкой, крепления". Видимо эксель обрабатывает/воспринимает первые совпадения (слово зеркало).