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

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

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

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

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

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 19.01.2010, 14:14   #1
vwmexanik
 
Регистрация: 19.01.2010
Сообщений: 9
По умолчанию Сравнение данных в 2ух столбцах и копирование строк

Здравствуйте Уважаемые!
Вот решил обратится к Вам на форум за помощью, т.к. сам я не программист, но задачу как-то надо решить:
Вообщем есть таблица с 12ю столбцами ABCDEFGHIJKL. В столбцах A и E содержатся данные вида XX1234567, где XX буквы Кириллицы, ну а 1234567 - 7 цифр соответственно
Возможно ли с помощью макроса, наверное, "заставить" программу произвести сверку значений в столбцах A и E и в случае если значения совпадут, скопировать строку со всеми столбцами на "лист2"?
Единственная загвоздка: в столбце E около 35 тыс значений, в столбце А около 15 тыс
Заранее премного благодарен.
С Уважением.

Последний раз редактировалось vwmexanik; 19.01.2010 в 14:22.
vwmexanik вне форума
Старый 19.01.2010, 14:24   #2
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Цитата:
Возможно ли с помощью макроса...
Конечно, возможно.
От Вас - пример файла.

Можно попробовать обойтись и без макросов - используйте формулы, и расширенный фильтр.

Цитата:
произвести сверку значений в столбцах A и E и в случае если значения совпадут
Правильно я понял, что копировать строку надо только в том случае, если значение в столбце А совпадает со значением в столбце Е той же строки?
Или достаточно, чтобы значение из столбца А просто присутствовало в одной из строк в столбце Е?

Последний раз редактировалось EducatedFool; 19.01.2010 в 14:26.
EducatedFool вне форума
Старый 19.01.2010, 14:29   #3
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

Если не трудно,выложите файлик хотя бы с десятком строк записей

Цитата:
Возможно ли с помощью макроса, наверное, "заставить" программу произвести сверку значений в столбцах A и E и в случае если значения совпадут, скопировать строку со всеми столбцами на "лист2"?
Какую строку по столбцу А или Е скопировать?
Значения уникальные в столбцах,или могут повторяться?

PS.Видите vwmexanik ,а я понял задачу немного по другому
Анализ,обработка данных Недорого

Последний раз редактировалось doober; 19.01.2010 в 14:32.
doober вне форума
Старый 19.01.2010, 14:39   #4
vwmexanik
 
Регистрация: 19.01.2010
Сообщений: 9
По умолчанию

Вот пример:
http://www.sendspace.com/file/ylohnu
Цитата:
Правильно я понял, что копировать строку надо только в том случае, если значение в столбце А совпадает со значением в столбце Е той же строки?
Или достаточно, чтобы значение из столбца А просто присутствовало в одной из строк в столбце Е?
Вот как раз второе...
Вот просто что это: Столбцы BCDEFGHIJKL это данные вытянутые и некой БД. У нас есть номера (столбец А) которые надо сверить с данными из БД, и при совпадении номеров скопировать строку с данными из БД, и совпавшим номеров, т.е. все 12 столбцов
Цитата:
Какую строку по столбцу А или Е скопировать?
По столбцу E наверное, строки в столбцах BCDEFGHIJKL не должны перепутаться

Последний раз редактировалось vwmexanik; 19.01.2010 в 14:41.
vwmexanik вне форума
Старый 19.01.2010, 15:23   #5
Pretorianec79
Новичок
Джуниор
 
Регистрация: 19.01.2010
Сообщений: 3
По умолчанию

вот простой макрос, который решает твою задачу, можно его еще модифицировать и навернуть при желании
Вложения
Тип файла: rar Пример.rar (10.8 Кб, 152 просмотров)
Pretorianec79 вне форума
Старый 19.01.2010, 15:36   #6
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

Код:
 Sub Sverka()
 Application.ScreenUpdating = False
 
Dim r As Range
Dim f
Dim n, l, k As Long
k=0
 f = Sheets("Лист1").UsedRange.Columns(1).Value
 For n = 1 To UBound(f)
  If f(n, 1) <> "" Then
 Set r = Sheets("Лист1").UsedRange.Columns(5).Find(f(n, 1))
 If Not r Is Nothing Then
 k = k + 1
 l = r.Row
 Sheets("Лист1").Range("A" & l & ":L" & l).Copy Sheets("Лист2").Cells(k, 1)
 End If: End If: Next
  Application.ScreenUpdating = True
End Sub

Я думаю при 30 тыс записей этот будет намного шустрее
Анализ,обработка данных Недорого
doober вне форума
Старый 19.01.2010, 15:46   #7
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Вот ещё более быстрый вариант:

Код:
Sub test()
    On Error Resume Next: Application.ScreenUpdating = False
    Dim sh2 As Worksheet: Set sh2 = Worksheets(2)
    sh2.UsedRange.Clear ' очистка листа от прежних данных
    Dim cell As Range, ra As Range, ForCopy As Range
    
    ' перебираем все заполненные ячейки в столбце Е
    Set ra = Range([e1], Range("e" & Rows.Count).End(xlUp)).SpecialCells(xlCellTypeConstants)
    
    For Each cell In ra.Cells
        If Not Range("a:a").Find(cell) Is Nothing Then ' если аналогичный номер есть в столбце А
            If ForCopy Is Nothing Then Set ForCopy = cell Else Set ForCopy = Union(ForCopy, cell)
            If ForCopy.Cells.Count > 1000 Then
                ForCopy.EntireRow.Copy sh2.Range("a" & sh2.Rows.Count).End(xlUp).Offset(1)
                Set ForCopy = Nothing
            End If
        End If
    Next cell
    ForCopy.EntireRow.Copy sh2.Range("a" & sh2.Rows.Count).End(xlUp).Offset(1)
    sh2.UsedRange.EntireColumn.AutoFit: sh2.Rows(1).Delete
    sh2.Activate
End Sub
Пример файла:

EducatedFool вне форума
Старый 19.01.2010, 15:54   #8
vwmexanik
 
Регистрация: 19.01.2010
Сообщений: 9
По умолчанию

doober
EducatedFool
Работает! Даже и не знаю как Вас благодарить! Просто СПАСИБО!!!
Сегодня вечером или завтра опробую на полном списке и доложу.
Еще раз СПАСИБО!

Последний раз редактировалось vwmexanik; 19.01.2010 в 15:58.
vwmexanik вне форума
Старый 19.01.2010, 23:46   #9
xamillion
Форумчанин
 
Аватар для xamillion
 
Регистрация: 30.09.2008
Сообщений: 138
По умолчанию

ребят!!? а может посоветуете гибкое хорошее готовое решение с подобной возможностью или может сами когда уже аписали что-то подобное наверняка, где можно выбирать признак по которому производится стыковка и стыкуемые столбцы (в буквенном и цифровом выражении - или указать какие по счету столбцы или по их буквенным обозначениям)... перекачал более 2-х десятков программ, надстроек и макросов - и ни один не отличался удобством...
xamillion вне форума
Старый 20.01.2010, 00:08   #10
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

Не знаю,что и сказать.
Я привык к цифровому обозначению,мне так удобно.
В основном мне приходиться выводить данные из DataSet ов в файлы Excel.
Анализ,обработка данных Недорого
doober вне форума
Закрытая тема


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сравнение строк Rivendell Microsoft Office Excel 8 18.12.2009 10:29
Сравнение листов в книге, и копирование значений Josser Microsoft Office Excel 10 22.07.2009 08:26
Сопоставление данных в двух столбцах plasticman Microsoft Office Excel 4 12.03.2009 17:45
сравнение данных в двух столбцах в Excel 2003 grinders Microsoft Office Excel 4 25.11.2008 16:58
[С++] Сортировка 2ух строк двумерного массива. ReDev1L Помощь студентам 1 19.10.2008 03:45