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

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

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

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

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

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

здравствуйте.
помогите с такой задачей. имеется у меня код такой
Код:
Sub perenos_2()
Dim x As Range, y As Range, z As Range, fst As String: Application.ScreenUpdating = False
    
    Sheets(1).Activate: Sheets(2).Cells.ClearContents
    Set z = Range([D4], Cells(Rows.Count, 1).End(xlUp).Offset(, 5))
    Set x = z.Find(what:=2, LookAt:=xlWhole)
    
    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 = z.FindNext(x)
        Loop While fst <> x.Address
    End If
    
    If Not y Is Nothing Then
        y.EntireRow.Copy Sheets(2).Rows(2): y.EntireRow.Delete
    End If

End Sub
и надо, чтобы он находил в диапазоне (E:F) число 2, а в столбце D промежуток >=1 и <=30 [1;30] и переносил на второй лист... Только нужно код где-то поправить, я не знаю где!
Илья!

Последний раз редактировалось Ilya_L; 20.06.2010 в 08:06.
Ilya_L вне форума Ответить с цитированием
Старый 20.06.2010, 16:58   #2
Ilya_L
Пользователь
 
Регистрация: 18.06.2010
Сообщений: 78
По умолчанию

что нужно изменить в коде, чтобы в столбце D находил числа [1;30], а в столбцах E и F только 2?
Ilya_L вне форума Ответить с цитированием
Старый 21.06.2010, 05:31   #3
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Если требуется переносить строки при совпадении обоих условий, то можно, например, так:
Код:
Sub perenos_2()
    Dim x As Range, y As Range, z As Range, fst As String: Application.ScreenUpdating = False
    Sheets(1).Activate: Sheets(2).Cells.ClearContents
    Set z = Range([D4], Cells(Rows.Count, 1).End(xlUp).Offset(, 5))
    Set x = z.Find(what:=2, LookAt:=xlWhole)
    If Not x Is Nothing Then
        fst = x.Address
        Do
            If Cells(x.Row, "D") >= 1 And Cells(x.Row, "D") <= 30 Then
                If y Is Nothing Then Set y = x Else Set y = Union(y, x)
            End If
            Set x = z.FindNext(x)
        Loop While fst <> x.Address
    End If
    If Not y Is Nothing Then
        y.EntireRow.Copy Sheets(2).Rows(2): y.EntireRow.Delete
    End If
End Sub
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 21.06.2010, 05:39   #4
Ilya_L
Пользователь
 
Регистрация: 18.06.2010
Сообщений: 78
По умолчанию

Спасибо SAS888, вы мне очень помогли!
Ilya_L вне форума Ответить с цитированием
Старый 21.06.2010, 07:13   #5
Ilya_L
Пользователь
 
Регистрация: 18.06.2010
Сообщений: 78
По умолчанию

Программа не работает...пробовал перенести, а он не переносит ни число 2 из E и F, ни [1;30] в столбце D, все оставляем в таблице на первом листе
Ilya_L вне форума Ответить с цитированием
Старый 21.06.2010, 08:08   #6
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Цитата:
Программа не работает...
Зачем так категорично и не правильно???
Программа работает. Если не так, как Вам нужно - значит Вы так объяснили. Посмотрите вложение. Откройте файл и выполните макрос. Все строки 1-го листа, которые содержат в столбце "D" значения от 1 до 30, и в столбце "E" или "F" значение 2, будут перенесены на 2-й лист. Макрос во вложении без изменений.
Вложения
Тип файла: rar Книга1.rar (5.5 Кб, 8 просмотров)
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 21.06.2010, 08:36   #7
Ilya_L
Пользователь
 
Регистрация: 18.06.2010
Сообщений: 78
По умолчанию

Понятно, как она работает...Значит я не так сформулировал...
попробую по другому объяснить... столбы с D по F называются ЕГЭ, Экзамен и Аттестат(балл). двойка при ЕГЭ равна такому промежутку [1;30], а в полях Экзамен и аттестат все нормально.. Поэтому, если хотя бы в одной из ячеек строки стоит число 2 (для ЕГЭ промежуток от 1 до 30), то перенести на другой лист..не для обоих случаев, когда D и E или D и F равны 2.
Ilya_L вне форума Ответить с цитированием
Старый 21.06.2010, 09:51   #8
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Это совершенно другая задача. Можно так:
Код:
Sub Main()
    Dim i As Long: Application.ScreenUpdating = False
    For i = Cells(Rows.Count, 1).End(xlUp).Row To 2 Step -1
        If (Cells(i, 4) >= 1 And Cells(i, 4) <= 30) Or Cells(i, 5) = 2 Or Cells(i, 6) = 2 Then
            Rows(i).Copy Sheets(2).Cells(Rows.Count, 1).End(xlUp).Offset(1): Rows(i).Delete
    End If: Next
End Sub
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 21.06.2010, 10:25   #9
Ilya_L
Пользователь
 
Регистрация: 18.06.2010
Сообщений: 78
По умолчанию

Цитата:
Сообщение от SAS888 Посмотреть сообщение
Это совершенно другая задача. Можно так:
Код:
Sub Main()
    Dim i As Long: Application.ScreenUpdating = False
    For i = Cells(Rows.Count, 1).End(xlUp).Row To 2 Step -1
        If (Cells(i, 4) >= 1 And Cells(i, 4) <= 30) Or Cells(i, 5) = 2 Or Cells(i, 6) = 2 Then
            Rows(i).Copy Sheets(2).Cells(Rows.Count, 1).End(xlUp).Offset(1): Rows(i).Delete
    End If: Next
End Sub
понятно, и ничего даже сложного нет...а я пытался в ту программу вставить условие.. а что означает For i ... To 2 Step -1?
Ilya_L вне форума Ответить с цитированием
Старый 21.06.2010, 11:52   #10
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Цитата:
а что означает For i ... To 2 Step -1?
Т.к. мы в цикле по строкам удаляем строки, то для того, чтобы не нарушился счетчик цикла, строки нужно перебирать снизу вверх.
Т.е. от последней заполненной строки до 2-й с шагом минус 1.
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поиск по таблице Kemeron Microsoft Office Access 1 02.06.2010 21:55
Поиск в таблице k1r1ch Общие вопросы Delphi 1 30.06.2009 15:57
Поиск в таблице бд Aндрей БД в Delphi 2 27.04.2009 18:45
поиск в таблице puma Помощь студентам 3 22.04.2008 23:56
Поиск в таблице БД фЁдОр БД в Delphi 13 14.11.2007 10:05