Страницы: 1
RSS
Выбор данных по части слова
 
Вечер добрый. Подскажите, можно ли по части слова выбрать все строчки из таблицы данных. Пыталюсь с функцией ИНДЕКС, но как выбрать все позиции, а не одну, не понимаю.
 
Здравствуйте, nb! На мой взгляд, проще создать выпадающий список :) <BR>http://www.planetaexcel.ru/tip.php?aid=98 но это мое мнение...
 
?
 
{quote}{login=kim}{date=17.10.2010 08:20}{thema=}{post}?{/post}{/quote}  
Огромное СПАСИБО, именно то, что нужно!!    
Диана, списком конечно проще, но начальство изволит видеть результаты отбора на отдельных листах.
 
=ЕСЛИ(СУММ(--ЕЧИСЛО(ПОИСК($A$2;Sheet1!$D$2:$D$34)))<СТРОКА(A6);"";ИНДЕКС(Sheet1!$B$2:$B$34;НАИМЕНЬШИЙ(ЕСЛИ(ЕЧИСЛО(ПОИСК($A$2;Sheet1!$D$2:$D$34));СТРОКА(Sheet1!$A$2:$A$34)-1);СТРОКА(A6))))  
как вот это можно придумать, да ещё и что массивную надо :)  
Макросом проще - диапазон в массив, перебираем на Instr(), перекладываем из найденного нужные поля в другой массив, выгружаем.
 
:)
 
Диана :)  
А если список на несколько тыщщ... не, макросом надо...
 
Игорь, автор пока макрос не заказывал, вот как начнутся у него тормоза - может тогда обратится.  
P.S. я ж ваши макросы не трогаю :)
 
Прошу прощения, а как увеличить диапазон? Данные в первый лист будут добавляться все время. Пытаюсь увеличить количество строк - формулы перестают считаться. Что такое?
 
kim, я восхищаюсь, мне такого не написать :)  
 
А макрос вот например, пока без динамических диапазонов, выгружает ниже, чтоб с формулой сравнить можно было. Алгоритм выше описал. Положить в лист2, можно привязать к изменению А2. Пока сырой, там и переменные надо задать, и динамику... но уже работает.  
 
Sub vibor()  
 
   Dim a(), b()  
 
   a = Sheets(1).Range("b2:e34").Value  
   ReDim b(1 To UBound(a, 1), 1 To UBound(a, 2))  
     
   test = UCase(Trim([a2].Value))
   For i = 1 To UBound(a)  
       If InStr(UCase(a(i, 3)), test) > 0 Then  
           x = x + 1  
           b(x, 1) = a(i, 1)  
           b(x, 2) = a(i, 2)  
           b(x, 3) = a(i, 4)  
       End If  
   Next  
 
   [b30].Resize(UBound(b, 1), UBound(b, 2)).Value = b 'выгружаем результат
End Sub
 
Только хотел написать:  
"Это формулы массива, после редакции жать CTRL+SHIFT+ENTER  
Может макросом лучше, тут в теме как раз Hugo, я думаю там вообще ничего редактировать не нужно будет."  
А решение уже есть :)
 
ReDim b(1 To UBound(a, 1), 1 To 3)  
...  
   [b30].Resize(x, UBound(b, 2)).Value = b
 
так правильне, чтоб сбоку и снизу не затирал при выгрузке.
 
{quote}{login=kim}{date=17.10.2010 09:15}{thema=}{post}Только хотел написать:  
"Это формулы массива, после редакции жать CTRL+SHIFT+ENTER  
Может макросом лучше, тут в теме как раз Hugo, я думаю там вообще ничего редактировать не нужно будет."  
А решение уже есть :){/post}{/quote}  
 
Спасибо за подсказку, а насчет макроса не совсем понятно. Но все равно еще раз огромное спасибо, выручили.
 
Вот макрос, срабатывает на изменение А2, но можно и вручную запустить, диапазон просмотра динамический, хоть сколько тыщщ грузите :)
 
Игорь, я так понимаю вот эта строка  
iLastrow = Sheets(1).Range("A" & Rows.Count).End(xlUp).Row    
отвечает за поиск позиции последней заполненной ячейки по столбцу А  
Как ее изменить, чтобы искала последнюю    
1. по всему листу  
2. последнюю текстовую по столбцу А  
3. последнюю числовую по столбцу А
 
kim, я не такой спец, как Дмитрий, я что знаю, то и использую. А если нужно другое, то выкручиваюсь :)  
Но вот такой код есть, но я не применял за ненадобностью:  
 
r1_ = ActiveCell.SpecialCells(xlLastCell).Row  
Последний код указывает на строку самой нижней правой измененной с момента последнего сохранения ячейки листа    
 
А текстовую и числовую думаю я бы искал перебором от последней вверх, хотя может есть и встроенные методы, не знаю...
 
Вот как раз встроенные методы я и имел ввиду  
Спасибо :)  
Пытаюсь вникнуть, но потихоньку - не в затяжку :)
 
Ой, спасибо вам за макрос, завтра с утра вручу начальству пока что файлик с формулами, а с макросом позже, когда разберусь сама. А то мне к району, месту и теплоисточнику надо будет еще пару столбиков добавить.
 
{quote}{login=nb}{date=17.10.2010 09:58}{thema=}{post} А то мне к району, месту и теплоисточнику надо будет еще пару столбиков добавить.{/post}{/quote}  
 
Тогда чуть поясню.  
a = Sheets(1).Range("b2:e" & iLastrow).Value 'здесь "b2:e последняя строка" - это диапазон исходных данных  
 
   ReDim b(1 To UBound(a, 1), 1 To 3)  'здесь "1 To 3" - это ширина итогового массива  
 
           b(x, 1) = a(i, 1) 'здесь перекладываем из первого столбца массива а в первый столбец массива b  
 
Вот вроде и всё. Меняйте ширину или местоположение исходного массива, ширину итогового (т.е. количество столбцов), порядок перекладывания значений.
 
Hugo, cпасибо за помощь. И спокойной всем ночи:)
 
Теперь нужно искать значения по нескольким характерам дефектов.    
Hugo, ваш макрос после подстановки нового варианта в ячейку оставляет несколько строчек от предыдущего варианта. Так что пока пользуюсь вариантом kim, с формулами.
 
Хм... специально делал, чтоб по бокам и снизу не затирал.  
Ну тогда выгружайте так, весь массив, равный исходному:  
 
  [b2].Resize(UBound(b, 1), UBound(b, 2)).Value = b 'выгружаем результат
 
А вообще лучше сперва любым способом очистить область выгрузки и затем выгружать только нужное.
 
Как вариант. Дефект как-то описывать нужно уникальнее.  
 
85887
"..Сладку ягоду рвали вместе, горьку ягоду я одна."
 
{quote}{login=Владимир}{date=19.10.2010 07:15}{thema=}{post}Как вариант. Дефект как-то описывать нужно уникальнее.  
 
85887{/post}{/quote}  
У вас ищется первое найденное значение, а нужно вытащить все.
 
{quote}{login=nb}{date=19.10.2010 11:18}{thema=Re: }{post}{quote}{login=Владимир}{date=19.10.2010 07:15}{thema=}{post}Как вариант. Дефект как-то описывать нужно уникальнее.  
 
85887{/post}{/quote}  
У вас ищется первое найденное значение, а нужно вытащить все.{/post}{/quote}  
 
Дефект как-то описывать нужно уникальнее.
"..Сладку ягоду рвали вместе, горьку ягоду я одна."
Страницы: 1
Читают тему
Loading...