Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.09.2010, 14:32   #11
ShamanGood
Новичок
Джуниор
 
Регистрация: 16.09.2010
Сообщений: 7
По умолчанию

Цитата:
Сообщение от ShamanGood Посмотреть сообщение
Нужно из столбца В поубирать все значения, которые есть уже в столбце А не зависимо от его местоположения в строке.
gsg, ваш скрипт хорош, я не знал куда себя девать от радости -спасибо, но он действительно сравнивает по-строчно. Hugo121 прав.
В предложении Hugo121, я так понял, нужно пометить все совпадающие ячейки столбцов из разных файлов, а потом создать фильтр (пометка > 0) и удалить эти строки (ну или в ручную удалить если не много). Уже начинаю, что-то соображать
ShamanGood вне форума Ответить с цитированием
Старый 16.09.2010, 15:20   #12
nilem
Форумчанин
 
Регистрация: 25.04.2010
Сообщений: 616
По умолчанию

Цитата:
Сообщение от ShamanGood Посмотреть сообщение
gsg, ваш скрипт хорош ...
Можно немного дополнить:
Код:
Option Explicit
Option Compare Text

Sub repl()
Dim i As Integer, j As Integer, lr As Integer
lr = Cells(Rows.Count, 1).End(xlUp).Row
Application.ScreenUpdating = False
For i = 1 To lr
    For j = 1 To lr
        If Cells(i, 1) = Cells(j, 2) Then
        Cells(j, 2).Cut Cells(j, 3)
        Exit For
        End If
    Next j
Next i
Application.ScreenUpdating = True
End Sub
nilem вне форума Ответить с цитированием
Старый 16.09.2010, 15:24   #13
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Да, так. Пометки можно в обоих или в одном файле ставить. Потом можно отобрать фильтром или просто отсортировать (эти строки встанут рядом) и этот блок скопировать/удалить.
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 16.09.2010, 15:28   #14
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Николай, на 5000 запускали? Я запустил пару минут назад сдуру... 5 минут 100% загрузка процессора.
Чего не на массивах?
webmoney: E265281470651 Z422237915069 R418926282008

Последний раз редактировалось Hugo121; 16.09.2010 в 15:33.
Hugo121 вне форума Ответить с цитированием
Старый 16.09.2010, 15:32   #15
nilem
Форумчанин
 
Регистрация: 25.04.2010
Сообщений: 616
По умолчанию

Ну, нет, это только строчек на 20 годится. На 5000 и, наверное, с дубликатами, - массивы/словари и все такое.

Можно только массивы, но надо выяснить насчет повторяющихся значений - возможны они или нет?

Последний раз редактировалось nilem; 16.09.2010 в 15:34.
nilem вне форума Ответить с цитированием
Старый 16.09.2010, 15:38   #16
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Вот поэтому я универсальный код себе и написал. Пусть не на массивах, а через Find, но зато все такие задачи решаются без головной боли, написания похожих, но всё же разных кодов, сочинения и тормозов с ВПР()... Оно ещё и копировать может!
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 16.09.2010, 15:42   #17
ShamanGood
Новичок
Джуниор
 
Регистрация: 16.09.2010
Сообщений: 7
Сообщение

Дубликаты я заранее все поудалял в обоих столбцах
ShamanGood вне форума Ответить с цитированием
Старый 16.09.2010, 16:47   #18
nilem
Форумчанин
 
Регистрация: 25.04.2010
Сообщений: 616
По умолчанию

Цитата:
Сообщение от Hugo121 Посмотреть сообщение
...универсальный код ... Оно ещё и копировать может!
Игорь, а вышивать умеет?

Вот это можно запустить на 5000 строк:
Код:
Sub repl()
'Dim tm As Single
'tm = Timer
Dim i As Integer, j As Integer, lr As Integer
Dim x, y()
lr = Cells(Rows.Count, 1).End(xlUp).Row
Application.ScreenUpdating = False

x = Range("A1:B" & lr).Value
ReDim y(1 To lr, 1 To 1)

With New Collection
On Error Resume Next
For i = 1 To lr: .Add Item:=0, Key:=CStr(x(i, 1)): Next i

For i = 1 To lr
    .Add Item:=0, Key:=CStr(x(i, 2))
If Err <> 0 Then: y(i, 1) = x(i, 2): x(i, 2) = "": Err.Clear
Next i
End With

Range("B1:B" & lr).Value = WorksheetFunction.Index(x, 0, 2)
Range("C1:C" & lr).Value = y
Application.ScreenUpdating = True
'MsgBox Timer - tm
End Sub
nilem вне форума Ответить с цитированием
Старый 16.09.2010, 17:12   #19
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Николай, а что эта строка делает?
Range("B1:B" & lr).Value = WorksheetFunction.Index(x, 0, 2)

По идее, должна из массива второй столбец извлекать, что-ли... Но у меня ничего не делает.
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 16.09.2010, 17:43   #20
nilem
Форумчанин
 
Регистрация: 25.04.2010
Сообщений: 616
По умолчанию

Цитата:
Сообщение от Hugo121 Посмотреть сообщение
... у меня ничего не делает.
Должна делать, посмотри в файле.
Вложения
Тип файла: zip замена.zip (28.2 Кб, 56 просмотров)
nilem вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как сделать автозаполнение строк, которые зависят от строк другого столбца путвфда_иил Microsoft Office Excel 19 29.08.2010 17:16
Удаление совпадающих строк в Combobox panuta Microsoft Office Excel 1 01.06.2010 21:03
удаление совпадающих строк varelik Общие вопросы Delphi 8 20.03.2010 21:57
Выборка чисел по значению другого столбца faker Microsoft Office Excel 4 10.11.2009 14:40
В прямоугольной матрице переставить столбцы так, чтобы сумма элементов столбца росла от первого столбца Aleo13 Помощь студентам 5 15.10.2008 18:34