Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.10.2009, 21:19   #1
Ilnour1986
Пользователь
 
Регистрация: 16.10.2009
Сообщений: 14
По умолчанию Поиск и вывод результата на другой лист!!!

ВСЕМ привет!!!
У меня есть таблица, есть кнопка поиска, листинг вот:

Dim s() As Variant
Private Sub sort(t As Variant)
Dim i As Integer
flag = 1
While flag = 1
flag = 0
For i = 1 To UBound(t) - 1
If t(i) > t(i + 1) Then
tmp = t(i)
t(i) = t(i + 1)
t(i + 1) = tmp
flag = 1
End If
Next
Wend
End Sub

Function poisk(a)
Dim r()
If a = "" Then
ReDim Preserve r(0)
r(0) = -1
poisk = r
Exit Function 'ничего не ввели или нажали Cancel
End If
Set c = Cells.Find(What:=a, After:=ActiveCell, LookIn:=xlValues, LookAt:= _
xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False)
If c Is Nothing Then
ReDim Preserve r(0)
poisk = r
Exit Function
End If
ReDim Preserve r(0)
r(0) = c.Row

Set st = c 'запоминаем первую найденную ячейку
Do 'цикл
Set c = Cells.FindNext(After:=c) 'следующая найденная ячейка
i = i + 1
ReDim Preserve r(i)
r(i) = c.Row
Loop Until c.Address = st.Address
poisk = r
End Function

Private Sub CommandButton1_Click()
Cells(1, 1).Activate
a = InputBox("ВВЕДИТЕ СТАТЬЮ", "ПОИСК СТАТЕЙ", "Какая статья вас интересует???")
s = poisk(a)

Select Case s(UBound(s))
Case -1
Exit Sub
Case ""
MsgBox ("Данные не найдены")
Exit Sub
End Select
Call sort(s)
For i = 1 To UBound(s)
NextRow = _
Application.WorksheetFunction.Count A(Range("A:A")) + 1
Cells(NextRow, 1) = Cells(s(i), 1).Text
Cells(NextRow, 2) = Cells(s(i), 2).Text
Cells(NextRow, 3) = Cells(s(i), 3).Text
Cells(NextRow, 4) = Cells(s(i), 4).Text
Next
End Sub

http://www.programmersforum.ru/attac...1&d=1255713409

Но результат выводит вниз таблицы!
А мне очень нужно, чтобы создавался Лист новый, например, "Результат" и чтобы туда выводился поиск, причём тут в таблице у меня 4 столбца, а на самом деле размерность может увеличиваться, быть и 10 столбцов и 3 и надо чтобы поиск ХОРОШО работал!!!
Кто знает, знающие люди, помогите, пожалуйсто
Изображения
Тип файла: jpg 4.JPG (48.2 Кб, 176 просмотров)
Ilnour1986 вне форума Ответить с цитированием
Старый 17.10.2009, 00:17   #2
EugeneS
Форумчанин
 
Регистрация: 06.08.2009
Сообщений: 472
По умолчанию

без файла и четкого описания что ищем и что получаем в результате ничего не выйдет
EugeneS вне форума Ответить с цитированием
Старый 18.10.2009, 22:09   #3
Ilnour1986
Пользователь
 
Регистрация: 16.10.2009
Сообщений: 14
По умолчанию

Я написал чётко, что мне нужно и где выводить!!!
ОЧЕНЬ прошу помощи, мне это очень нужно!!!
Помогите, пожалуйсто!
Ilnour1986 вне форума Ответить с цитированием
Старый 19.10.2009, 05:20   #4
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Как правильно заметил EugeneS, без примера файла ответ может быть не точный. Если я правильно понял задачу, то требуется на новый лист (в примере это лист "NewSheet") вывести из листа с кнопкой (активного), те строки, в которых значения ячейки в столбце "A" соответствуют значению, введенному для поиска. Если так, то предлагаю выполнить такой макрос:
Код:
Private Sub CommandButton1_Click()
    Dim a As String, i As Long, j As Long, arr(): Application.ScreenUpdating = False: Application.DisplayAlerts = False
    a = InputBox("ВВЕДИТЕ СТАТЬЮ", "ПОИСК СТАТЕЙ")
    If a = "" Then Exit Sub
    arr = ActiveSheet.UsedRange.Value
    On Error Resume Next: Sheets("NewSheet").Delete: On Error GoTo 0: Sheets.Add.Name = "NewSheet"
    For i = 1 To UBound(arr, 1)
        If arr(i, 1) = a Then
            j = Cells(Rows.Count, 1).End(xlUp).Row + 1: Range(Cells(j, 1), Cells(j, UBound(arr, 2))).Value = Application.Index(arr, i, 0)
        End If
    Next
End Sub
Если нужно, то можете сами добавить дальнейшие требуемые действия: сортировку, форматирование ячеек, заливку и т.п.
Чем шире угол зрения, тем он тупее.

Последний раз редактировалось SAS888; 19.10.2009 в 05:30.
SAS888 вне форума Ответить с цитированием
Старый 19.10.2009, 18:13   #5
Ilnour1986
Пользователь
 
Регистрация: 16.10.2009
Сообщений: 14
По умолчанию

спасибо, попробую Ваш код!!!))
но вот ещё что, таблица может увеличиваться или уменьшаться(столбцы то больше, то меньше), вооот...
но надо чтоб поиск работал!
Очень жду помощи!
Ilnour1986 вне форума Ответить с цитированием
Старый 20.10.2009, 04:34   #6
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Цитата:
таблица может увеличиваться или уменьшаться(столбцы то больше, то меньше)
Предлагаемый код ищет введенное пользователем значение в первом столбце (а как нужно?). При совпадении, на новый лист копируется вся строка, не зависимо от количества строк и столбцов.
Еще раз повторюсь, что для точного ответа сформулируйте точное задание и не экономьте слова.
Чем шире угол зрения, тем он тупее.

Последний раз редактировалось SAS888; 20.10.2009 в 07:14. Причина: Добавлено
SAS888 вне форума Ответить с цитированием
Старый 20.10.2009, 17:50   #7
Ilnour1986
Пользователь
 
Регистрация: 16.10.2009
Сообщений: 14
По умолчанию

1) Нужен поиск через Find тобишь если есть слова или предложения в диапзонах, где нужно искать, нужно чтобы выводило результат даже при вводе буквы(!) в поиске! ТО ЕСТЬ FIND ОБЯЗАТЕЛЕН(!)
2) вообще поиск по 3еум столбцу идёт, таблица оригинальная такая вот!
3) Спасибо за КОД! НО(!) результаты он НЕ выводит на другой лист, а выводит ПОД таблицу!!!
Ilnour1986 вне форума Ответить с цитированием
Старый 21.10.2009, 06:15   #8
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Ну, вот видите, оказывается есть особенности задачи. Почему бы не оговорить их сразу?
Попробуйте такой вариант:
Код:
Private Sub CommandButton1_Click()
    Dim a As String, fst As String, i As Long, x As Range, y As Range
    Application.ScreenUpdating = False: Application.DisplayAlerts = False
    a = InputBox("ВВЕДИТЕ СТАТЬЮ", "ПОИСК СТАТЕЙ")
    If a = "" Then Exit Sub
    Set x = Columns(3).Find(what:=a, LookAt:=xlPart)
    If Not x Is Nothing Then
        fst = x.Address
        Do
            If y Is Nothing Then Set y = x Else Set y = Union(y, x)
            Set x = Columns(3).FindNext(x)
        Loop While fst <> x.Address
    End If
    If Not y Is Nothing Then
        On Error Resume Next: Sheets("NewSheet").Delete: On Error GoTo 0: Sheets.Add.Name = "NewSheet"
        y.EntireRow.Copy Sheets("NewSheet").[A1]
    End If
End Sub
P.S. Совет: для того, чтобы получить быстрый и точный ответ, прикрепляйте исходный файл с данными и подробное задание. Сами данные можно сократить и заменить, сохранив структуру документа.
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 21.10.2009, 17:51   #9
Ilnour1986
Пользователь
 
Регистрация: 16.10.2009
Сообщений: 14
По умолчанию

СПАСИБО большое!!!))КОД РАБОТАЕТ))
учту ваш совет, постараюсь в след раз более яснее высказываться))у меня вопросов КУЧАА ещё!
КСтати, в новой созданном листе результат выводиться немного нет так как хотелось бы, то есть:
1) Нужно в первых строчках создать предложение "Результат поиска", чтоб красивее было, чем когда стандартно(шрифт, размер, цвет и т.д.)
2) чтобы результат выводился получше, не скомканно, то есть как в оригинальном листе! ваще такое реально сделать? так как в оригинальной таблице вместо, например, строки "НИОКР" написано "Статьи инвестирования НИОКР", а иногда этот НИОКР расшифровывается и получется широооокий столбец! в Итоге я хочу чтоб результат выводился как в оригенальной таблице!
3) там, где цифры, а это может быть НЕ 3 столбца, как тут в примере, а 10 или 100, и каждый раз меняются они в количеств6е! в результатах поиска снизу самих результатов нужен ИТОГО, то есть просчитать сумму вышестоящих ячеек каждого(!) столбца!

Очень надеюсь на Вашу помощь!
думаю мои условия ваще реально сделать на vba

Последний раз редактировалось Ilnour1986; 21.10.2009 в 17:55.
Ilnour1986 вне форума Ответить с цитированием
Старый 22.10.2009, 06:24   #10
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Все Ваши пожелания реализуются без проблем. Но... Давайте файл с примером. Создавать его самостоятельно во-первых, не хочется, во-вторых, опять что-нибудь будет не так. Постарайтесь в пример вставить все возможные варианты исходных данных. Сами данные можно заменить на "липовые".
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перенос на другой лист по значению столбца ElenaNTro Microsoft Office Excel 5 17.03.2011 14:50
Форма,переход на другой лист mephist Microsoft Office Excel 3 23.09.2009 12:19
Вывод результата в программу блокнот Печальный цыган Помощь студентам 2 15.06.2009 17:08
Операции со строками, вывод результата в 10 и 16 сис-ме счисления Sirega Паскаль, Turbo Pascal, PascalABC.NET 0 24.12.2008 16:36
Вывод результата по столбцам Mary_star SQL, базы данных 4 03.03.2008 13:15