Добрый день, сразу скажу, что перерыл темы похожие, не нашёл ответа. Есть два столба ячеек с ключевыми словами, логика такая, что в первом столбце А - "старые данные", а в стобце В - "новые данные", как удалить дубли только из столбца В, чтобы в итоге остались в столбце В только "новые" уникальные значения. Благодарю.
Добрый день, сразу скажу, что перерыл темы похожие, не нашёл ответа. Есть два столба ячеек с ключевыми словами, логика такая, что в первом столбце А - "старые данные", а в стобце В - "новые данные", как удалить дубли только из столбца В, чтобы в итоге остались в столбце В только "новые" уникальные значения. Благодарю.AdwordsDirect
Работает, спасибо. Но что, если будет данных порядках 10 000-100 000 ячеек? Есть какой-то вариант автоматически оставить уникальные значения в В или С столбце? - Было бы вообще шикарно
Работает, спасибо. Но что, если будет данных порядках 10 000-100 000 ячеек? Есть какой-то вариант автоматически оставить уникальные значения в В или С столбце? - Было бы вообще шикарно AdwordsDirect
Вариант для получения результата с использованием SQL для исполнения в Окне отладки. Предпосылки здесь. [vba]
Код
Set rst = CreateObject("ADODB.Recordset"): _ rst.Open "SELECT DISTINCT F2 FROM [Лист1$] " _ & " WHERE F2 Not In (SELECT DISTINCT F1 FROM [Лист1$] WHERE F1 Is Not Null)", _ "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" _ & ThisWorkbook.FullName & _ ";Extended Properties='Excel 12.0;HDR=No'": _ [Лист1!C1].CopyFromRecordset rst
[/vba] Это фактически одна строка кода VBA, содержащая несколько операторов, разделенных двоеточием. Просто копируете в Окно отладки редактора VBA (Alt+F11, Ctrl+G), встаете в конец (за словом "rst") и жмёте Enter. Результат - в колонке C, причём за счёт применения DISTINCT еще и отсортированный по алфавиту.
Если не нравится в Окне отладки, можно несложным преобразованием превратить в более традиционного вида процедуру Sub ... End Sub.
[p.s.]Да! И файл должен быть предварительно сохранен на диске, чтобы правильно сработало ThisWorkbook.FullName[/p.s.]
Вариант для получения результата с использованием SQL для исполнения в Окне отладки. Предпосылки здесь. [vba]
Код
Set rst = CreateObject("ADODB.Recordset"): _ rst.Open "SELECT DISTINCT F2 FROM [Лист1$] " _ & " WHERE F2 Not In (SELECT DISTINCT F1 FROM [Лист1$] WHERE F1 Is Not Null)", _ "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" _ & ThisWorkbook.FullName & _ ";Extended Properties='Excel 12.0;HDR=No'": _ [Лист1!C1].CopyFromRecordset rst
[/vba] Это фактически одна строка кода VBA, содержащая несколько операторов, разделенных двоеточием. Просто копируете в Окно отладки редактора VBA (Alt+F11, Ctrl+G), встаете в конец (за словом "rst") и жмёте Enter. Результат - в колонке C, причём за счёт применения DISTINCT еще и отсортированный по алфавиту.
Если не нравится в Окне отладки, можно несложным преобразованием превратить в более традиционного вида процедуру Sub ... End Sub.
[p.s.]Да! И файл должен быть предварительно сохранен на диске, чтобы правильно сработало ThisWorkbook.FullName[/p.s.]Gustav
А этот вариант с SQL вообще что-то не понятное, вроде ввожу его отладчик нажимаю Ентер, а оно просто на другую строку меня переносит, не сохраняет как макрос, а как его в вид макроса перевести я ума не приложу.
PS Всё решилось. Просто у одних из дублей в конце стоял пробел. Всё работает. Спс.
Встроенная функция удаление дублей не корректно работает, либо я не могу понять как с ней обращаться.
А этот вариант с SQL вообще что-то не понятное, вроде ввожу его отладчик нажимаю Ентер, а оно просто на другую строку меня переносит, не сохраняет как макрос, а как его в вид макроса перевести я ума не приложу.
PS Всё решилось. Просто у одних из дублей в конце стоял пробел. Всё работает. Спс.AdwordsDirect
Сообщение отредактировал AdwordsDirect - Понедельник, 02.10.2017, 11:49