Страницы: 1
RSS
Макрос для вычитания данных из одного файла в другой
 
Всем привет! нужна помощь
Задача такая:
Есть 2 файла txt (1.txt и 2.txt) с введёнными данными. Данные числовые в порядке увеличения в столбец без лишних знаков.
В файле 2.txt имеются данные, которых нет в файле 1.txt
Эти новые данные необходимо вывести в эксель в столбец друг за другом
Данные, которые есть в файле 1.txt, но нет в 2.txt выводить в этот список не надо

Примечание: если это упростит задачу, то данные в обоих файлах отсортированы по возрастанию
текстовые файлы для примера прикрепил
 
Цитата
wanderer87 написал: нужна помощь
В чём нужна помощь? Что сами пробовали сделать? Что конкретно не получается?
 
Нашёл на просторах интернета только код, который выдаёт одинаковые значения из двух столбцов:
Код
Sub Find_Matches()
Dim CompareRange As Variant, x As Variant, y As Variant
Set CompareRange = Range("B2:B15")
For Each y In CompareRange
For Each x In Selection
If y = x Then x.Offset(0, 2) = y
Next x
Next y
End Sub 
Никогда не работал с внешними файлами в екселе. Но это, я думаю, смогу сам найти
Главная загвоздка в выборке отличающихся значений
Изменено: wanderer87 - 28.05.2015 22:44:13
 
Код следует оформлять соответствующим тегом. Исправьте.
 
Добрый день
Код
Sub qq()
Dim sArr() As String, oDict As Object, i As Long, n As Long
Open "C:\1\1.txt" For Input As 1#
sArr = Split(Input(LOF(1), 1), vbCrLf)
Close 1
Set oDict = CreateObject("Scripting.Dictionary")
For i = 0 To UBound(sArr) - 1
    oDict.Item(sArr(i)) = ""
Next i
Erase sArr
Open "C:\1\2.txt" For Input As 1#
sArr = Split(Input(LOF(1), 1), vbCrLf)
Close 1
For i = 0 To UBound(sArr) - 1
    If Not oDict.exists(sArr(i)) Then
        sArr(n) = sArr(i)
        n = n + 1
    End If
Next i
Set oDict = Nothing
ReDim nArr(1 To n, 0) As Integer
For i = 0 To n - 1
    nArr(i + 1, 0) = sArr(i)
Next i
Erase sArr
Range(Cells(1, 1), Cells(n, 1)).Value = nArr
Erase nArr
End Sub
 
Офигеть! круто! Спасибо огромное!
ещё не до конца разобрался, но в целом, как я понимаю, мы записываем данные из 1го файла в словарь, а потом проверяем существование значений 2го со словарём и выводим в ячейку, если они отсутствуют в словаре?
 
wanderer87, Да, только сперва записываем в массив, затем выводим в диапазон.
Изменено: Alexander88 - 28.05.2015 14:18:36
 
Сейчас подставил 2 рабочих файла вместо тестовых и код выдаёт ошибку "Type mismatch"
Тип переменных не устраивает его? у меня в каждом файле порядка 200000 строк
 
Цитата
wanderer87 написал: код выдаёт ошибку "Type mismatch"
На какой строке?
Если на 23, то замените Integer на нужное Вам или уберите совсем
И после последней строки в файлах должен быть перенос
Изменено: Alexander88 - 28.05.2015 22:44:47
 
Спасибо, помогло, убрал As Integer, всё стало ок
Страницы: 1
Наверх