Страницы: 1
RSS
Как разбить значения в таблицы по условию, если в ячейке данные содержат цифры и буквы
 
Здравствуйте.
Возможно я неправильно опишу свою задачу. При наборе данных в ячейку таблицы всегда текст идет цифра после буква (пример 7л2с1б). После чего в другой таблице нужно их разделить по букве в этом значении, то-есть , вторая таблица в шапке содержит уже набранные буквы (Л  С  Б), задача цифры вписать под нужной буквой, пример(под буквой Л цифра 7, под С цифра 2 и под Б цифра 1).
очень большая таблица и в ручную перебирать вторую таблицу много времени занимает. Можно ли это как то автоматизировать.
Спасибо.  
 
Код
=ЕСЛИОШИБКА(ПСТР($A3;НАЙТИ(G$2;ЕСЛИ(G$2="с";ПОДСТАВИТЬ($A3;"кст";"к т");ЕСЛИ(G$2="е";ПОДСТАВИТЬ($A3;"ер";" р");$A3)))-1;1);"")
 
МатросНаЗебре, Спасибо вам. с подставить я не пробовал. Учится еще и учится.
 
Еще вариант.
Код
=IFERROR(-LOOKUP(1;-MID($A3;(FIND(M$2;IF(M$2="е";SUBSTITUTE($A3;"ер";" р");$A3))-{1\2\3});{1\2\3}));"")
 
memo. Спасибо и вам.
 
Примечание.
Пересечение кодировок ("е" и "ер"), приходится заменять кодировку в формуле.

Если кодировки унифицировать, достаточно
=ЕСЛИОШИБКА(--ПСТР($A3;ПОИСК(G$2;$A3)-1;1);)
 
Код
=ЕСЛИОШИБКА(ЕСЛИ(--ПСТР(A3;ПОИСК($G$2;A3)-1;1)>0;ПСТР(A3;ПОИСК($G$2;A3)-1;1);"");"")
 
Цитата
написал: =ЕСЛИОШИБКА(--ПСТР($A3;ПОИСК(G$2;$A3)-1;1)
Я конечно не силен в формулах Excel, но эта формула даже лучше работает. Все дело в том что из этой части таблицы берется полученный результат, после умножается и делится на другие числа, но так же присутствуют и нулевое  (клетка пустая), и  когда клетка пустая там прописывается (отображается) ошибка #знач., а столбец этот суммирует в конце все данные. так эта ошибка #знач. все ломает. в тех формула я добавил в конце "0" что бы в ячейке если нет ничего то 0, в принципе работает как нужно. А для этой и 0 не понадобился.
Спасибо vikttur.
Буду благодарен, подскажите пожалуйста где можно почитать как это работает поподробнее, если есть такое.
Еще раз всем Спасибо.
 
ПОИСК(G$2;$A3) - ищем положение кодировки
ПОИСК()-1 - нам же не нужна кодировка, нужно значение, которое стоит перед кодировкой (сдвигаемся влево на 1 символ)
ПСТР($A3;найденное_положение_символа;1) - извлекаем из значения один символ
--ПСТР() - преобразуем текст (цифру извлекли из текста - она пока считается текстом)
ЕСЛИОШИБКА(ай_не_получилось;0) - на случай, если что-то не так с полученным символом, отображаем ноль.
 
Спасибо vikttur. Хорошо когда дословно разъясняют (если это требуется).  
 
Цитата
Алексей Устиновский написал:
думаю что файл примером не нужен. подойдет любой вариан
Тогда так:
Код
Sub qqq()
Dim i As Long, Stroka As String, Arr, x As Long
    Stroka = "2000-2010"
    Arr = Split(Stroka, "-")
    ReDim arrout(1 To Arr(1) - Arr(0) + 1, 1 To 1)
    For i = Arr(0) To Arr(1)
        x = x + 1
        arrout(x, 1) = i
    Next
    Range("B2").Resize(x, 1).Value = arrout
End Sub
 
Цитата
написал:
Примечание.Пересечение кодировок ("е" и "ер"), приходится заменять кодировку в формуле. Если кодировки унифицировать, достаточно=ЕСЛИОШИБКА(--ПСТР($A3;ПОИСК(G$2;$A3)-1;1)
Здравствуйте. поработав с данной формулой напал на один вариант где формула не распределила значения. Во всех вариантах она работает как надо. но тока не с такими данными - пример ( 10л, 10с, 10кст) таких данных в таблицах мало, но они встречаются.
 
Вы даже процитировали решение:
Цитата
кодировки унифицировать
 
Я извиняюсь, но не совсем понял вашего ответа.
(6л4с) = с такими наборами значений все работает.
но есть и такой = (10л). вот с ними не выходит.
Если в примере (6л4с) должно получится в разных ячейках  (6  4), то в примере (10л) должно получится в одной ячейки (10).
 
Показали бы в файле, а то пока вспомнишь... :)
Да, формула определяет символ (один символ!) перед кодировкой и проверяет, он - цифра или нечто другое.

Решение в лоб, костыль:
=ЕСЛИ(ЕЧИСЛО(--ЛЕВБ(ПСТР(0&$A8;ПОИСК(G$2;0&$A8)-2;2)));
      --ПСТР(0&$A8;ПОИСК(G$2;0&$A8)-2;2);
      ЕСЛИОШИБКА(--ПСТР(0&$A8;ПОИСК(G$2;0&$A8)-1;1);))
 
vikttur. Спасибо, проверял работает.
Страницы: 1
Наверх