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

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

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

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

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

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

Помогите пожалуйста
Имеется таблица
Ф | И | О | балл1 | балл2 | балл3 | сум |
Имеется такой код
Код:
Private Sub CommandButton3_Click()

Dim Fpath As String, FName As String:
Application.ScreenUpdating = False
FName = Split(TextBox7, "\")(UBound(Split(TextBox7, "\")))
Fpath = Replace(TextBox7, FName, "")
With Sheets("Список абитуриентов")
    With .Range(.Cells(2, 1), .Cells(301, 6))
        .ClearContents
        .FormulaR1C1 = "='" & Fpath & "[" & FName & "]Лист1'!R1C1:R301C6"
        .Value = .Value                            'Значение ячейки
        .Replace 0, "", xlWhole                    'заменять 0 на ""
    End With
End With

Application.ScreenUpdating = False
[G2].FormulaR1C1 = "=SUM(RC[-3]:RC[-1])"
[G2].AutoFill Destination:=[G2:G301]
[G2:G301].Value = [G2:G301].Value
[G2:G301].Replace 0, "", xlWhole

UserForm2.Hide

End Sub
который читает данные с таблицы и заносит эти данные в нашу таблицу. Нужно сделать так, чтобы когда в строке 2,3... в столбцах (балл1,балл2,балл3) находит хотя бы одну 2, то переносит эту строку в другой лист, при этом чтобы каждая строка 2 листа добавлялась, а в 1 листе не оставалось пустых строчек.

Последний раз редактировалось Ilya_L; 18.06.2010 в 11:11.
Ilya_L вне форума Ответить с цитированием
Старый 18.06.2010, 11:23   #2
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Например, так:
Код:
Sub Main()
    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([D1], 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(1): y.EntireRow.Delete
    End If
End Sub
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 18.06.2010, 11:54   #3
Ilya_L
Пользователь
 
Регистрация: 18.06.2010
Сообщений: 78
По умолчанию

Цитата:
Сообщение от SAS888 Посмотреть сообщение
Например, так:
Код:
Sub Main()
    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([D1], 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(1): y.EntireRow.Delete
    End If
End Sub
а там можно сделать, чтобы не с 1 строки начиналось, а со 2, и, чтобы удалялась не вся строка, а только диапазон этой строки?
Ilya_L вне форума Ответить с цитированием
Старый 18.06.2010, 12:02   #4
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Можно.
Говорите, что конкретно нужно.
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 18.06.2010, 12:15   #5
Ilya_L
Пользователь
 
Регистрация: 18.06.2010
Сообщений: 78
По умолчанию

y.EntireRow.Delete
Эта часть кода удаляет всю строку..а мне нужно, чтобы удалились только часть строки, т.е. с 1 по 7 столбцы... Как это можно сделать?
Ilya_L вне форума Ответить с цитированием
Старый 19.06.2010, 06:15   #6
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Удалить, например, со сдвигом вверх, можно так:
Код:
Intersect(y.EntireRow, [A:G]).Delete Shift:=xlUp
Чем шире угол зрения, тем он тупее.

Последний раз редактировалось SAS888; 19.06.2010 в 07:40.
SAS888 вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перенос данных с одного листа на другой при совпадении параметров Nekota Microsoft Office Excel 5 18.02.2010 13:17
Перенос данных из одного листа в другой Светланка85 Microsoft Office Excel 2 07.09.2009 09:18
перенос инфы с одного листа в другой user7789 Microsoft Office Excel 12 18.08.2009 12:03
Перенос данных с одного листа на другой knahrn Microsoft Office Excel 4 12.08.2009 08:42
Перенос данных с одного листа в другой Josser Microsoft Office Excel 0 17.07.2009 10:45