0 / 0 / 0
Регистрация: 18.07.2015
Сообщений: 18

Сравнения двух книг и запись уникальных на новую

07.05.2016, 19:01. Показов 1755. Ответов 30
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Не пинайте если вопрос таков был я очень долго искал почти месяц не нашел.

есть две книги книга1.xlsx и книга2.xlsx в которых сдержаться данные в этих книгах нужно сравнит данные и вывести уникальные.

В книгах такие данные. первая ячейка A1 содержит номер телефона, в ячейке B1 еще один номер, в ячейке С1 секунды. В книге2 такие же данные, но секунды могут быт на 1 больше или меньше. Нужно провести поиск и тоест сверит данные с книги 1 и если в книге два есть ети данные пропустит, а если нет сделать поиск заного но уже со второй строки тоест из a2 b2 c2.

Мои действия:

В новой книге сделал сцепку данных с книги A1 B1 C1 а рядом данные с книги 2 также. и написал поиско3(A1;b1:b300000;0) все работает но так как данныз 3000000 то данные расчитываются почти по 6 часов это очень медленно к меня комп I7 8 ядер. 6 г оперативка.


Прилагая книгу в которой все готово формулу не растягиваю до конца в прилагаемом файле иначи у вас будет открыват долго если не зависит.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
07.05.2016, 19:01
Ответы с готовыми решениями:

Определить методы для сравнения двух книг по указанному параметру
Определить методы для сравнения двух книг по указанному параметру. Реализовать поиск книги по коду. Обязательно реализовать проверку...

Сложное условие сравнения уникальных и неуникальных значений
Сложное условие сравнения уникальных и неуникальных значений 2-х таблиц Граждане друзья! Очень прошу помощи. Начальник дал важное и...

запись уникальных строк в ListBox
задача, нужно динамически перезаписывать ЛистБокс значениями из поля бд отсекая все повторения(уникальность записей) ... position...

30
6998 / 2896 / 555
Регистрация: 19.10.2012
Сообщений: 8,804
07.05.2016, 23:39
Студворк — интернет-сервис помощи студентам
На больших реальных файлах посмотрите чтоб в массиве не оказалось лишних столбцов, а то может памяти не хватить. Но можно переписать, впрочем я уже говорил...

Добавлено через 36 секунд
Цитата Сообщение от Horun1992 Посмотреть сообщение
тоест не важно в каком row находится данные они по всех проходит во время сверки?
Да, не важно.
0
0 / 0 / 0
Регистрация: 18.07.2015
Сообщений: 18
07.05.2016, 23:52  [ТС]
Ну в реальных файлах a num b num и sec находятся по столбцам K L M а до них и после них несколько столбцов. Ну это не критично я могу удалит все столбцы оставив только три если другие столбцы будут мешать) а они будут мешать значит?)
0
6998 / 2896 / 555
Регистрация: 19.10.2012
Сообщений: 8,804
07.05.2016, 23:54
Будут мешать - потому что я писал код для именно таких примеров, как Вы дали!
Можете не удалять столбцы - но тогда корректируйте код.
0
0 / 0 / 0
Регистрация: 18.07.2015
Сообщений: 18
07.05.2016, 23:59  [ТС]
Спасибо большое Вы мастер)))

в коде вроде только начала имени строк надо менят вот:

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
Sub tt()
    Dim a, b, i&, t$, tt$, k
    With CreateObject("scripting.dictionary"): .comparemode = 1
        a = Workbooks("Книга1").Sheets(1).[K1].CurrentRegion.Value
        For i = 2 To UBound(a)
            .Item(a(i, 1) & "|" & a(i, 2) & "|" & a(i, 3)) = i
        Next
        b = Workbooks("Книга2").Sheets(1).[K1].CurrentRegion.Value
        For i = 2 To UBound(b)
            Do
                tt = b(i, 1) & "|" & b(i, 2) & "|"
                t = tt & b(i, 3)
                If .exists(t) Then .Remove (t): Exit Do
                t = tt & (b(i, 3) - 1)
                If .exists(t) Then .Remove (t): Exit Do
                t = tt & (b(i, 3) + 1)
                If .exists(t) Then .Remove (t)
                Exit Do
            Loop
        Next
 
        ReDim b(1 To .Count + 1, 1 To 3): i = 1
        b(1, 1) = "A num": b(1, 2) = "B num": b(1, 3) = "sec"
        For Each k In .items
            i = i + 1
            b(i, 1) = a(k, 1): b(i, 2) = a(k, 2): b(i, 3) = a(k, 3)
        Next
    End With
 
    With Workbooks.Add(1).Sheets(1).[a1].Resize(i, 3)
        .Columns(1).Resize(, 2).NumberFormat = "0"
        .Value = b
        .Columns.AutoFit
    End With
End Sub
Спасибо еще раз)
0
6998 / 2896 / 555
Регистрация: 19.10.2012
Сообщений: 8,804
08.05.2016, 00:05
Нет. Если перед столбцом K ещё будут данные - то они тоже попадут в currentregion, и значит в первом столбце массива будет совсем не то, что в столбце K!
Если данные будут правее - не помешает, но зря съест память. На больших файлах её кстати может не хватить.
Тогда нужно переписать код - например использовать как в коде при выгрузке .Columns(x).Resize(, y)
0
0 / 0 / 0
Регистрация: 18.07.2015
Сообщений: 18
08.05.2016, 00:09  [ТС]
ой, ну эти совсем не для моего мозга)) Я тогда этот код переписать не смогу вообще) мне легче будет удалит остальные данные оставив все на стольбце A B C
0
6998 / 2896 / 555
Регистрация: 19.10.2012
Сообщений: 8,804
08.05.2016, 00:10
Цитата Сообщение от Horun1992 Посмотреть сообщение
все на стольбце A B C
- только в одном файле! В общем делайте точно как сделали примеры - сами такие сделали...
0
0 / 0 / 0
Регистрация: 18.07.2015
Сообщений: 18
08.05.2016, 00:16  [ТС]
Хорошо в любом случае спасибо)
0
6998 / 2896 / 555
Регистрация: 19.10.2012
Сообщений: 8,804
08.05.2016, 00:30
Лучший ответ Сообщение было отмечено Horun1992 как решение

Решение

Такой вариант может будет чуть быстрее, а может и нет.
Но тут можно легко подогнать массив под нужное место CurrentRegion'а
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
Option Explicit
 
Sub tt()
    Dim a, b, i&, t$, tt$, k
    With CreateObject("scripting.dictionary"): .comparemode = 1
 
        a = Workbooks("Книга1").Sheets(1).[a1].CurrentRegion.Columns(1).Resize(, 3).Value    'тут можно скорректировать с какого столбца начинать массив
        For i = 2 To UBound(a)    'собираем словарь
            .Item(a(i, 1) & "|" & a(i, 2) & "|" & a(i, 3)) = i
        Next
 
        b = Workbooks("Книга2").Sheets(1).[E1].CurrentRegion.Columns(1).Resize(, 3).Value    'тут можно скорректировать с какого столбца начинать массив
        For i = 2 To UBound(b)    'выкидываем из словаря повторы точные или с коррекцией +/-1
            tt = b(i, 1) & "|" & b(i, 2) & "|"
            Select Case True
                Case .exists(tt & b(i, 3)): .Remove (tt & b(i, 3))
                Case .exists(tt & (b(i, 3) - 1)): .Remove (tt & b(i, 3) - 1)
                Case .exists(tt & (b(i, 3) + 1)): .Remove (tt & b(i, 3) + 1)
            End Select
        Next
 
        ReDim b(1 To .Count + 1, 1 To 3): i = 1
        b(1, 1) = "A num": b(1, 2) = "B num": b(1, 3) = "sec"
        For Each k In .items    'перебор оставшихся в словаре номеров строк
            i = i + 1
            b(i, 1) = a(k, 1): b(i, 2) = a(k, 2): b(i, 3) = a(k, 3)
        Next
    End With
 
    With Workbooks.Add(1).Sheets(1).[a1].Resize(i, 3)
        .Columns(1).Resize(, 2).NumberFormat = "0"
        .Value = b
        .Columns.AutoFit
    End With
End Sub
1
0 / 0 / 0
Регистрация: 18.07.2015
Сообщений: 18
08.05.2016, 00:44  [ТС]
.Resize(, 3) как я понял это для того чтобы от выбраного столбца только до 3 в массив брал?) Вы золотой человек спасибо большое)
0
6998 / 2896 / 555
Регистрация: 19.10.2012
Сообщений: 8,804
08.05.2016, 00:55
.Resize(, 3) - это от всего столбца "переразметиться" на три правее, т.е. указанный и ещё два.
Но это относительно не столбца листа, а столбца уже полученного диапазона CurrentRegion.
Я часто использую такое - на паузе смотрю что выделится при например [E1].CurrentRegion.Select - сразу можно определить что лишнее, с какого столбца начинаются нужные данные.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
08.05.2016, 00:55

Создание двух уникальных колонок
У меня есть таблица в ней хранятся координаты X и Y мне нужно запретить добавление если X и Y совпадают с уже существующей записью, есть ли...

Поиск уникальных значений в двух массивах
Доброе время суток. Задача. Есть 2 массива 1,2,3,4,5 4,5,6,7,8 Нужно сравнить 1 массив с 2 и вывести уникальные. Скажу...

Вывод уникальных данных с двух таблиц
Всем добрый день. Есть две таблицы с одинаковыми полями - Date (datetime), LagerID (int) и FilID(int) Необходимо вывести с этих таблиц...

Отбор уникальных данных из двух диапазонов
Доброе времени суток, Господа! Помогите мне автоматизировать свод базы данных, для месячной инвентаризации.Приложил маленький пример. В...

Поиск уникальных элементов в массиве и запись в другой массив
есть код но он не работает, полностью копирует массив А в массив В что я не так сделал? #include <stdio.h> #include...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
31
Ответ Создать тему
Опции темы

Новые блоги и статьи
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ Основная суть и тезисы по измерениям: 0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема. Объект не может перемещаться в 0D. 1D (Первое измерение):. . .
[EasyBuilder Pro] Памятка по разработке для панелей Weintek
ФедосеевПавел 26.08.2026
Памятка по разработке для панелей Weintek ВВЕДЕНИЕ Ранее, при реализации проектов основное внимание уделял разработке управляющей программы для контроллера, а панели оператора доставалось время. . .
Модель по догадкам
anaschu 25.08.2026
Прошло две недели. Я уже рассказывал, как разговаривал с сотрудниками у сортировки и как понял, что главная ветка — не про приёмку, а про отбор. Но тогда я думал, что понял механику. На этой неделе я. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru