| 
			| 
					
						| 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 Кб - загружено 2596 раз.)
									 |  
								|  |  Записан | 
 
 |  |  | 
	| 
			| 
					
						| 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 OnlyTHINK!
 |  |  | 
	| 
			| 
					
						| 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 StringDim sepearator = ' '
 Dim j As Long
 i = Len(r)
 j = InStrRev(r, " ")
 LastWord = Mid(r, (j + 1), (i - j))
 End Function
Вызвать в как формулу =LastWord(A1); НЕ ПРОВЕРЯЛ! |  
						| 
								|  |  
								|  |  Записан | 
 
 Мы все учились понемногу... Чему-нибудь и как-нибудь. |  |  | 
	|  |