Andrey_
Гость
|
|
« : 23-10-2007 16:44 » |
|
Доброго времени суток! есть одна непростая для меня задача и даже не знаю как к ней подступиться, может кто подскажет? а задача следующая: есть довольно большая таблица в Excel, состоящая из одного столбца и неск. сотен строк (пусть столбец А). Информация в строках представляет собой фразы разной длины, но все они построены одним образом:
*****:******==***********
где ******* - некоторые фразы или выражения, включая пробелы.
так вот необходимо каждую такую строчку таблицы из ячейки А скопировать с соседние три ячейки В, С, D таким образом, чтобы в ячейке В была фраза стоящая до первого символа ":", в ячейке С была фраза стоящая между знаками ":" и "==", и в ячейку D скопировать остальную часть после "==", при этом во фразах после первого знака ":" данный знак также может встречаться, а вот знак "==" сущестсует в строке только в одном экземпляре:)
а затем мне всю информацию из этих трех ячеек B,C,D после редактирования необходимо обратно скомпоновать в ячейку E. но это как я понимаю уже другой макрос:)
буду благодарен любому содействию или подсказке в действиях. заранее спасибо
|
|
« Последнее редактирование: 23-10-2007 16:45 от RXL »
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #1 : 23-10-2007 17:49 » |
|
Andrey_, не подскажу , как в макросах, а при помощи формул я бы сделал так - см. аттач
думаю не трудно будет перевести в макрос с циклом
|
==.rar (1.68 Кб - загружено 2502 раз.)
|
|
Записан
|
|
|
|
Sla
|
|
« Ответ #2 : 23-10-2007 19:35 » |
|
извратившись все это можно построить текстовыми функциями
пишу по русски:
определяем длину строки; находим положение "первого разделителя"; находим положение "второго разделителя"; удаляем все что справа от "первого разделителя" - столбец 2; удаляем все что от "первого разделителя"+удаляем все что справа "второго разделителя" - столбец 3; удаляем все что слева от "второго разделителя" - столбец 4;
ну СЦЕПИТЬ ячейки сам сможешь - столбец 5
good luck
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
Andrey_
Гость
|
|
« Ответ #3 : 24-10-2007 06:57 » |
|
Спасибо всем!
|
|
|
Записан
|
|
|
|
HandKot
Молодой специалист
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
|
|
« Ответ #6 : 26-10-2007 06:31 » |
|
а плюсом пробовал?
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
Andrey_
Гость
|
|
« Ответ #7 : 26-10-2007 08:58 » |
|
нет, не пробовал. его в скрипте необходимо прописывать или в формуле? дело в том что мне нужно чтобы в ячейке получился текст, который я бы мог редактировать.
|
|
|
Записан
|
|
|
|
Sla
|
|
« Ответ #8 : 26-10-2007 09:12 » |
|
Andrey_, а ты попробовал? хоть где-нибудь?
Ф1
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #9 : 26-10-2007 09:26 » |
|
Andrey_, в формуле "СЦЕПИТЬ()" , в программе пробуй
... = Range("X1").Value+Range("X2").Value
|
|
|
Записан
|
|
|
|
Sla
|
|
« Ответ #10 : 26-10-2007 09:34 » |
|
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
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
|
|
« Ответ #13 : 29-05-2008 12:28 » |
|
anton, и что это??? Плюс ко всему - некрофилия не приветствуется.
|
|
|
Записан
|
|
|
|
ppp555
Новенький
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
Деятель
Команда клуба
Offline
Пол:
|
|
« Ответ #15 : 11-02-2014 07:30 » |
|
Надо такую функцию, которая находит последний пробел в строке. И результат этот функции вставить в ПРАВСИМ. См. функции поиска в строке.
|
|
|
Записан
|
Программировать - значит понимать (К. Нюгард) Невывернутое лучше, чем вправленное (М. Аврелий) Многие готовы скорее умереть, чем подумать (Б. Рассел)
|
|
|
ppp555
Новенький
Offline
|
|
« Ответ #16 : 11-02-2014 09:17 » |
|
Надо такую функцию, которая находит последний пробел в строке. И результат этот функции вставить в ПРАВСИМ. См. функции поиска в строке.
спасибо и за это. нашел в нете такое: 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
Деятель
Команда клуба
Offline
Пол:
|
|
« Ответ #17 : 11-02-2014 10:32 » |
|
ppp555, увы, у меня нет Microsoft Office, чтобы посмотреть. Вариант из OpenOffice не уверен, что будет работать.
|
|
|
Записан
|
Программировать - значит понимать (К. Нюгард) Невывернутое лучше, чем вправленное (М. Аврелий) Многие готовы скорее умереть, чем подумать (Б. Рассел)
|
|
|
Sla
|
|
« Ответ #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); НЕ ПРОВЕРЯЛ!
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
|