Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.50/74: Рейтинг темы: голосов - 74, средняя оценка - 4.50
1 / 1 / 0
Регистрация: 09.12.2012
Сообщений: 38

Поиск одинаковых чисел в двух столбцах

15.12.2012, 00:52. Показов 15173. Ответов 23
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Excel
Доброго времени суток, форумчане!
Извините что напрягаю, но вот в чем загвоздка:
Необходимо найти одинаковые значения в столбцах к примеру А и B.
Тобиж, выбрать первый элемент столбца - сравнить его со всеми элементами столбца В, после чего взять второй элемент столбца и сравнить опять таки его со всем элементами столбца В. Причем если найдет одинаковые то очистить данные ячейки. Надеюсь на вашу помощь, благодарю
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
15.12.2012, 00:52
Ответы с готовыми решениями:

Поиск двух одинаковых чисел в двумерном массиве
Здравствуйте, уважаемые форумчане. Помогите решить задачу (задачка у нас из разряда гуру): Массив А размерностью 30х7 содержит два (и...

Поиск одинаковых элементов в двумерном массиве как в строках так и в столбцах
Поиск одинаковых элементов в двумерном массиве как в строках так и в столбцах а если эти элементы не совпадают то показывает что матрица...

Макрос поиска одинаковых чисел в столбцах и выделение их цветом
Ув. форумчане, помогите пожалуйста с написанием макроса для Екселя... Есть 2 столбца 13-ти значных номеров штрих кодов, нужен макрос...

23
6998 / 2896 / 555
Регистрация: 19.10.2012
Сообщений: 8,804
15.12.2012, 02:45
Тобишь, загоняем за один цикл элементы одного столбца в словарь, затем одним проходом по второму столбцу проверяем наличие в словаре и делаем дело (какое - не ясно...)
0
1 / 1 / 0
Регистрация: 09.12.2012
Сообщений: 38
15.12.2012, 04:21  [ТС]
Цитата Сообщение от Hugo121 Посмотреть сообщение
Тобишь, загоняем за один цикл элементы одного столбца в словарь, затем одним проходом по второму столбцу проверяем наличие в словаре и делаем дело (какое - не ясно...)
Как это делается я знаю, не знаю как реализовать на данном языке...
А так не проблема, могу даже пошагово тебе объяснить, только напиши
0
 Аватар для Alex77755
11525 / 3812 / 683
Регистрация: 13.02.2009
Сообщений: 11,229
15.12.2012, 04:26
не знаю как реализовать на данном языке
Реализуй на том, который знаешь! Зачем самому себе создавать проблемы?
0
5472 / 1150 / 50
Регистрация: 15.09.2012
Сообщений: 3,576
15.12.2012, 07:29
KochI, а в одном столбце нужно искать одинаковые данные и удалять? Например, в столбце "A" берутся данные из ячейки и ищутся в столбце "B". Если найдены, то просматриваются ещё данные и в столбце "A" и удаляются и в столбце "A".
0
1 / 1 / 0
Регистрация: 09.12.2012
Сообщений: 38
15.12.2012, 14:06  [ТС]
Цитата Сообщение от Скрипт Посмотреть сообщение
KochI, а в одном столбце нужно искать одинаковые данные и удалять? Например, в столбце "A" берутся данные из ячейки и ищутся в столбце "B". Если найдены, то просматриваются ещё данные и в столбце "A" и удаляются и в столбце "A".
Наверное это было бы в идеале, но изначально необходимо что бы брались данные из столбца "А", и искались в столбце "В".
0
6998 / 2896 / 555
Регистрация: 19.10.2012
Сообщений: 8,804
15.12.2012, 22:15
Пока задача не ясна - делать смысла нет.
Я уже выше написал алгоритм - столбец B в словарь, столбец A проверяем по словарю - имеем результат. Что дальше?

Добавлено через 7 минут
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
Sub compare()
    Dim a(), iLastrow As Long, i As Long
 
    With CreateObject("Scripting.Dictionary")
 
        With Sheets(1)
            iLastrow = .Cells(Rows.Count, 2).End(xlUp).Row
            a = Range(.[b1], .Range("B" & iLastrow)).Value
        End With
 
        For i = 1 To UBound(a)
            .Item(a(i, 1)) = 0&
        Next
 
        With Sheets(1)
            iLastrow = .Cells(Rows.Count, 1).End(xlUp).Row
            a = Range(.[a1], .Range("A" & iLastrow)).Value
        End With
 
        For i = 1 To UBound(a)
            If .exists(a(i, 1)) Then MsgBox a(i, 1) & " exists!", vbInformation
        Next
 
    End With
 
End Sub
0
5472 / 1150 / 50
Регистрация: 15.09.2012
Сообщений: 3,576
16.12.2012, 06:46
Hugo121, а вот эта строка как читается? Что на конце строки?
Visual Basic
1
.Item(a(i, 1)) = 0&
0
6998 / 2896 / 555
Регистрация: 19.10.2012
Сообщений: 8,804
16.12.2012, 14:16
Где-то видел, что c 0& работает быстрее, чем с любым другим значением (или с пустой строкой). Поверил
0
5472 / 1150 / 50
Регистрация: 15.09.2012
Сообщений: 3,576
16.12.2012, 14:27
Hugo121, а смысл этой строки какой?
Visual Basic
1
.Item(a(i, 1)) = 0&
Помещаете в словарь ноль, но сначала, используя этот символ &, что делаете с нулём?
0
6998 / 2896 / 555
Регистрация: 19.10.2012
Сообщений: 8,804
16.12.2012, 14:31
Хотя сейчас потестил на скорость серией по 26,71875 - время одинаковое 0&/i

Добавлено через 3 минуты
Погуглил - первая тема:

0 is a number.
Unfortunately, there are several number data types - Integer, Long, Single, Double, Currency, etc.

With no data type identifier after the 0, it is implied to be of the native Integer (the default). Therefore this 0 is expressed as an Integer, which makes it a 16-bit 0.

However, many API functions use Longs and you should not pass an Integer 0 into a Long (that's like putting M&Ms in a cookie jar!)
You should pass a Long 0, which will be a 32-bit 0, as the function requests a 32-bit long long number.
So, therefore you add a &:

An & after a number or a variable means that it is a Long (which is 32-bits).
0& is a 32-bit 0.
x& is a 32-bit variable (this is obsolete because it is better to Dim x As Long rather than Dim x& - the x As Long is clearly a long, and the x& is not obvious)

&H is hexadecimal notation - used when functions are trying to show or set specific bit values - this is used when it would not be efficient to express a value in base 10 notation.

For example: 0011 0000 1000 1101 (16-bit integer) these are often used to set bit flags.
You can use a simple lookup table to convert this to hexadecimal
&H308D (if you're like me, you've memorized it - it's only 16 numbers)

It takes much more time to convert this to decimal.


And you should be able to answer the last question on your own now.

P.S. ByVal 0& is passed to an API parameter declared as Any to specify that you don't want to put anything there.
1
 Аватар для Alex77755
11525 / 3812 / 683
Регистрация: 13.02.2009
Сообщений: 11,229
16.12.2012, 14:32
.Item(a(i, 1)) = 0&
Если нужно удалять и в первом столбце( в данном случае в словаре столбец В), то я бы загнал туда номер строки для последующей привязки и удаления. Сложней если в столбце В окажутся повторения. В таком случае дубликат вызовет ошибку при добавлении в словарь и при проверке дубликаты не удалятся. Я в таком случае добавлял в item второе значение через ":", что бы потом обработать и удалить все значения дубликатов
0
6998 / 2896 / 555
Регистрация: 19.10.2012
Сообщений: 8,804
16.12.2012, 14:43
До того, что именно нужно делать после нахождения соответствия - пока дело не дошло

Добавлено через 8 минут
Можно делать так - при нахождении соответствия сразу помечать на удаление значение в A (ну или сразу удалять, идя циклом снизу), и помечать item в словаре.
Затем вторым циклом идём снизу по столбцу B и удаляем все значения, у которых в Item пометка.
Если данных много, то быстрее заполнить пометками параллельный массив, затем его выгрузить рядом и по пометкам удалить отфильтрованные (любым способом).
Конечно, проще это делать, если данные на разных листах.
Если на одном - я бы просто отбирал нужное в другие массивы, затем их выгружал поверх исходных данных, затирая ненужные "хвосты".
0
5472 / 1150 / 50
Регистрация: 15.09.2012
Сообщений: 3,576
16.12.2012, 14:55
То есть символ & после нуля из сообщения #7 (строка 12) означает, что число ноль переводится в тип данных Long.
0
0 / 0 / 0
Регистрация: 06.02.2013
Сообщений: 15
06.02.2013, 03:33
Доброго времени суток.
Пытаюсь освоить VBA для решения простейших задач в Excel (используя примеры и гугл). Растолкуйте как понимать выражение:
iLastrow = .Cells(Rows.Count, 2).End(xlUp).Row
где iLastrow - имя переменной типа long ; можно назвать другим именем , например, ilr999 ?
Cells(Rows.Count, 2) - координаты ячейки? ; Rows.Count - количество строк?
xlUp - какая-то константа?
в общем не пойму формат выражения iLastrow = .Cells(Rows.Count, 2).End(xlUp).Row
или iLastrow = А . B . C . D
по каким правилам сформировано выражение?
0
5472 / 1150 / 50
Регистрация: 15.09.2012
Сообщений: 3,576
06.02.2013, 08:00
Расшифровка команды:
iLastrow = .Cells(Rows.Count, 2).End(xlUp).Row

Кликните здесь для просмотра всего текста
iLastrow - это переменная. Имя переменной может быть любое за исключением оределённых правил, которые есть в каждом сравочнике по VBA на русском языке;

.Cells - впереди точка означает, что данная строка кода относится к With ... End With;

Rows.Count - количество строк на активном листе. Естественно, что в любой книге количество строк одинаково, если версии книги одинаковые. Под версиями книг я понимаю Excel 2003, Excel 2007;

.Cells(Rows.Count, 2). - полностью это читается: ячейка, находящаяся в последней строке и втором столбце;

End(xlUp) - это команда аналогичная сочетанию клавиш в программе Excel: Ctrl + стрелка вверх;

Row - это номер строки ячейки на Excel-листе, в которую мы переместились с помощью команды End.
1
6998 / 2896 / 555
Регистрация: 19.10.2012
Сообщений: 8,804
06.02.2013, 11:04
В итоге получаем номер строки с последней заполненной ячейкой по второму столбцу.
Но есть свои но, которые в 99,99% случаев можно не учитывать:
1. если заполнена последняя ячейка столбца, то результат будет неверный.
2. если столбец вообще не заполнен, то результат аналогичен п. 1
1
0 / 0 / 0
Регистрация: 06.02.2013
Сообщений: 15
07.02.2013, 00:43
Цитата Сообщение от Скрипт Посмотреть сообщение
Расшифровка команды:
iLastrow = .Cells(Rows.Count, 2).End(xlUp).Row

Кликните здесь для просмотра всего текста
iLastrow - это переменная. Имя переменной может быть любое за исключением оределённых правил, которые есть в каждом сравочнике по VBA на русском языке;

.Cells - впереди точка означает, что данная строка кода относится к With ... End With;

Rows.Count - количество строк на активном листе. Естественно, что в любой книге количество строк одинаково, если версии книги одинаковые. Под версиями книг я понимаю Excel 2003, Excel 2007;

.Cells(Rows.Count, 2). - полностью это читается: ячейка, находящаяся в последней строке и втором столбце;

End(xlUp) - это команда аналогичная сочетанию клавиш в программе Excel: Ctrl + стрелка вверх;

Row - это номер строки ячейки на Excel-листе, в которую мы переместились с помощью команды End.
Т.е. выражение iLastrow = А . B . C . D формируется произвольным образом;
где А . B . C . D - это последовательность команд/функций (внутренних Excel или написанных пользователем в VBA) ? или есть ограничения? Меня интересует общий случай построения подобных выражений (принцип построения).

Подскажите еще про "With Sheets(1)....End With" , в части Sheets(1) ?
0
6998 / 2896 / 555
Регистрация: 19.10.2012
Сообщений: 8,804
07.02.2013, 00:57
Эти А . B . C . D не произвольны, а строго упорядочены:
от ячейки(строка, столбец) идем вверх (или может быть вниз/вправо/влево), от полученной ячейки берём значение строки.

Sheets(1) - лист номер 1. Именно по порядку следования листов в книге. Любой лист - может быть лист макросов или диаграмм!
Worksheets(1) - рабочий лист номер 1.
1
0 / 0 / 0
Регистрация: 06.02.2013
Сообщений: 15
07.02.2013, 01:17
Цитата Сообщение от Hugo121 Посмотреть сообщение
Sheets(1) - лист номер 1. Именно по порядку следования листов в книге. Любой лист - может быть лист макросов или диаграмм!
Worksheets(1) - рабочий лист номер 1.
по порядку следования листов в книге- первым считается крайний слева (соотв. Sheets(1) )? а можно привязываться к имени нужного листа?

про это ("Любой лист - может быть лист макросов или диаграмм!") не понял
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
07.02.2013, 01:17
Помогаю со студенческими работами здесь

Поиск в двух столбцах
Добрый день. Задача такая: есть столбец А с номерами (условно) машин на странице Sheet1. Есть столбец B с такими же данными на странице...

среди чисел k,l,r два одинаковых,а в третье отлично от них.Переменной n присвоить значение числа,отличного от двух одинаковых
среди чисел k,l,r два одинаковых,а в третье отлично от них.Переменной n присвоить значение числа,отличного от двух одинаковых

Поиск .Find по двум полям в двух столбцах
Подскажите, пожалуйста, что нужно добавить в код With Worksheets('B').Range('E1:E650') Set C = .Find('John', LookIn:=xlValues,...

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

Поиск двух одинаковых элементов последовательности
Как найти в последовательности два одинаковых элемента ? К примеру в строке текста найти два одинаковых слова. Желательно на простом...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru