Форум программистов, компьютерный форум, киберфорум
MS Office Excel
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/11: Рейтинг темы: голосов - 11, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 14.07.2017
Сообщений: 12
1

Извлечь данные

14.07.2017, 11:24. Показов 2217. Ответов 18
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте! Очень нужна Ваша помощь.

Имеется ячейка примерно такого формата: куча текста, страна, 1400 МВт, 2000 26.12.2014

Требуется: извлечь в отдельные столбцы страну, 1400 МВт ( то бишь мощность), год пуска (2000), дату (26.12.2014 )


Прикол в том что могут стоять запятые, а могут не стоять. Четкого формата данных нет. Может быть написано например: 1400МВт или 1400 МВт. Так же год пуска может стоять перед мощностью и так далее.

Извлечь дату у меня уже получается к счастью.
Как извлечь год пуска, зная что это число четырехзначное начинающееся с "20??" или с "19??" ?
Как извлечь мощность, зная что это данное пишется в формате "??? МВт", "???? МВт" или без пробела "???МВт", "????МВт"
Ну и тот же вопрос по стране, правда это не так принципиально как для года пуска и мощности.
Если недостаточно одного примера могу еще поскидывать.


Я просто плохо владею стандартными функциями эксель, попытался поразбираться и все равно пока не могу написать необходимые условия, а мне это нужно скорее сделать.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.07.2017, 11:24
Ответы с готовыми решениями:

Требуется извлечь данные из ячейки
Доброго времени суток! Помогите пожалуйста! Требуется извлечь данные из ячейки : л/счет (число),...

Трансформировать один большой столбец в таблицу (извлечь данные из одного столбца в несколько строк)
Привет всем. Искал подобные темы на форуме и в интернете, но не нашел. Возникла проблема с тем, что...

Извлечь текст до определенного символа и извлечь из кавычек
Ребята, помогите, пожалуйста, с формулой. есть много текста в ячейках, в каждом тексте есть разные...

Извлечь дату
Добрый вечер! Подскажите, пожалуйста, с помощью какой функции из строки "Надходження товарів і...

18
6004 / 3199 / 716
Регистрация: 23.11.2010
Сообщений: 10,689
14.07.2017, 11:53 2
Файл с примером приложите со всеми возможными вариантами значений
0
0 / 0 / 0
Регистрация: 14.07.2017
Сообщений: 12
14.07.2017, 13:11  [ТС] 3
таблица большая и всю нет смысла скидывать, оставил парочку строк
еще раз говорю четкого формата записи нет, к сожалению.
Вложения
Тип файла: docx пример.docx (11.4 Кб, 14 просмотров)
0
0 / 0 / 0
Регистрация: 14.07.2017
Сообщений: 12
17.07.2017, 09:35  [ТС] 4
да ладно, никто не в курсе? я ж уже даже условия написал, только не знаю как запрограть это стандартными функциями эксель
0
6004 / 3199 / 716
Регистрация: 23.11.2010
Сообщений: 10,689
17.07.2017, 10:24 5
да ладно, в ветке Excel пример в Word как минимум странно....
В примере все запятые на месте, так что могу предложить Текст по столбцам с разделителем "запятая"

Дату вытаскивайте ПРАВСИМВ()
0
0 / 0 / 0
Регистрация: 14.07.2017
Сообщений: 12
17.07.2017, 10:50  [ТС] 6
Если бы было так все просто, то я бы не писал. Запятые могут стоять а могут нет, я ж описал проблему.
Дату как вытащить я тоже знаю (опять же написал). Вы вообще прочитали, что я написал вначале? Прочтите еще раз.

Мне нужно загнать следующее:
Как извлечь год пуска, зная что это число четырехзначное начинающееся с "20??" или с "19??" ?
Как извлечь мощность, зная что это данное пишется в формате "??? МВт", "???? МВт" или без пробела "???МВт", "????МВт"

Дату кстати я извлекаю след образом: =ЕСЛИ(ЕТЕКСТ(J16);ПСТР(J16;ПОИСК("??.??.????";J16);10);0)
Потому что она может опять же стоять где угодно.
Опять напишу, в ячейках формата четкого нет.

В любом случае спасибо за ваши старания и помощь
0
772 / 615 / 294
Регистрация: 05.01.2014
Сообщений: 1,338
17.07.2017, 13:12 7
Вам же уже сказали.
Цитата Сообщение от Fairuza Посмотреть сообщение
Файл с примером приложите со всеми возможными вариантами значений
Это сайт по решению вопросов в Excel, никто не побежит переделывать ваш файл из формата Word в формат Excel, чтобы дать вам ответ. Приложите файл в формате Excel, покажите что есть и что хотите получить. С таким подходом вы и на других форумах не найдете ответа.
0
0 / 0 / 0
Регистрация: 14.07.2017
Сообщений: 12
17.07.2017, 14:04  [ТС] 8
колонка A - исходные данные
Колонки D,E,F,G - то что мне необходимо получить

Если Вам и это будет не понятно, то я уже не знаю как объяснить.
Вложения
Тип файла: xlsx пример 1.xlsx (8.8 Кб, 12 просмотров)
0
Динохромный
1376 / 749 / 273
Регистрация: 22.12.2015
Сообщений: 2,344
17.07.2017, 15:55 9
Цитата Сообщение от 007rus Посмотреть сообщение
Вы вообще прочитали, что я написал вначале? Прочтите еще раз.
Очевидно читали, если предлагают из полученной вами даты извлечь год с помощью функции =ПРАВСИМВ(Дата_по_вашей_формуле",4), результатом как раз будет требуемый вам год.
Цитата Сообщение от 007rus Посмотреть сообщение
мне это нужно скорее сделать.
Обращайте внимание на предлагаемые вам решения, это ускорит получение результата.
Цитата Сообщение от 007rus Посмотреть сообщение
не знаю как запрограть это стандартными функциями эксель
Могу предложить нестандартные, на VBA.
Вставьте код ниже в отдельный модуль редактора VBA
В пустую ячейку вбейте формулу "=text_split_power(A1)", протяните.
Предусматривать в коде проверки я не стал, поскольку вы не посчитали нужным выложить реальные примеры текста, ограничившись абстрактным "Текст1", "Текст2" и т.д., так что работоспособность с вашим набором данных протестируйте самостоятельно.
Кликните здесь для просмотра всего текста
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Option Explicit
 
 
Public Function text_split_power(ByVal strTxt As String)
    Dim vrtPer As Variant
    Dim i As Integer, strAnsw As String
    strTxt = Replace(strTxt, " МВт", "МВт")
    strTxt = Replace(strTxt, ",", ", ")
    strTxt = Replace(strTxt, "  ", " ")
    vrtPer = Split(strTxt, " ")
    For i = 0 To UBound(vrtPer)
        If vrtPer(i) Like "*МВт" Then
            strAnsw = vrtPer(i)
            Exit For
        End If
    Next i
    If strAnsw = "" Then text_split_power = "Ошибка" Else text_split_power = strAnsw
End Function

Готов ответить на конкретные вопросы.

Добавлено через 12 минут
Цитата Сообщение от 007rus Посмотреть сообщение
Ну и тот же вопрос по стране, правда это не так принципиально как для года пуска и мощности.
Исходя из чего Excel должен понять, что некий кусок текста - это страна, а не скажем блюдо национальной кухни?
Вот вы сами не заглядывая в гугл, можете сказать, что из перечисленного страны, а что нет: Джибути, Того, Свазиленд, Науру?
Полагаю, нужно составить перечень стран, с которым и будет сравниваться каждая строка.
0
0 / 0 / 0
Регистрация: 14.07.2017
Сообщений: 12
17.07.2017, 17:47  [ТС] 10
Начнем с начала, если тут никто не умеет или не хочет читать

Есть ячейка примерно такого формата: куча текста, страна, год , мощность и дата
Все это в одной ячейке и таких ячеек много!
Кроме того нет строгого формата записи.
Это значит, что может быть не соблюдена последовательность приведенная выше, т.е. может быть так:

куча текста, страна, год , мощность , дата
страна, куча текста, год , мощность , дата
куча текста, страна, год , мощность ,
дата, куча текста, страна, год , мощность ,
...
т.е. четкой последовательности нет, я надеюсь это понятно

Кроме того!!!!! запятые между этими элементами могут и вовсе не стоять.
Т.е. может быть так: куча текста страна год мощность дата

Что нужно? - вытащить из ячейки отдельно страну, мощность, год, дату в отдельные стобцы

Что точно известно о формате записи:
Всегда год - это четырехзначное число, начинающееся с 19 или 20
Дата всегда в формате ??.??.????
Значение мощности стоит рядом с МВт (может слитно, а может и через пробел)

В приведенном файле экселе нетрудно это увидеть.
Все случаи различных перестановок данных привести нереально, поэтому привел парочку чтобы вы поняли смысл.

Теперь отвечаю конкретно г-ну Dinoxromniy:
1) Мне не нужно извлекать из даты значение года! дата и год это разные данные, обратите внимание. посмотрите пример экселя
2) В приведенном примере экселя ясно видно название стран, они никак не связаны с кусками текста, которые я обозначил Текст1,2,3 и т.п..
3) саму дату я уже давно извлек (что я написал выше и показал как я это сделал), из нее не надо извлекать год, это вообще разные данные по сути!!! год это одно данное, дата это другое данное никак не связанные между собой.
4) зачем вам видеть сам текст? это не принципиально, представьте любую информацию из разного количества слов. это вообще никак не относится к сути вопроса.
5) Я попробую использовать вашу мысль по VBA, за что спасибо
6) еще раз, если у вас остались вопросы лучше спрашивайте, а не утверждайте что мне тут кто-то якобы что-то подксазал. пока что мне это все видится каким-то стебом надо мной, потому что яснее сформулировать задачу ну просто не возможно.
0
Динохромный
1376 / 749 / 273
Регистрация: 22.12.2015
Сообщений: 2,344
17.07.2017, 19:33 11
Цитата Сообщение от 007rus Посмотреть сообщение
1) Мне не нужно извлекать из даты значение года! дата и год это разные данные, обратите внимание. посмотрите пример экселя
Теперь понятно, спасибо за пояснение.
Цитата Сообщение от 007rus Посмотреть сообщение
2) В приведенном примере экселя ясно видно название стран, они никак не связаны с кусками текста, которые я обозначил Текст1,2,3 и т.п..
Разумеется, это видит сам пользователь. Но вопрос я вам другой задал: откуда об этом узнает Эксель? Еще раз попробую донести свою мысль: чтобы Эксель смог вытащить из всего набора символов ту часть, которая является страной, необходимо иметь перечень стран.
Цитата Сообщение от 007rus Посмотреть сообщение
3) саму дату я уже давно извлек (что я написал выше и показал как я это сделал), из нее не надо извлекать год, это вообще разные данные по сути!!! год это одно данное, дата это другое данное никак не связанные между собой.
В чем разница этого пункта и пункта 1), поясните.
Цитата Сообщение от 007rus Посмотреть сообщение
4) зачем вам видеть сам текст? это не принципиально, представьте любую информацию из разного количества слов. это вообще никак не относится к сути вопроса.
Последуйте своей собственной рекомендации и в эту часть любой кусок, который содержит мВт, увидите, что код сработает неправильно. Могут быть и менее очевидные нюансы. Мне видеть текст действительно не нужно, это нужно вам, как указано - для того чтобы отследить его корректную работу.
Цитата Сообщение от 007rus Посмотреть сообщение
5) Я попробую использовать вашу мысль по VBA
Полагаю, если вы опишете закономерности в вашем тексте более подробно, то станет возможным подобрать решение с помощью стандартных средств.
Цитата Сообщение от 007rus Посмотреть сообщение
6) еще раз, если у вас остались вопросы лучше спрашивайте
Остались - могут ли встречаться в Тексте слова - дубликаты, четырехзначные цифры, не являющиеся годом, какая средняя длина текста в ячейке и другие вопросы, писать которые лень и которых бы не было, еслибы вы приложили реальный пример.
Цитата Сообщение от 007rus Посмотреть сообщение
яснее сформулировать задачу ну просто не возможно
Ну доступнее изложить можно, чтоб все поняли.
0
5989 / 1998 / 323
Регистрация: 10.12.2013
Сообщений: 6,882
20.07.2017, 22:03 12
Цитата Сообщение от 007rus Посмотреть сообщение
Начнем с начала, если тут никто не умеет или не хочет читать
Читать умеешь?
Тогда:
1) Предоставляешь тут реальные данные.
2) Озвучиваешь тут мотивацию, почему надо тратить своё время на решение твоей задачи.
0
6 / 23 / 2
Регистрация: 29.01.2013
Сообщений: 174
20.07.2017, 22:47 13
можно на файлообменник кинуть польный файл для анализа.
Для возможного составления формул (без вба) хочу проанализировать весть перечень стран, диапазоны годов и диапазоны дат.
0
0 / 0 / 0
Регистрация: 14.07.2017
Сообщений: 12
21.07.2017, 15:12  [ТС] 14
Отвечаю г-ну Володин661:
1) файл с примерами я привёл, на него и ориентируйтесь. Также детально описал возможные варианты - на что также можно опираться. Добавлю к тому что писал раньше, реальные данные мне нельзя распространять, ввиду этого создал файл с примерами без реального наполнения для понимания сути вопроса.
2) мне вас печеньками мотивировать? Насколько я понял помощь здесь предоставляется бескорыстно. Проходите мимо, вас конкретно никто не принуждает заниматься чужими проблемами. Задачу я считаю тривиальной ввиду того что зная ВБА не сложно запрогать те условия которые я описал. А если не понятно что за условия, прочитайте все ещё раз, я как минимум два раза их описал.

итог: в полуавтоматическом режиме я уже справился с этой задачей, хотя возможно в скором это опять будет актуально.
0
6004 / 3199 / 716
Регистрация: 23.11.2010
Сообщений: 10,689
21.07.2017, 16:15 15
007rus, может перенести Вашу тему в раздел VBA, потому как здесь предлагают решения формулами?
0
0 / 0 / 0
Регистрация: 14.07.2017
Сообщений: 12
21.07.2017, 16:19  [ТС] 16
ну я первоначально искал решение без применения ВБА, но если такого нет, то можно и перенести в другой раздел.
0
6004 / 3199 / 716
Регистрация: 23.11.2010
Сообщений: 10,689
24.07.2017, 06:56 17
007rus, для решения формулами нужно предоставить данные в виде, наиболее приближенные к реальным, хотя для ВБА тоже...
0
0 / 0 / 0
Регистрация: 14.07.2017
Сообщений: 12
24.07.2017, 13:17  [ТС] 18
я уже привел пример в ворде, в экселе, и описал в общем какие варианты возможны, т.е. я уже предоставил данные близкие к реальным, убрав оттуда основной текст (на который можно не обращать внимания, в нем нет годов, чисел, названия стран, слова "МВт" - т.е. всего того что мне нужно выделить из ячейки).

У меня скажем порядка нескольких тысяч таких ячеек, я не могу перебирать каждую, удаляя оттуда текст - это слишком долго, надеюсь это понятно; поэтому привел столько, сколько мне показалось достаточным для понимания сути.

если формула будет работать с указанными примерами (которые я привел раньше), то задача можно сказать решена.
0
Динохромный
1376 / 749 / 273
Регистрация: 22.12.2015
Сообщений: 2,344
24.07.2017, 13:40 19
Цитата Сообщение от 007rus Посмотреть сообщение
поэтому привел столько, сколько мне показалось достаточным для понимания сути.
Цитата Сообщение от 007rus Посмотреть сообщение
если формула будет работать с указанными примерами (которые я привел раньше), то задача можно сказать решена.
Это упрощает задачу. Используйте функции аналогичные приведенной выше, они все протестированы на Вашем примере, все дают однозначный правильный ответ, что заведомо соответствует Вашим озвученным требованиям.
Функция для мощности (приводил выше):
Кликните здесь для просмотра всего текста
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Public Function text_split_power(ByVal strTxt As String)
    Dim vrtPer As Variant
    Dim i As Integer, strAnsw As String
    strTxt = Replace(strTxt, " МВт", "МВт")
    strTxt = Replace(strTxt, ",", ", ")
    strTxt = Replace(strTxt, "  ", " ")
    vrtPer = Split(strTxt, " ")
    For i = 0 To UBound(vrtPer)
        If vrtPer(i) Like "*МВт" Then
            strAnsw = vrtPer(i)
            Exit For
        End If
    Next i
    If strAnsw = "" Then text_split_power = "Ошибка" Else text_split_power = strAnsw
End Function

Для даты:
Кликните здесь для просмотра всего текста
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Public Function text_split_Date(ByVal strTxt As String)
    Dim vrtPer As Variant
    Dim i As Integer, strAnsw As String
    strTxt = Replace(strTxt, " МВт", "МВт")
    strTxt = Replace(strTxt, ",", ", ")
    strTxt = Replace(strTxt, "  ", " ")
    vrtPer = Split(strTxt, " ")
    For i = 0 To UBound(vrtPer)
        If vrtPer(i) Like "##.##.###" Then
            strAnsw = vrtPer(i)
            Exit For
        End If
    Next i
    If strAnsw = "" Then text_split_Date = "Ошибка" Else text_split_Date = strAnsw
End Function

Для года:
Кликните здесь для просмотра всего текста
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Public Function text_split_Year(ByVal strTxt As String)
    Dim vrtPer As Variant
    Dim i As Integer, strAnsw As String
    strTxt = Replace(strTxt, " МВт", "МВт")
    strTxt = Replace(strTxt, ",", ", ")
    strTxt = Replace(strTxt, "  ", " ")
    vrtPer = Split(strTxt, " ")
    For i = 0 To UBound(vrtPer)
        vrtPer(i) = Replace(vrtPer(i), ",", "")
        If vrtPer(i) Like "####" Then
            strAnsw = vrtPer(i)
            Exit For
        End If
    Next i
    If strAnsw = "" Then text_split_Year = "Ошибка" Else text_split_Year = strAnsw
End Function

Для страны:
Кликните здесь для просмотра всего текста
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Public Function text_split_Country(ByVal strTxt As String)
    Dim vrtPer As Variant
    Dim i As Integer, strAnsw As String
    strTxt = Replace(strTxt, " МВт", "МВт")
    strTxt = Replace(strTxt, ",", ", ")
    strTxt = Replace(strTxt, "  ", " ")
    vrtPer = Split(strTxt, " ")
    For i = 0 To UBound(vrtPer)
        vrtPer(i) = Replace(vrtPer(i), ",", "")
        If Not ((vrtPer(i) Like "####") Or (vrtPer(i) Like "Текст?") Or (vrtPer(i) Like "##.##.###") Or vrtPer(i) Like "*МВт") Then
            strAnsw = vrtPer(i)
            Exit For
        End If
    Next i
    If strAnsw = "" Then text_split_Country = "Ошибка" Else text_split_Country = strAnsw
End Function
1
24.07.2017, 13:40
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.07.2017, 13:40
Помогаю со студенческими работами здесь

Извлечь текст
Добрый день! Подскажите, пожалуйста, как можно вытянуть текст из строки?

Извлечь значения из массива
Приветствую Всех! Прошу помощи!!!!!!!!!!!! Мне необходимо извлечь все значения из массива (в...

Необходимо извлечь формат ячейки
Здравствуйте. может кто сможет подсказать формулу которая извлекает подробную информацию формата...

Извлечь значения и подставить в формулу
Подскажите пожалуйста, есть массив данных, необходимо извлечь из него все значения удовлетворяющие...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru