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

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

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

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

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

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

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

23
6997 / 2895 / 555
Регистрация: 19.10.2012
Сообщений: 8,803
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
6997 / 2895 / 555
Регистрация: 19.10.2012
Сообщений: 8,803
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
6997 / 2895 / 555
Регистрация: 19.10.2012
Сообщений: 8,803
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
6997 / 2895 / 555
Регистрация: 19.10.2012
Сообщений: 8,803
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
6997 / 2895 / 555
Регистрация: 19.10.2012
Сообщений: 8,803
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
6997 / 2895 / 555
Регистрация: 19.10.2012
Сообщений: 8,803
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
6997 / 2895 / 555
Регистрация: 19.10.2012
Сообщений: 8,803
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
Ответ Создать тему
Новые блоги и статьи
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru