Страницы: 1
RSS
Поиск подстроки по заданному критерию
 
Доброй ночи.  
Возникла следующая проблема:  
Есть строка, в которой содержатся тестовые и числовые данные, а также пустоты. Из этой строки нужно найти подстроку максимальной длинной, не содержащую пустот. Разумеется, сделать это надо средствами Excel (версия 2002 SP2, если это имеет значение).  
С применением стандартных формул найти решение не получилось. С макросами пока не доводилось работать.  
Если кто-то знает как решить такую проблему, подскажите способ, пожалуйста.
 
А "Текст по столбцам" не подойдёт?
 
Формулами не знаю.  
Что такое пустоты? Это пробел или несколько пробелов подряд?  
Тогда макрос можно сочинить.  
1. Сжать лишние пробелы.  
2. Посчитать номера пробелов в строке.  
3. Найти максимум между номерами пробелов.  
4. Это будут координаты максимальной подстроки.
 
Уверен, что это можно решить формулами Excel, но т.к. я с ними плохо знаком, предлагаю пользовательскую функцию  
 
См. файл.
 
Ну вот! Все уже ... (придумано) до нас!  
 
{quote}{login=Pavel55}{date=09.02.2009 11:55}{thema=}{post}можно решить формулами Excel, но т.к. я с ними плохо знаком...{/post}{/quote}  
 
Спасибо! Улыбнуло :)
 
ЗЫ: не знал про Ubound, гугль помогает.  
http://www.vbnet.ru/vbguide/showfunction.asp?id=12
 
Павел, насколько я понимаю бэйсик, это как раз то, что нужно.  
 
Function МаксСтрока(Rng As Range) As String  
Dim Arr As Variant, i As Long  
     
   Arr = Split(Rng, " ")  
   For i = 0 To UBound(Arr)  
       If Len(Arr(i)) > Len(МаксСтрока) Then МаксСтрока = Arr(i)  
   Next i  
End Function  
 
Но так как с макросами не работал, есть вопрос. Как и где мне присвоить элементам Arr соответствующие значения моей строки из книги?
 
{quote}{login=VikNik}{date=09.02.2009 11:49}{thema=}{post}Что такое пустоты? Это пробел или несколько пробелов подряд?{/post}{/quote}  
Пустые ячейки в смысле  
 
P.S. Пардон за мой французский в первом посте. Я имел ввиду вот это, только средствами Excel применительно к ячейкам:  
j:=0; k:=0;  
for i:=1 to 100 do begin  
if str[i]<>" " then j:=j+1;
else begin    
if j>k then k:=j;  
j:=0;  
end;  
end.
 
HrSmuck, если вам нужно просто из ваших строк найти самые длинные слова, то просто скопируйте их в мою книгу в столбец А, а формулу из ячейки В2 (жёлтая ячейка) протяните вниз. Таким образом ваши предложения будут в столбце А, а длинные слова в столбце В. Теперь вы можете заменить формулу на значение. Для этого скопируйте столбец В, далее меню Правка - Специальная вставка... - Значения.  
В столбце В будут длинные слова. Делайте с ними всё, что хотите.  
 
Если же вам надо, чтобы моя функция работала в вашем файле, то можно её перенести в ваш файл. Для этого откройте обе книги (вашу и мою с функцией), откройте редактор VBA (Alt+F11), в окне Project-VBAProject (Ctrl+R) найдите Module1, схватите его мышкой и перетащите на название вашей книги (чуть выше или чуть ниже в этом же окошке). Теперь можете закрывать мою книгу и в вашей книге в любой ячейке (но не А1) напишите =МаксСтрока(A1). А1 - это ссылка на ваше длинное предложение.
 
{quote}{login=HrSmuck}{date=10.02.2009 12:28}{thema=Re: }{post}{quote}{login=VikNik}{date=09.02.2009 11:49}{thema=}{post}Что такое пустоты? Это пробел или несколько пробелов подряд?{/post}{/quote}  
Пустые ячейки в смысле  
{/post}{/quote}  
Сдается мне автор начал тему про строку листа Excel (A1:Z1), a la Row.  
А я что-то подумал про текстовую строку, a la String.  
Бывают непонятки в этих "строках".
 
{quote}{login=VikNik}{date=10.02.2009 02:12}{thema=}{post}  
Сдается мне автор начал тему про строку листа Excel (A1:Z1), a la Row.  
А я что-то подумал про текстовую строку, a la String.  
Бывают непонятки в этих "строках".{/post}{/quote}  
Да. Я имел ввиду именно строку Excel, а не string`овую.  
 
Павел, спасибо за программу и комментарий. Хоть немного разобрался с макросами. Только один вопрос все таки остался. А именно - как сделать то же самое применительно к строке Excel?  
 
P.S.: Сорри, я действительно не очень понятно сформулировал.
 
HrSmuck, а знаете почему такие непонятки? Потому, что нет приложенного примера с вашей стороны. Если был бы пример, с данными, которые сейчас есть у вас и рядом значение, которое хотите получить. Мы бы быстрее вам помогли. А так разговор приблизительно такой  
- "ну, мне надо что-то"  
- эм, может вот это?  
- неее, надо что-то другое  
- а как на счёт такого?  
- опять не угадали...  
.....  
 
мы ведь так можем долго общаться, но смысла для вас не будет.  
 
Прикладывайте пример с описанием.  
 
Все ваши секретные данные можете заменить на "1, 2, 3, 4, 5" или "dlfj dlfjldjf ljsljf"
 
Да, Вы правы, Павел. Как-то не сообразил прикрепить файл.  
Серым цветом выделены максимальные подстроки, не содержащие пустых ячеек. В столбце S написаны числа, которые я хочу вычислить.
 
Я написал новую функцию. Посмотрите приложенный файл
 
Павел, все супер. Гигантское спасибо!
Страницы: 1
Читают тему
Наверх