Страницы: 1
RSS
необходимо найти строку по искомому значению и взять из найденной строки текст
 
Помогите, пожалуйста, решить задачу.

Задача: в первом столбце есть набор строк. Количество строк случайное (может быть 12, может быть 40). Каждая строка начинается с определенного кода (3 цифры).
Нужно найти строку, которая начинается на "500" и взять из нее текст Пушкин Александр (вставить во второй столбец).

Заранее спасибо.

Пушкин Александр
505fdgbdfhbe
123dgrebrebrebe
500$aПушкин $bАлександр
432gdfnhtrjntr
433bfdbnbre
501vbdfbetnretnr
 
Для одной ячейки из примера можно формулой массива
Код
=ПОДСТАВИТЬ(ПОДСТАВИТЬ(ИНДЕКС($A$1:$A$20;ПОИСКПОЗ(1=1;(--ЛЕВСИМВ($A$1:$A$20;3)=500);));"500$a";"");"$b";"")
но неизвестно как выглядят другие данные, если будет три слова, например Александр Сергеевич Пушкин? Какие знаки будут стоять перед словами?
Изменено: gling - 26.07.2017 22:27:37
 
формула выдает ошибку - несоответствие скобок, если подставить скобку в самом конце, пишет - слишком мало аргументов.
Что означает зеленый квадрат с вопросом? Что-то не корректно отобразилось?

Все данные перечисляются через $a $b $c $d и т.д. переменных может быть от 1 до 8, т.е ФИО (1,2,3), 4-писатель, 5-годы жизни, 6-титулы, звания, награды, ученые степени или др.
Подскажите для начинающего в экселе: что означает -- перед ЛЕВСИМВ или где можно прочитать?
 
Цитата
se_arts написал:
Нужно найти строку, которая начинается на "500" и взять из нее текст Пушкин Александр
Вот это не понятно. А если там нет Пушкина?
Если в мире всё бессмысленно, — сказала Алиса, — что мешает выдумать какой-нибудь смысл? ©Льюис Кэрролл
 
Не понятно как так получилось, но формулу скопировал не корректно. В сообщении #2 формулу заменил, почему квадратик с вопросом, не знаю. А чтобы избавиться от символов перед текстом, можно пока использовать 8 раз ПОДСТАВИТЬ. Может кто более удобную формулу подскажет или макрос напишет.
 
=ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПРОСМОТР(2;1/(ЛЕВБ(A4:A9;3)="500");A4:A9);"500$a";);"$b";)
 
gling,формулу дает нормально вставить, но вместо результата показывает #ЗНАЧ!
vikttur, формула работает, все корректно отображает
если отчество добавить
500$aПушкин   $bАлександр $cСергеевич
тогда формула  
Код
=ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПРОСМОТР(2;1/(ЛЕВБ(A4:A9;3)="500");A4:A9);"500$a";);"$b";);"$c";) 
всем спасибо за помощь.
 
Цитата
se_arts написал:
показывает #ЗНАЧ!
Цитата
gling написал:
можно формулой массива
 
6060#$3BY-NLB-ar3725   $aБЕЛОРУССКИЙ ЯЗЫК $2DVNLB
6060#$3BY-NLB-ar28089 $aРЕМЁСЛА $2DVNLB
607##$3BY-NLB-ar42135 $aБеларусь
700#1$3BY-SEK-414771 $aКніга $bУ. Д.   $gУладзімір Дзмітрыевіч $cкандыдат філалагічных навук
801#0$aBY $bBY-HM0000 $c19971031 $gpsbo
899##$aBY-HM0000 $p26Ад698
Столкнулся с проблемой. после значения "700" располагаются знаки и символы, а $a $b $c идут не по порядку. Мне необходимо получить только ФИО ($a и $g), остальное не включать в выборку.

Формула
Код
=ПСТР(A46;ПОИСК("$a";A46)+2;ПОИСК("$b";A46)-2-ПОИСК("$a";A46))&ПСТР(A46;ПОИСК("$g";A46)+2;ПОИСК("$c";A46)-2-ПОИСК("$g";A46))
находит: Кніга Уладзімір Дзмітрыевіч, но здесь все привязано к конкретной строке (строка 46).
Формула
Код
=ПРОСМОТР(2;1/(ЛЕВБ($A$3:$A$174;3)="700");$A$3:$A$174)
находит 700 строку (в которой) нужно сделать выборку.

Как объединить эти две формулы?
Или есть более простой способ найти 700 строку и достать ФИО (в данном случае  Кніга Уладзімір Дзмітрыевіч)
 
Файлы для примеров закончились?
 
vikttur, очень надеюсь, что других вариантов не найду.
 
? Вы о чем? Вам не нужны другие варианты? Зачем тогда вопрос?

К вопросу следует прикладывать файл-пример.
 
Извините, не понял Ваш вопрос.

Файл прикрепил
 
Поиск значения:
=ВПР("700*";$A$3:$A$8;1;0)
совмещенная формула:
=ПСТР(ВПР("700*";$A$3:$A$8;1;0);ПОИСК("$a";ВПР("700*";$A$3:$A$8;1;0))+2;ПОИСК("$b";ВПР("700*";$A$3:$A$8;1;0))-2-ПОИСК("$a";ВПР("700*";$A$3:$A$8;1;0)))&ПСТР(ВПР("700*";$A$3:$A$8;1;0);ПОИСК("$g";ВПР("700*";$A$3:$A$8;1;0))+2;ПОИСК("$c";ВПР("700*";$A$3:$A$8;1;0))-2-ПОИСК("$g";ВПР("700*";$A$3:$A$8;1;0)))
 
Михаил С.,огромное спасибо, все работает
 
se_arts, На другом форуме почти такая же формула.
=ПСТР(ЛЕВБ(ВПР("700#*";A$2:A$174;1;);ПОИСК("?$b";ВПР("700#*";A$2:A$174;1;)));ПОИСК("$a";ВПР("700#*";A$2:A$174;1;))+2;99)&ПСТР(ЛЕВБ(ВПР("700#*";A$2:A$174;1;);ПОИСК("??$c";ВПР("700#*";A$2:A$174;1;)));ПОИСК("$g";ВПР("700#*";A$2:A$174;1;))+2;99)
Изменено: АlехМ - 30.07.2017 20:00:41
Алексей М.
 
АlехМ,спасибо за Ваш вариант, формула работает.
 
Добрый день.
Мне необходимо заменить "/" на "_" или "//" на "_"
С одной заменой: =ПОДСТАВИТЬ(A1;"/";"_")  или =ПОДСТАВИТЬ(A1;"//";"_") .
Подскажите, как правильно написать формулу, чтобы она учитывала 2 варианта замены? т.е. определяла "/"
или "//" и выводила "_". И чтобы при "//" не получалось "__".

Можно формулой, можно макросом.
Заранее всем спасибо.
 
=ПОДСТАВИТЬ(ПОДСТАВИТЬ(A1;"//";"/");"/";"_")
Алексей М.
 
АlехМ, спасибо, формула работает.
 
Добрый день.
Появились вопросы с которыми сам не могу справиться.

Вопрос 1:
есть поле "200". Пример:
2001#$aМеханизмы влияния некоторых полисахаридных препаратов на скорость заживления ран в эксперименте $eавтореферат диссертации на соискание ученой степени кандидата медицинских наук $e14.00.16 $fШнейдер Александр Болеславович $gМинистерство высшего и среднего специального образования СССР, Университет дружбы народов им. П. Лумумбы

Необходимо извлечь название "$a", в данном случае: Механизмы влияния некоторых полисахаридных препаратов на скорость заживления ран в эксперименте.
Учебное заведение "$g", в данном случае:Министерство высшего и среднего специального образования СССР, Университет дружбы народов им. П. Лумумбы

формулы вычисления "$a"
Код
=ПСТР(ВПР("200*";$A$40:$A$280;1;0);ПОИСК("$a";ВПР("200*";$A$40:$A$280;1;0))+2;ПОИСК("$e";ВПР("200*";$A$40:$A$280;1;0))-2-ПОИСК("$a";ВПР("200*";$A$40:$A$280;1;0)))
Ответ получаю в виде #Н/Д

формулы вычисления "$g"
Код
=ПСТР(ВПР("200*";$A$40:$A$280;1;0);ПОИСК("$g";ВПР("200*";$A$40:$A$280;1;0))+2;ПОИСК("$g";ВПР("200*";$A$40:$A$280;1;0))-2)
Ответ получаю в виде #Н/Д

В обоих случаях искомое значение слишком длинное, если укоротить, то ответ находится правильно (укороченный вариант). При поиске названия необходимо уменьшить длину строки и "$a" и "$e", тогда работает.
Подскажите, что можно сделать, чтобы он считал всю длину строки (символов 300) ?

Вопрос 2:
есть поле 899 и его разновидности (те, которые смог найти, но не уверен, что нашел все), подполе "$b"=039,043,063,055. Подполе "$j"=11,15.
Пример:
899##$aBY-HM0000 $b039 $j11:4:2:67 $p21778/86
899##$aBY-HM0000 $b039 $j15:4:4:21 $pБА199008
899##$aBY-HM0000 $b043 $j11:4:2:66 $pАЯ510369
899##$aBY-HM0000 $b043 $j15:4:4:22 $pБа204698
899##$aBY-HM0000 $b063 $j11:4:2:66 $pАЯ510331
899##$aBY-HM0000 $b063 $j15:4:2:66 $pАЯ510331
899##$aBY-HM0000 $b055 $p##2Н//317030(055)

Часть данных из существующей записи: есть короткое и длинное поле.
899##$aBY-HM0000 $pБа199007
899##$aBY-HM0000 $pБа199008
899##$aBY-HM0000 $b039 $j15:4:4:21 $pБа199007
899##$aBY-HM0000 $b039 $j15:4:4:21 $pБА199008
899##$aBY-HM0000 $b043 $j11:4:2:66 $pАЯ510369
899##$aBY-HM0000 $b055 $p##2Н//317030(055)
Мне необходимо найти все значения "$p" в длинных строках.
Длинную строку можно определять как "899*$j*", т.е. добавляю подполе "$j". В данной случае сразу отсекаются короткие записи (с них нет подполя "$j") и отсекается строка вида: 899##$aBY-HM0000 $b055 $p##2Н//317030(055). Здесь в поле "$p" стоят символы "##". Такое поле "899" где есть ($b055 $p##) также, как и короткое поле не должны учавствовать в выборке.
Т.е. остаются поля "899":
899##$aBY-HM0000 $b039 $j15:4:4:21 $pБа199007
899##$aBY-HM0000 $b039 $j15:4:4:21 $pБА199008
899##$aBY-HM0000 $b043 $j11:4:2:66 $pАЯ510369

Мне необходимо, чтобы выводился ответ: Ба199007, БА199008, АЯ510369.
Формула для подсчета 2-х значений:
Код
=ПСТР(ВПР("899*$j*";$A$40:$A$280;1;0);ПОИСК("$p";ВПР("899*$j*";$A$40:$A$280;1;0))+2;ПОИСК("$p";ВПР("899*$j*";$A$40:$A$280;1;0))-2)&","&ПСТР(ВПР("899*$j*";$A$40:$A$280;1;0);ПОИСК("$p";ВПР("899*$j*";$A$40:$A$280;1;0))+2;ПОИСК("$p";ВПР("899*$j*";$A$40:$A$280;1;0))-2)

По данной формуле ответ получается Ба199007, Ба199007. Т.е. он все время находит первую строку.
Как сделать, чтобы он просматривал все строки с полями "899*$j*" ?

вот еще пример из исходников
899##$aBY-HM0000 $pБа199492
899##$aBY-HM0000 $pБА199493
899##$aBY-HM0000 $b039 $j11:4:2:66 $pАЯ514349
899##$aBY-HM0000 $b039 $j11:4:2:66 $pАЯ516431
899##$aBY-HM0000 $b039 $j15:4:4:21 $pБа199492
899##$aBY-HM0000 $b039 $j15:4:4:21 $pБА199493
899##$aBY-HM0000 $b055 $p##2Н//238201(055)
Здесь ответ: АЯ514349, АЯ516431, Ба199492, БА199493.
 
Цитата
se_arts написал:
Нужно найти строку, которая начинается на "500" и взять из нее текст Пушкин Александр
Код
=СЖПРОБЕЛЫ(ПСТР(ПОДСТАВИТЬ(ИНДЕКС(A1:A6;ПОИСКПОЗ("500*";A1:A6;0);1);" ";ПОВТОР(" ";99));ПОИСК(ПРОСМОТР(1;1/ПОИСК({"А":"П"};ИНДЕКС(A1:A6;ПОИСКПОЗ("500*";A1:A6;0);1));{"А":"П"});ИНДЕКС(A1:A6;ПОИСКПОЗ("500*";A1:A6;0);1));99)&ПСТР(ИНДЕКС(A1:A6;ПОИСКПОЗ("500*";A1:A6;0);1);ПОИСК(ПРОСМОТР(1;1/ПОИСК({"А":"Я"};A3);{"А":"Я"});ИНДЕКС(A1:A6;ПОИСКПОЗ("500*";A1:A6;0);1));99))
Страницы: 1
Наверх