Последнее время ексель глючит особенно когда строк много. Раньше делал условное форматирование и потом фильтровал по цвету и копировал нужное но последнее время, получается как то фигово, то удалении одинаковых удаляет всё, то при вырезании нужных, вырезается не всё. А в файлах с которыми приходится работать строк бывает несколько десятков тысяч.. поэтому с фильтрами все безбожно тормозит. Пробовал на разных компах в разных версиях (2007-2013).
В итоге помогите с формулой ну или макросом:
чтобы при сравнении 2-х столбцов, совпадающие или наоборот не совпадающие (бывает что нужно или то или другое )копировал в другую книгу или на другой лист.( ну или хотябы в другой столбец чтобы можно было вырезать-скопировать куда нужно)
приложу образец данных просто для примера.
P.S. если можно, и еще вариант с копированием всей строки с совпадающим столбцом.
Последнее время ексель глючит особенно когда строк много. Раньше делал условное форматирование и потом фильтровал по цвету и копировал нужное но последнее время, получается как то фигово, то удалении одинаковых удаляет всё, то при вырезании нужных, вырезается не всё. А в файлах с которыми приходится работать строк бывает несколько десятков тысяч.. поэтому с фильтрами все безбожно тормозит. Пробовал на разных компах в разных версиях (2007-2013).
В итоге помогите с формулой ну или макросом:
чтобы при сравнении 2-х столбцов, совпадающие или наоборот не совпадающие (бывает что нужно или то или другое )копировал в другую книгу или на другой лист.( ну или хотябы в другой столбец чтобы можно было вырезать-скопировать куда нужно)
приложу образец данных просто для примера.
P.S. если можно, и еще вариант с копированием всей строки с совпадающим столбцом.Sirnon
Sub Макрос1() Dim d1 As Object, opt As Boolean, i&, m1, m2, df As Object, d2 As Object Set d1 = CreateObject("scripting.dictionary") Set d2 = CreateObject("scripting.dictionary") Set df = CreateObject("scripting.dictionary") m1 = [a1:a10].Value m2 = [b1:b10].Value opt = MsgBox("повторяющиеся?", vbYesNo) = vbYes For i = 1 To UBound(m1) If Not d1.exists(m1(i, 1)) Then d1.Add m1(i, 1), i Next i For i = 1 To UBound(m2) If Not d2.exists(m2(i, 1)) Then d2.Add m2(i, 1), i Next
If opt Then For i = 1 To UBound(m2) If d1.exists(m2(i, 1)) Then If Not df.exists(m2(i, 1)) Then df.Add m2(i, 1), i Next Else For i = 1 To UBound(m2) If Not d1.exists(m2(i, 1)) Then If Not df.exists(m2(i, 1)) Then df.Add m2(i, 1), i Next For i = 1 To UBound(m1) If Not d2.exists(m1(i, 1)) Then If Not df.exists(m1(i, 1)) Then df.Add m1(i, 1), i Next End If m1 = df.keys: ReDim m2(0 To UBound(m1), 1 To 1) For i = 0 To UBound(m2): m2(i, 1) = m1(i): Next Sheets.Add [a1] = IIf(opt, "повторяющиеся", "НЕ повторяющиеся") [a2].Resize(UBound(m2) + 1, 1) = m2 End Sub
[/vba]
Или даже лучше так:
[vba]
Код
Sub Макрос1() Dim d1 As Object, opt As Boolean, i&, m1, m2, df As Object, d2 As Object, m(1 To 2), ST% Set d1 = CreateObject("scripting.dictionary") Set d2 = CreateObject("scripting.dictionary") Set df = CreateObject("scripting.dictionary") m1 = [a1:a10].Value m2 = [b1:C10].Value opt = MsgBox("повторяющиеся?", vbYesNo) = vbYes If opt Then ST = InputBox("COLUMN", , 2) For i = 1 To UBound(m1) If Not d1.exists(m1(i, 1)) Then d1.Add m1(i, 1), i Next i For i = 1 To UBound(m2) If Not d2.exists(m2(i, 1)) Then d2.Add m2(i, 1), i Next
If opt Then For i = 1 To UBound(m2) If d1.exists(m2(i, 1)) Then m(1) = m2(i, 1): m(2) = m2(i, ST) If Not df.exists(m2(i, 1)) Then df.Add m2(i, 1), m End If Next Else For i = 1 To UBound(m2) If Not d1.exists(m2(i, 1)) Then If Not df.exists(m2(i, 1)) Then m(1) = m2(i, 1): m(2) = i: df.Add m2(i, 1), m Next For i = 1 To UBound(m1) If Not d2.exists(m1(i, 1)) Then If Not df.exists(m1(i, 1)) Then m(1) = i: m(2) = m1(i, 1): df.Add m1(i, 1), m Next End If m1 = df.ITEMS: ReDim m2(0 To UBound(m1), 1 To 2) For i = 0 To UBound(m2): m2(i, 1) = m1(i)(1): m2(i, 2) = m1(i)(2): Next Sheets.Add [a1:B1] = IIf(opt, "повторяющиеся", "НЕ повторяющиеся") [a2].Resize(UBound(m2) + 1, 2) = m2 End Sub
[/vba]
Во втором варианте можно выбирать номер столбца для вывода информации.(можно использовать как ВПР) и сделал разделение по столбцам несовпадающих данных.
Так:
[vba]
Код
Sub Макрос1() Dim d1 As Object, opt As Boolean, i&, m1, m2, df As Object, d2 As Object Set d1 = CreateObject("scripting.dictionary") Set d2 = CreateObject("scripting.dictionary") Set df = CreateObject("scripting.dictionary") m1 = [a1:a10].Value m2 = [b1:b10].Value opt = MsgBox("повторяющиеся?", vbYesNo) = vbYes For i = 1 To UBound(m1) If Not d1.exists(m1(i, 1)) Then d1.Add m1(i, 1), i Next i For i = 1 To UBound(m2) If Not d2.exists(m2(i, 1)) Then d2.Add m2(i, 1), i Next
If opt Then For i = 1 To UBound(m2) If d1.exists(m2(i, 1)) Then If Not df.exists(m2(i, 1)) Then df.Add m2(i, 1), i Next Else For i = 1 To UBound(m2) If Not d1.exists(m2(i, 1)) Then If Not df.exists(m2(i, 1)) Then df.Add m2(i, 1), i Next For i = 1 To UBound(m1) If Not d2.exists(m1(i, 1)) Then If Not df.exists(m1(i, 1)) Then df.Add m1(i, 1), i Next End If m1 = df.keys: ReDim m2(0 To UBound(m1), 1 To 1) For i = 0 To UBound(m2): m2(i, 1) = m1(i): Next Sheets.Add [a1] = IIf(opt, "повторяющиеся", "НЕ повторяющиеся") [a2].Resize(UBound(m2) + 1, 1) = m2 End Sub
[/vba]
Или даже лучше так:
[vba]
Код
Sub Макрос1() Dim d1 As Object, opt As Boolean, i&, m1, m2, df As Object, d2 As Object, m(1 To 2), ST% Set d1 = CreateObject("scripting.dictionary") Set d2 = CreateObject("scripting.dictionary") Set df = CreateObject("scripting.dictionary") m1 = [a1:a10].Value m2 = [b1:C10].Value opt = MsgBox("повторяющиеся?", vbYesNo) = vbYes If opt Then ST = InputBox("COLUMN", , 2) For i = 1 To UBound(m1) If Not d1.exists(m1(i, 1)) Then d1.Add m1(i, 1), i Next i For i = 1 To UBound(m2) If Not d2.exists(m2(i, 1)) Then d2.Add m2(i, 1), i Next
If opt Then For i = 1 To UBound(m2) If d1.exists(m2(i, 1)) Then m(1) = m2(i, 1): m(2) = m2(i, ST) If Not df.exists(m2(i, 1)) Then df.Add m2(i, 1), m End If Next Else For i = 1 To UBound(m2) If Not d1.exists(m2(i, 1)) Then If Not df.exists(m2(i, 1)) Then m(1) = m2(i, 1): m(2) = i: df.Add m2(i, 1), m Next For i = 1 To UBound(m1) If Not d2.exists(m1(i, 1)) Then If Not df.exists(m1(i, 1)) Then m(1) = i: m(2) = m1(i, 1): df.Add m1(i, 1), m Next End If m1 = df.ITEMS: ReDim m2(0 To UBound(m1), 1 To 2) For i = 0 To UBound(m2): m2(i, 1) = m1(i)(1): m2(i, 2) = m1(i)(2): Next Sheets.Add [a1:B1] = IIf(opt, "повторяющиеся", "НЕ повторяющиеся") [a2].Resize(UBound(m2) + 1, 2) = m2 End Sub
[/vba]
Во втором варианте можно выбирать номер столбца для вывода информации.(можно использовать как ВПР) и сделал разделение по столбцам несовпадающих данных. SLAVICK
Спасибо за ответы: SLAVICK попробовал 2-й вариант .. при попытке повторяющихся выдаёт ошибку (кстати что за вопрос он выдаёт про колонки? что там писать? по умолчанию стоит 2 )
при попытке неповторяющихся выдаёт вроде похожий ответ но смущает набор цифр (ссылка на скриншот)https://yadi.sk/i/M4m8--e0mSm64
jakim у вас формулы как то привязанны к определенному файлу.. попытался поменять имя файла в формуле но не сумел видимо еще что то нужно переделать. поэтому и не смог оценить их гениальность
Спасибо за ответы: SLAVICK попробовал 2-й вариант .. при попытке повторяющихся выдаёт ошибку (кстати что за вопрос он выдаёт про колонки? что там писать? по умолчанию стоит 2 )
при попытке неповторяющихся выдаёт вроде похожий ответ но смущает набор цифр (ссылка на скриншот)https://yadi.sk/i/M4m8--e0mSm64
jakim у вас формулы как то привязанны к определенному файлу.. попытался поменять имя файла в формуле но не сумел видимо еще что то нужно переделать. поэтому и не смог оценить их гениальность Sirnon
Сообщение отредактировал Sirnon - Четверг, 24.12.2015, 09:44
Во втором варианте можно выбирать номер столбца для вывода информации.(можно использовать как ВПР)
Это если правее находится какая - то информация ее может выводить 2 - это номер столбца в котором находится эта информация. Например Попробуйте в 3-ю колонку добавить какую - то информацию и запустите.
Во втором варианте можно выбирать номер столбца для вывода информации.(можно использовать как ВПР)
Это если правее находится какая - то информация ее может выводить 2 - это номер столбца в котором находится эта информация. Например Попробуйте в 3-ю колонку добавить какую - то информацию и запустите.
Это номера - сделал специально чтоб было понятно в какой строке находитсья. Их можно не выводить - для этого замените: [vba]
Код
m(1) = i m(2) = i
[/vba] на [vba]
Код
m(1) = "" m(2) = ""
[/vba] Если Вам это все не нужно - можете использовать 1-й вариант - он в одном столбце выдает либо содержащиеся и там и там, либо несодержищиеся.SLAVICK
Иногда все проще чем кажется с первого взгляда.
Сообщение отредактировал SLAVICK - Четверг, 24.12.2015, 14:01
чёт я вообще не понял.. и запутался в объяснениях что и где SLAVICK можно сделать чтобы макрос спросил: 1) повторящиющиеся или нет потом спросил №1 столбца потом № второго и вывел ну пусть хоть в следующий после 2-го столбец результат, или на другой новый лист
чёт я вообще не понял.. и запутался в объяснениях что и где SLAVICK можно сделать чтобы макрос спросил: 1) повторящиющиеся или нет потом спросил №1 столбца потом № второго и вывел ну пусть хоть в следующий после 2-го столбец результат, или на другой новый листSirnon
Так? Данные на разных листах. Диапазоны вводятся через инпутбоксы. если нужно не повторяющиеся - выбирайте только столбцы, которые нужно сравнить(по одному.) Если Повторяющиеся - нужно еще указать номера столбцов для поиска и порядковый номер столбца второго диапазона из которого нужна информация. Заменил файл.
Так? Данные на разных листах. Диапазоны вводятся через инпутбоксы. если нужно не повторяющиеся - выбирайте только столбцы, которые нужно сравнить(по одному.) Если Повторяющиеся - нужно еще указать номера столбцов для поиска и порядковый номер столбца второго диапазона из которого нужна информация. Заменил файл.SLAVICK
почти.. ток не понятно.. сравнил 2 столбца , выбрал диапазоны АА и BB, не совпадающие на новом листе выдало 2 столбца.. оба написанно что не совпадают.
а всё.. понял.. выдало то что из обоих столбцов не совпадает..
почти.. ток не понятно.. сравнил 2 столбца , выбрал диапазоны АА и BB, не совпадающие на новом листе выдало 2 столбца.. оба написанно что не совпадают.
а всё.. понял.. выдало то что из обоих столбцов не совпадает.. Sirnon