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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.07.2011, 01:49   #1
Evgeny_s
Пользователь
 
Регистрация: 25.07.2011
Сообщений: 10
По умолчанию Найти совпадающие строки в двух листах книги

Есть лист1 ( 32тыс строк) и лист 2 (64 тыс строк)

оба содержат адреса в текстовом виде в 4-х столбцах

Улица
Дом
корпус
квартира

при совпадении адресов надо в левое свободное поле F данной строки в Лист1 записать символ ( например "ЛЬГОТА")

без вашей помощи девченкам из отдела придется это делать ручками!!!
Спасибо
Evgeny_s вне форума Ответить с цитированием
Старый 26.07.2011, 05:39   #2
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

Код:
Sub SetF1()
  Dim c As New Collection, r As Long, s As String
  With Sheets(2)
    For r = 2 To .Cells(Rows.Count, 1).End(xlUp).Row
      s = Join(Array(.Cells(r, 1), .Cells(r, 2), .Cells(r, 3), .Cells(r, 4)))
      c.Add Item:=s, Key:=s
    Next
  End With
  With Sheets(1)
    On Error Resume Next
    For r = 2 To Sheets(1).Cells(Rows.Count, 1).End(xlUp).Row
      s = Join(Array(.Cells(r, 1), .Cells(r, 2), .Cells(r, 3), .Cells(r, 4)))
      c.Add Item:=s, Key:=s
      If Err.Number > 0 Then Sheets(1).Cells(r, 6) = "ËÜÃÎÒÀ": Err.Clear
    Next
  End With
End Sub
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 26.07.2011, 10:53   #3
Evgeny_s
Пользователь
 
Регистрация: 25.07.2011
Сообщений: 10
По умолчанию

А как этим модулем воспользоваться, я профан в макросах!!??
Благодарю.
Evgeny_s вне форума Ответить с цитированием
Старый 26.07.2011, 12:45   #4
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,858
По умолчанию

Цитата:
я профан в макросах!
Раз так, то что ж вы не прикрепили к сообщению пример своего файла,
чтобы получить обратно свой файл со встроенным макросом и кнопкой для его запуска?

Десятки тысяч строк не обязательны - хватит и по 100 строк на каждом листе.
EducatedFool вне форума Ответить с цитированием
Старый 26.07.2011, 12:58   #5
Evgeny_s
Пользователь
 
Регистрация: 25.07.2011
Сообщений: 10
По умолчанию файл для поиска одинаковых адресов

загрузил файл
визуально в нем есть минимум 10 похожих адресов
т.е должна появитья в поле рядом с ними текстовая ( итли числовая метка)


подскажите действия для выполлнения кода в Exele
Спасибо
Shuko_e@mail.ru
Вложения
Тип файла: rar тестфайл адресов.rar (29.5 Кб, 19 просмотров)
Evgeny_s вне форума Ответить с цитированием
Старый 26.07.2011, 13:10   #6
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,858
По умолчанию

Вот файл файл с макросом и результатами его работы:
http://excelvba.ru/XL_Files/Sample__...__15-09-57.zip

Пришлось чуточку переделать макрос Игоря:

Код:
Sub SetF1()
    Dim c As New Collection, r As Long, s As String
    On Error Resume Next
    With Sheets(2)
        For r = 2 To .Cells(Rows.Count, 1).End(xlUp).Row
            s = Join(Array(.Cells(r, 2), .Cells(r, 3), .Cells(r, 4), .Cells(r, 5)))
            c.Add Item:=s, Key:=s
        Next
    End With
    Err.Clear
    With Sheets(1)
        For r = 2 To Sheets(1).Cells(Rows.Count, 1).End(xlUp).Row
            s = Join(Array(.Cells(r, 2), .Cells(r, 3), .Cells(r, 4), .Cells(r, 5)))
            c.Add Item:=s, Key:=s
            If Err.Number > 0 Then Sheets(1).Cells(r, 6) = "+": Err.Clear
        Next
    End With
End Sub
EducatedFool вне форума Ответить с цитированием
Старый 26.07.2011, 15:52   #7
Evgeny_s
Пользователь
 
Регистрация: 25.07.2011
Сообщений: 10
Хорошо Все прошло, Спасибо

Спасибо, мужики.
Здорово выручили.
Всем удачи и долгтх плодотворных.

PS
В качестве бонуса

Имитировать аргазм проще, чем эрекцию
( из наблюдений женатого с 30 летим стажем)
Evgeny_s вне форума Ответить с цитированием
Старый 26.07.2011, 19:58   #8
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,170
По умолчанию

Чтоб оргазм был полнее, можно так код изменить (в 4 раза быстрее наступает ) :
Код:
Sub SetF1()
    Dim oDict As Object, r As Long, s As String, a, b, c
    '    Dim tm As Single: tm = Timer

    Set oDict = CreateObject("Scripting.Dictionary")

    With Sheets(2)
        b = .Range("B2:E" & .Range("A" & .Rows.Count).End(xlUp).Row).Value
    End With

    For r = 1 To UBound(b)
        s = Join(Array(b(r, 1), b(r, 2), b(r, 3), b(r, 4)))
        If Not oDict.Exists(s) Then oDict.Add s, s
    Next

    With Sheets(1)
        a = .Range("B2:E" & .Range("A" & .Rows.Count).End(xlUp).Row).Value
        ReDim c(1 To UBound(a), 1 To 1)

        For r = 1 To UBound(a)
            s = Join(Array(a(r, 1), a(r, 2), a(r, 3), a(r, 4)))
            If oDict.Exists(s) Then c(r, 1) = "+"
        Next
        .[f2].Resize(r).Value = c
    End With

    '    Debug.Print Timer - tm
End Sub
Ещё можно вместо
Код:
        s = Join(Array(b(r, 1), b(r, 2), b(r, 3), b(r, 4)))
писать
Код:
        s = b(r, 1) & "|" & b(r, 2) & "|" & b(r, 3) & "|" & b(r, 4)
но ускорения на таком количестве это не дало. Но можно попробовать на Ваших тысячах (аналогично и с массивом a).
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 26.07.2011, 21:14   #9
Evgeny_s
Пользователь
 
Регистрация: 25.07.2011
Сообщений: 10
Хорошо Спасибо, задача решена

64т и 32т проскочили за пару минут.
Спасибо всем, кто откликнулся и кто не успел..
Все сделали оперативно и грамотно.
так бы все в этом Мире.
Е.
Evgeny_s вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Автоматическая нумерация ячеек на всех листах книги Medvedoc Microsoft Office Excel 9 25.07.2011 15:17
найти и совместить совпадающие значения 8xtndthujd Microsoft Office Excel 5 28.02.2011 15:00
Даны строки S и S0. Удалить из строки S все подстроки, совпадающие с S0 . Если совпадающих подстрок нет, Шпунюся Помощь студентам 1 16.12.2010 21:02
Как обратиться к одному и тому же диапазону на всех листах книги Nata75 Microsoft Office Excel 3 08.11.2010 08:57
в массиве N*N найти совпадающие числа Driver_09 Помощь студентам 4 26.05.2010 22:17