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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.10.2012, 15:11   #11
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

Код:
with CreateObject("Scripting.Dictionary")
    for each Rw in ИсходныеДанные.Rows
      .Items.Add Rw.Номер & " " &Rw.Дата,  Rw.Row
    next Rw
    for each Rw in НовыеДанные.Rows
      if .exists(Rw.Номер  & " " &Rw.Дата) then
        MsgBox "Есть такая буква в этом слове"
      else
        .Items.Add  Rw.Номер  & " " &Rw.Дата, Rw.Row
        ' и добавляем в в список актов
      endif
    next Rw
end with
вот один из вариантов - если его доделать к своим данным
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Старый 03.10.2012, 16:19   #12
Робин
Форумчанин
 
Регистрация: 03.04.2010
Сообщений: 118
По умолчанию

Туплю нереально
Че то не получается внедрить ваш код.
Например, не знаю что означают словосочетания ИсходныеДанные и НовыеДанные.
Вложения
Тип файла: rar АКТ123.rar (14.7 Кб, 12 просмотров)
Робин вне форума Ответить с цитированием
Старый 03.10.2012, 16:28   #13
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

Цитата:
Например, не знаю что означают словосочетания ИсходныеДанные и НовыеДанные.
Это объекты класса Range указывающие на область с вашими данными (мне немного лень разбираться с вашим примером). Этот код, как в анекдоте, требует обработки "напильником" для получения результата)
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Старый 03.10.2012, 18:25   #14
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,170
По умолчанию

Думаю, словарь тут лишнее - ведь по задаче нужно найти одно совпадение.
И поэтому возможно/иногда/редко не придётся перебирать весь объём данных
Ну ладно - зато поиск в словаре быстрее, чем сравнение текущего значения с каждым элементом массива.
Вообще нужно потестить на сотне тысяч значений... Приду домой - проверю
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 03.10.2012, 18:26   #15
Робин
Форумчанин
 
Регистрация: 03.04.2010
Сообщений: 118
По умолчанию

А если я очень вас попрошу помочь кровь из носу как надо. Плиз!
Потому что в макросах я не силен, а класы для меня темный лес.
Робин вне форума Ответить с цитированием
Старый 03.10.2012, 23:01   #16
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,170
По умолчанию

Потестил на файле http://www.programmersforum.ru/attac...5&d=1349266760
Размножил данные на 100к строк, в нижней строке поместил совпадение (на первом листе в H21 дату).
Код:
Sub tt()
    Dim tm!
    Dim a(), i&
    a = Sheets(2).[a1].CurrentRegion.Value

    tm = Timer
    With CreateObject("Scripting.Dictionary")
        For i = 1 To UBound(a): .Item(a(i, 1) & "|" & a(i, 5)) = 0&: Next
        If .exists([c21].Value & "|" & [h21].Value) Then Debug.Print Timer - tm
    End With

    tm = Timer
    t = [c21].Value & "|" & [h21].Value
    For i = 1 To UBound(a)
        If a(i, 1) & "|" & a(i, 5) = t Then Debug.Print i, Timer - tm
    Next
End Sub
Результат:
2,34375
103830 0,40625

Словарь тут не нужен.

P.S. А по практической задаче - там не могут быть повторы. Т.к. нельзя зайти дважды в одну реку
Это если брать дату как она есть в файле.
С другой стороны - если брать только день без времени - а разве не может быть два акта на одну машину? Думаю вполне может быть, на разные ремонты.
Давайте продумайте и сформулируйте предельно точно задачу.
Но я скорее всего делать не буду - некогда.
webmoney: E265281470651 Z422237915069 R418926282008

Последний раз редактировалось Hugo121; 03.10.2012 в 23:08.
Hugo121 вне форума Ответить с цитированием
Старый 04.10.2012, 00:16   #17
Робин
Форумчанин
 
Регистрация: 03.04.2010
Сообщений: 118
По умолчанию

Чо т я савсем запутался
Hugo121, например, как вы тестили мой файл если он не работает?
И вот сейчас только заметил, в спешке я вернул неправильные названиялистов.
И далее ,что должен делать приведенный вами макрос? У меня он, почему то ничего не делает.
А что касается пределно точной формулировки вопроса,то суть не в том, сколько может быть актов. А соль вся в том, что иногда бывает, ошибочно нажимаешь одну и ту же кнопку не один, а два раза. А надо только один.
Так вот, чтоб при втором (ошибочном) нажатии кнопки, одна и та же инфа,повторно в список не попала.
Вот и все.

Да и еще в голову пришло.
На практике два абсолюьно одинаковых акта не бывает.
Но допустим, что теоретически все даные каких то двух актов идентичны. Но их номера будут разными, в любом случае. Иначе это будет не два разных акта, а два экземпляра одного и того же акта.

Последний раз редактировалось Робин; 04.10.2012 в 01:00.
Робин вне форума Ответить с цитированием
Старый 04.10.2012, 09:18   #18
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,170
По умолчанию

Ваш файл работает. Да от него ничего и не зависит - код ведь другой
А то, что Вы не видите результата - это говорит о том, что Вы не знаете, куда смотреть!
Да и вообще - это пока теория, чистая наука
Практически Вы так пока и не сказали, что именно сравнивать и что вообще нужно делать.
Хотя весь код уже практически есть - только его нужно пересобрать в нужном виде
Ну а если сравнивать по номерам, которые всегда разные - то тем более.
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 04.10.2012, 13:13   #19
Робин
Форумчанин
 
Регистрация: 03.04.2010
Сообщений: 118
По умолчанию

Добрый день
Вот немного изменил и сделал пример понагляднее. Что куда копировать выделил одинаковым цветом.
А сверять нужно номер акта (см. в ячейке F7 на листе Акт)и ищем его в столбце А на листе Реестр.
А также дату (см. в ячейке Е8 на листе Акт) и ищем ее в столбце В на листе Реестр.
Если такие даные отсутствуют в реестре, то макрос записывает всю строку в Реестр.
А если такие номер и дата в Реестре уже есть, макрос сообщает об этом и дает отказ от записи.
Коль скоро передыдущий макрос не играет роли, я его не привожу.
Сильно извиняюсь за предылуший сумбур с моей стороны.
Вложения
Тип файла: rar Акт.rar (14.9 Кб, 12 просмотров)
Робин вне форума Ответить с цитированием
Старый 04.10.2012, 13:19   #20
Робин
Форумчанин
 
Регистрация: 03.04.2010
Сообщений: 118
По умолчанию

Еще раз извиняюсь.
Не понятно как в архив попал файл с 2007 экселя, смотрите пожалуйста файл 2003-го.
Робин вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Макрос переноса данных при пересечении временных диапазонов strannick Microsoft Office Excel 2 23.09.2012 12:08
Макрос переноса данных TbIL Microsoft Office Excel 3 15.02.2012 21:34
Макрос переноса данных. madex Microsoft Office Excel 13 18.12.2011 16:44
макрос для переноса введенных данных vostok Microsoft Office Excel 2 27.11.2010 11:16
Макрос для переноса данных в виде таблицы из Excel в Word Jevgeni85 Microsoft Office Excel 2 25.08.2010 16:52