Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Как фразу в строке Excel разделить на три части по некоторому условию и скопировать в три другие яче  (Прочитано 44862 раз)
0 Пользователей и 3 Гостей смотрят эту тему.
Andrey_
Гость
« : 23-10-2007 16:44 » 

Доброго времени суток!
есть одна непростая для меня задача и даже не знаю как к ней подступиться, может кто подскажет?
а задача следующая:
есть довольно большая таблица в Excel, состоящая из одного столбца и неск. сотен строк (пусть столбец А). Информация в строках представляет собой фразы разной длины, но все они построены одним образом:

*****:******==***********

где ******* - некоторые фразы или выражения, включая пробелы.

так вот необходимо каждую такую строчку таблицы из ячейки А скопировать с соседние три ячейки В, С, D таким образом, чтобы в ячейке В была фраза стоящая до первого символа ":", в ячейке С была фраза стоящая между знаками ":" и "==", и в ячейку D скопировать остальную часть после "==",
при этом во фразах после первого знака ":" данный знак также может встречаться, а вот знак "==" сущестсует в строке только в одном экземпляре:)

а затем мне всю информацию из этих трех ячеек B,C,D после редактирования необходимо обратно скомпоновать в ячейку E. но это как я понимаю уже другой макрос:)

буду благодарен любому содействию или подсказке в действиях.
заранее спасибо
« Последнее редактирование: 23-10-2007 16:45 от RXL » Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #1 : 23-10-2007 17:49 » 

Andrey_, не подскажу , как в макросах, а при помощи формул я бы сделал так - см. аттач

думаю не трудно будет перевести в макрос с циклом

* ==.rar (1.68 Кб - загружено 2501 раз.)
Записан

Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #2 : 23-10-2007 19:35 » 


извратившись все это можно построить текстовыми функциями

пишу по русски:

определяем длину строки;
находим положение "первого разделителя";
находим положение "второго разделителя";
удаляем все что справа от "первого разделителя" - столбец 2;
удаляем все что от "первого разделителя"+удаляем все что справа "второго разделителя" - столбец 3;
удаляем все что слева от "второго разделителя" - столбец 4;

ну СЦЕПИТЬ ячейки сам сможешь - столбец 5

good luck



Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Andrey_
Гость
« Ответ #3 : 24-10-2007 06:57 » 

Спасибо всем!
Записан
HandKot
Молодой специалист

ru
Offline Offline

« Ответ #4 : 24-10-2007 10:08 » 

доработать напильником

Код:
Public Function Test()
    Dim a() As String
    Dim b() As String
   
    a = Split(Range("A1").Value, ":")
    b = Split(Range("A1").Value, "==")
   
    Range("B1") = a(0)
    Range("C1") = Replace(b(0), a(0), "")
    Range("D1") = b(1)
End Function
Записан

I Have Nine Lives You Have One Only
THINK!
Andrey_
Гость
« Ответ #5 : 26-10-2007 05:53 » 

большое спасибо HandKot, это как раз то что нужно, в ячейке получается текст. не мог бы ты тогда еще подсказать оператор для сцепления ячеек, чтобы тоже получался текс в ячейке?
Спасибо
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #6 : 26-10-2007 06:31 » 

а плюсом пробовал?
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Andrey_
Гость
« Ответ #7 : 26-10-2007 08:58 » 

нет, не пробовал. его в скрипте необходимо прописывать или в формуле? дело в том что мне нужно чтобы в ячейке получился текст, который я бы мог редактировать.
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #8 : 26-10-2007 09:12 » 

Andrey_,  а ты попробовал? хоть где-нибудь?

Ф1
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #9 : 26-10-2007 09:26 » 

Andrey_, в формуле "СЦЕПИТЬ()" , в программе пробуй

... = Range("X1").Value+Range("X2").Value
Записан

Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #10 : 26-10-2007 09:34 » 

Алексей1153++,
дык https://forum.shelek.ru/index.php/topic,13258.msg159438.html#msg159438
там все написато
еще лучше написато в Ф1
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Andrey_
Гость
« Ответ #11 : 26-10-2007 09:59 » 

ок, спасибо народ! где-нибудь попробу...
дело в том что никогда не имел дел с макросами до этого, формулами  я конечно пробовал, но это же не текст, а мне нужен именно текст.
спасибо!
Записан
anton
Гость
« Ответ #12 : 29-05-2008 07:42 » 

всем привет!

вот более усовершенственный вариант:

Sub Delimiter()
     Dim a As Range
         
     For Each a In Selection
     a = Split(a.Value, ".")
     Next
         
End Sub

Всем спасибо, поздравляю с наступающим днем независимости http://***.***/
 Улыбаюсь)
« Последнее редактирование: 29-05-2008 17:22 от Алексей1153++ » Записан
Naghual
Модератор

ua
Offline Offline
Пол: Мужской
ОПТИМИСТ


WWW
« Ответ #13 : 29-05-2008 12:28 » 

anton, и что это???
Плюс ко всему - некрофилия не приветствуется.
Записан
ppp555
Новенький

by
Offline Offline

« Ответ #14 : 11-02-2014 06:33 » 

ребят, прошу помощи. в экселе просто пользователь, постоянно приходится ручками доставать некоторую часть из ячеек большой таблицы. научился это делать функцией ПРАВСИМ, но эта часть всегда имеет разное кол-во символов, поэтому все равно извращение ручками Жаль помогите автоматизировать, пожалуйста! вот пример некоторых ячеек:

Абразивная бумага-диск для липучки 40 3581-125-040
Зубило плоское для перфоратора. хвостовик СДС+ 40/250 мм 29363-40-250
Ключ трубный рычажной №2.1.5" 27337-2

Из них необходимо получить в отдельных ячейках эти данные:
3581-125-040
29363-40-250
27337-2

Перед ними всегда есть пробел.

Заранее СПАСИБО!
Записан
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #15 : 11-02-2014 07:30 » 

Надо такую функцию, которая находит последний пробел в строке. И результат этот функции вставить в ПРАВСИМ. См. функции поиска в строке.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
ppp555
Новенький

by
Offline Offline

« Ответ #16 : 11-02-2014 09:17 » new

Надо такую функцию, которая находит последний пробел в строке. И результат этот функции вставить в ПРАВСИМ. См. функции поиска в строке.
спасибо и за это.
нашел в нете такое:
1 вариант:
Последний пробел:
{МАКС(ЕСЛИ(ЕОШ(НАЙТИ(" ";A1;СТРОКА(ДВССЫЛ("1:"&ДЛСТР(A1))) ));"";НАЙТИ(" ";A1;СТРОКА(ДВССЫЛ("1:"&ДЛСТР(A1))) )))}
Выдернуть номер:
{=ПРАВСИМВ(A1;ДЛСТР(A1)-МАКС(ЕСЛИ(ЕОШ(НАЙТИ(" ";A1;СТРОКА(ДВССЫЛ("1:"&ДЛСТР(A1))) ));"";НАЙТИ(" ";A1;СТРОКА(ДВССЫЛ("1:"&ДЛСТР(A1))) ))))}
2 вариант:
Последний пробел:
{=ДЛСТР(A1)+1-ПОИСКПОЗ(" ";ПСТР(A1;ДЛСТР(A1)+1-СТРОКА(ДВССЫЛ("1:"&ДЛСТР(A1)));1);0 )}
Выдернуть номер:
{=ПРАВСИМВ(A1;ДЛСТР(A1)-(ДЛСТР(A1)+1-ПОИСКПОЗ(" ";ПСТР(A1;ДЛСТР(A1)+1-СТРОКА(ДВССЫЛ("1:"&ДЛСТР(A1)));1);0 )))}

пробовал создать макрос, ругается на ошибки. не осилил Жаль придется ручками выдирать, как обычно.
Записан
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #17 : 11-02-2014 10:32 » 

ppp555, увы, у меня нет Microsoft Office, чтобы посмотреть. Вариант из OpenOffice не уверен, что будет работать.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #18 : 11-02-2014 11:40 » 

Проще|сложнее
написать функцию
Код:
Public Function LastWord(r As Range) as String
  Dim sepearator = ' '
  Dim j As Long
  i = Len(r)
  j = InStrRev(r, " ")
  LastWord = Mid(r, (j + 1), (i - j))
End Function

Вызвать в как формулу
=LastWord(A1);

НЕ ПРОВЕРЯЛ!
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines