Страницы: 1
RSS
Вывод части значения получаемого из списка в соседних ячейках, Необходимо вывести часть текстового значения получаемого из списка в соседних ячейках в зависимости от выбранного значения
 
Здравствуйте.
Возможно решение уже было. Но по поиску не нашел.
Задача такая.
Есть список с блюдами (В3:В12). В таблице в столбце "Блюда" выбирается блюдо и списка (например, "Каша + 4хХлеб" или "Борщ + 8хБатон").
В столбцах "Хлебные изделия" (F5:U12) необходимо, чтобы выводилось слово "Хлеб" или "Батон" столько раз, сколько есть в названии блюда. Т.е., если блюдо "Каша + 4хХлеб", то слово "Хлеб" должно выводиться в соседних 4 столбцах, если блюдо "Каша + 6хХлеб", то слово "Хлеб" должно выводиться в соседних 6 столбцах. Либо должно выводиться слово "Батон" по тому же принципу, если блюдо "Борщ + 2хБатон" (2 ячейки со словом "Батон"), или блюдо "Борщ + 4хБатон" (4 ячейки со словом "Батон"), или блюдо "Борщ + 6хБатон" (6 ячеек со словом "Батон"), или блюдо "Борщ + 8хБатон" (8 ячеек со словом "Батон").
Если блюдо отсутствует (выбрано "Отсутствует") или в названии нет слов "Хлеб" или "Батон", то соседние ячейки должны быть пустыми.

В примере ячейки в таблице с данными как должно выглядеть выделены красным цветом.

Какую лучше функцию использовать для решения данной задачи?
Заранее всем спасибо.
 
Юрий Семенов, и не может быть 2хБорщ + 2хБатон ?
Не бойтесь совершенства. Вам его не достичь.
 
Код
=ЕСЛИ(ЕЧИСЛО(ЗНАЧЕН(ПСТР($E5;8;1)));ЕСЛИ(СТОЛБЕЦ()-СТОЛБЕЦ($E:$E)<=2*ЗНАЧЕН(ПСТР($E5;8;1));ПСТР($E5;10;ДЛСТР($E5));"");"")
 
Юрий Семенов, еще вариант, но с внесением изменений в исходные данные
заменена часть 2хХлеб - х (русская ХА) заменена на x (ИКС), а так же убраны объеденные ячейки.
Код
=ЕСЛИ(СЧЁТЕСЛИ($E5:E5;ПРАВСИМВ(E5;ДЛСТР($E5)-ПОИСК("x";$E5;1)))<--ЕСЛИ(ЕЧИСЛО(ПОИСК("+";$E5;1));ПСТР($E5;ПОИСК("+";$E5;1)+2;ПОИСК("x";$E5;1)-(ПОИСК("+";$E5;1)+2)));ПРАВСИМВ(E5;ДЛСТР($E5)-ПОИСК("x";$E5;1));"")
Не бойтесь совершенства. Вам его не достичь.
 
Цитата
Mershik написал:
Юрий Семенов , еще вариант, но с внесением изменений в исходные данные заменена часть 2хХлеб - х (русская ХА) заменена на x (ИКС), а так же убраны объеденные ячейки.
Спасибо, работает. Но ячейки специально разделены.
 
Вариант под Ваш пример:
Код
=ЕСЛИОШИБКА(ЕСЛИ(F$4<=--ПСТР($E5;8;1);ПОДСТАВИТЬ(ПРАВСИМВ($E5;5);"х";"");"");"")
Если в мире всё бессмысленно, — сказала Алиса, — что мешает выдумать какой-нибудь смысл? ©Льюис Кэрролл
 
Юрий Семенов, ну берите другие решения, но знайте объеденные ячейки всегда доставляют неудобства
Не бойтесь совершенства. Вам его не достичь.
 
Цитата
Юрий Семенов написал:
Но ячейки специально разделены.
Можно поинтересоваться для чего?
Если в мире всё бессмысленно, — сказала Алиса, — что мешает выдумать какой-нибудь смысл? ©Льюис Кэрролл
 
Юрий Семенов,
А почему в В11 4Батона, а в Е11 2Батона?
 
Цитата
Kuzmich написал:
Юрий Семенов , А почему в В11 4Батона, а в Е11 2Батона?
Значение в Е5:Е13 выбирается из списка В4:В13.
 
Цитата
МатросНаЗебре написал:
Код ? 1=ЕСЛИ(ЕЧИСЛО(ЗНАЧЕН(ПСТР($E5;8;1)));ЕСЛИ(СТОЛБЕЦ()-СТОЛБЕЦ($E:$E)<=2*ЗНАЧЕН(ПСТР($E5;8;1));ПСТР($E5;10;ДЛСТР($E5));"");"")
Спасибо, все работает.
А если слова в названии блюда по длине не одинаковые? Например, "Каша" и "Винегрет". И каше соответствует хлеб, а винегрету Батон. Ну или блюд 3 или даже 4.
Тогда, наверное, нужно в названии блюда найти цифру и вывести в столбцах значение после цифры и символа "х".
 
Код
Sub XlebBaton()
Dim i As Long
Dim iLastRow As Long
 iLastRow = Cells(Rows.Count, "B").End(xlUp).Row
 Range("F5:U" & iLastRow).ClearContents
  For i = 5 To iLastRow
    If InStr(1, Cells(i, "E"), "Хлеб") > 0 Then
      Cells(i, "F").Resize(, 2 * Left(Split(Cells(i, "E"), "+ ")(1), 1)) = "Хлеб"
    End If
    If InStr(1, Cells(i, "E"), "Батон") > 0 Then
      Cells(i, "F").Resize(, 2 * Left(Split(Cells(i, "E"), "+ ")(1), 1)) = "Батон"
    End If
  Next
End Sub
Изменено: Kuzmich - 28.10.2020 13:19:45
Страницы: 1
Наверх