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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.09.2011, 22:17   #1
Bromista
 
Регистрация: 17.04.2009
Сообщений: 8
По умолчанию Выборка из таблицы и копирование строк

Добрый день. Прошу помощи, опыта в VB у меня почти нет.
Задача: есть таблица, надо пройти по ячейкам и если они равны некому эталлону, то всю строку скопировать на другой воркшит.
Дополнительно: возможно проблема в конструкции копирования, я ее подсмотрел в одном примере в Интернете.
Этот скрипт пробегает по всем ячейкам таблицы размером 10х100, в ячейке (1, 12) есть некоторое значение, с которым сравнивается содержимое каждой проверяемой ячейки, если оно совпадает, то всю строку, в которой находится эта ячейка, надо перекопировать на новый воркшит Result. Таким образом, на новом листе создастся новая таблица, в которой будут только необходимые нам строки.

Sub macros1()
Dim i As Integer
Dim j As Integer
Dim k As Integer
On Error Resume Next
Set NewSheet = Worksheets.Add
NewSheet.Name = "Result"
k = 1
For i = 1 To 100
For j = 1 To 10
Worksheets("Sheet1").Activate
If Worksheets("Sheet1").Cell(i, j) = Worksheets("Sheet1").Cell(1, 12) Then
Worksheets("Sheet1").Rows(i, i).Copy Worksheets("Result").Rows(k, k)
k = k + 1
End If
Next j
Next i
Worksheets("Result").Activate
End Sub

Новый лист создается, ничего не копируется. Пробовал менять процедуру копирования после then на простое выделение диапазона ячеек на новом листе - срабатывало, но срабатывало независимо от истинности условия в if. То есть конструкция if вроде как не работает. конкретной таблицы нет, сам накидал 6 строк и 4 столбца и поместил "1" в ячейку (1, 12) просто для проверки.
TNX a lot
Bromista вне форума Ответить с цитированием
Старый 27.09.2011, 22:40   #2
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

А где пример?
Я уже вроде вчера этот вопрос видел - всё просто, но код на 90% неправильный.
Но делать пример совершенно не хочется.
И ещё - скажите, вам нужно только данные скопировать, или форматы и формулы тоже? (ну формулы то вряд ли...)

P.S. Ладно, не 90%...
Мне лучше так показалось.
Хотя я бы делал иначе. если нужны только данные.
Код:
Sub macros1()
    Dim i As Integer
    Dim j As Integer
    Dim k As Integer
    On Error Resume Next
    Set NewSheet = Worksheets.Add
    With Worksheets("Sheet1")
        k = 1
        For i = 1 To 100
            For j = 1 To 10
                If .Cells(i, j) = .Cells(1, 12) Then
                    .Rows(i).Copy NewSheet.Rows(k)
                    k = k + 1
                    Exit For
                End If
            Next j
        Next i
    End With
    NewSheet.Name = "Result"
    Worksheets("Result").Activate
End Sub
Тоже самое на массивах в 5 раз быстрее. Было бы строк в 5 раз больше - было бы вероятно в 25 раз быстрее...
Код:
Sub macros2()
'Dim tm: tm = Timer
    Dim i&, ii&
    Dim j&
    Dim k&
    Dim a, b
    Dim temp
    On Error Resume Next
    Set NewSheet = Worksheets.Add
    With Worksheets("Sheet1")
        temp = .Cells(1, 12)
        a = .[a1:j100].Value
        ReDim b(1 To 100, 1 To 10)
        For i = 1 To 100
            For j = 1 To 10
                If a(i, j) = temp Then
                    k = k + 1
                    For ii = 1 To 10: b(k, ii) = a(i, ii): Next
                    Exit For
                End If
            Next j
        Next i
    End With
    NewSheet.Name = "Result"
    NewSheet.[a1:j10].Resize(k) = b
    Worksheets("Result").Activate
    '    Debug.Print Timer - tm
End Sub
webmoney: E265281470651 Z422237915069 R418926282008

Последний раз редактировалось Hugo121; 27.09.2011 в 23:06.
Hugo121 вне форума Ответить с цитированием
Старый 30.09.2011, 10:56   #3
v0r0nika
 
Регистрация: 30.09.2011
Сообщений: 5
По умолчанию

Цитата:
Сообщение от Hugo121 Посмотреть сообщение
А где пример?
Я уже вроде вчера этот вопрос видел - всё просто, но код на 90% неправильный.
Но делать пример совершенно не хочется.
И ещё - скажите, вам нужно только данные скопировать, или форматы и формулы тоже? (ну формулы то вряд ли...)

[/CODE]
а разрешите "вклиниться" и немного модифицировать суть задачи (поскольку основная идея мне подходит).
Есть лист с произвольным количеством строк (неизвестно, сколько их будет заведено первоначально). Из него нужно сформировать новый лист для дальнейшей выгрузки в txt (и загрузке в систему), причем формирование происходит по следующему сценарию: некоторые ячейки итогового листа - изначально константы и таковыми должны оставаться (оранжевые), остальные формируются из исходного по условиям: если заполнена ячейка L1, то мы копируем в соответствующие ячейки нового листа значения совпадающих столбцов (таблицы исходного и целевого листов совпадают только по некоторым столбцам). Если заполнена ячейка M1 - то добавляем строчку, аналогично заполняя соответствующие аналитики. И так-для 4-х последних столбцов. То есть если в 1 строке исходного файла заполнены все 4 последние ячейки, то в итоговом листе должно появиться 4 новые строки.

Сейчас в примере формируется 4 отдельных листа по условиям на каждую из ячеек, из которых планировалось потом собирать один общий, но хотелось бы изначально оптимизировать..
Вложения
Тип файла: rar Пример.rar (27.1 Кб, 95 просмотров)
v0r0nika вне форума Ответить с цитированием
Старый 01.10.2011, 18:00   #4
Bromista
 
Регистрация: 17.04.2009
Сообщений: 8
По умолчанию

Спасибо большое за помощь, все работает.
TNX a lot
Bromista вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Копирование строк таблицы по условию одной ячейки из Лист 1 в Лист 2 Людвиг Microsoft Office Excel 5 25.10.2014 11:46
Копирование строк из одной таблицы в другую база данных paradox в делфи igi3 Помощь студентам 1 20.06.2011 08:39
Выборка строк с определенной меткой из одной таблицы и автоматический перенос в новую таблицу. dk01 Microsoft Office Excel 28 30.01.2011 18:16
Выборка выборка с таблицы с отношением многие-ко-многим 8alig8 БД в Delphi 2 24.06.2010 12:21
Выборка строк из таблицы по значению TDBLookupComboBox Gringo БД в Delphi 4 28.10.2008 05:45