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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.11.2014, 12:21   #1
zakushka
 
Регистрация: 25.11.2014
Сообщений: 7
По умолчанию помогите пож-та с макросом

поставщик дает таблицу, в "N" столбцов

Необходимо произвести анализ: найти в столбце "C" строки с одинаковым значением и если по ним в столбце "D" указано одинаковое значение, то перемещать эти строки в соседний (новый) лист. пустые строки после переноса удалять

прошу извинить. если были такие темы. навскидку не нашел
zakushka вне форума Ответить с цитированием
Старый 25.11.2014, 16:28   #2
kalbasiatka
Форумчанин
 
Регистрация: 21.10.2012
Сообщений: 208
По умолчанию

Где эта таблица? Искать во всём столбце "С" с 1й по последнюю ячейку на листе? Что за значения в "D" и "C" - циферы, текст? Перемещать и удалять по 2 одинаковые строки? А, если будет 3 одинаковых, но 2 уже перенесли и удалили 3-я остаётся?
kalbasiatka вне форума Ответить с цитированием
Старый 25.11.2014, 16:38   #3
zakushka
 
Регистрация: 25.11.2014
Сообщений: 7
По умолчанию

приложил образец таблички. строк сейчас до тысячи, может быть до трёх тысяч, надо переносить все строки с удовлетворяющими параметрами счейки в столбце "C" равны и ячейки в "D" равны. Повторятся может значительно больше 2-3 раз. Во всех остальных случаях оставлять
Столбец "C" - текст (номер ордера с префиксами)
Столбец "D" - номер строки в ордере. приходит в текстовом.
Вложения
Тип файла: rar 172932.rar (53.3 Кб, 16 просмотров)
zakushka вне форума Ответить с цитированием
Старый 26.11.2014, 09:29   #4
kalbasiatka
Форумчанин
 
Регистрация: 21.10.2012
Сообщений: 208
По умолчанию

Сделал без массивов, вроде работает.
Код:
Sub uuu()
    Dim i&, ii&, rw&, j&
    Dim sd As Object
    Dim x
    Application.ScreenUpdating = False
    rw = 2
    With Sheets("Open Items")
        lr = .Cells(Rows.Count, 1).End(xlUp).Row
        Set sd = CreateObject("Scripting.Dictionary")
        For i = 2 To lr
            sd.Item(i) = ""
            For ii = i + 1 To lr
                If .Cells(i, 3) = .Cells(ii, 3) And .Cells(i, 4) = .Cells(ii, 4) Then
                    sd.Item(ii) = ii
                End If
            Next
            If sd.Count > 1 Then
                For Each key_ In sd.Keys
                    .Range(.Cells(key_, 1), .Cells(key_, 16)).Copy Sheets("Лист1").Cells(rw, 1)
                    rw = rw + 1
                Next
                x = sd.Keys
                For j = UBound(x) To 0 Step -1
                    .Rows(x(j)).Delete
                Next
                lr = lr - sd.Count
                i = i - 1
            End If
            sd.RemoveAll
        Next
    End With
    Application.ScreenUpdating = True
End Sub
kalbasiatka вне форума Ответить с цитированием
Старый 26.11.2014, 10:49   #5
Step_UA
Форумчанин
 
Аватар для Step_UA
 
Регистрация: 09.06.2011
Сообщений: 388
По умолчанию

Так должно быть быстрее
Код:
Public Sub Duplicates()
  Dim Dic As Object, R As Range, row&, Mas, tmp$, i&
    Set Dic = CreateObject("Scripting.Dictionary")
    Dic.comparemode = 1
    Mas = Range(Cells(2, 3), Cells(Rows.Count, 4).End(xlUp)).Value
    For row = 1 To UBound(Mas)
        tmp = Mas(row, 1) & "|" & Mas(row, 2)
        If Dic.exists(tmp) Then
            i = Dic(tmp)
            If i Then
                If R Is Nothing Then Set R = Cells(i + 1, 1) Else Set R = Application.Union(R, Cells(i + 1, 1))
                Dic(tmp) = 0
            End If
            Set R = Application.Union(R, Cells(row + 1, 1))
        Else
            Dic(tmp) = row
        End If
    Next
    If Not R Is Nothing Then
        Rows(1).Copy
        Sheets.Add
        Cells(1, 1).PasteSpecial
        With R.EntireRow
            .Copy ActiveSheet.Cells(2, 1)
            .Delete
        End With
    End If
End Sub
на неконкретные вопросы даю неконкретные ответы ...
Step_UA вне форума Ответить с цитированием
Старый 26.11.2014, 11:00   #6
zakushka
 
Регистрация: 25.11.2014
Сообщений: 7
По умолчанию

привет, оба варианта работают, один недостаток, пустые строки после переноса не убирают, можно докрутить? а то девочки, которые это будут делать, могут не убрать
zakushka вне форума Ответить с цитированием
Старый 26.11.2014, 11:08   #7
kalbasiatka
Форумчанин
 
Регистрация: 21.10.2012
Сообщений: 208
По умолчанию

У меня строки убирались
Код:
 .Rows(x(j)).Delete
kalbasiatka вне форума Ответить с цитированием
Старый 26.11.2014, 11:12   #8
Step_UA
Форумчанин
 
Аватар для Step_UA
 
Регистрация: 09.06.2011
Сообщений: 388
По умолчанию

А где Вы указывали о такой необходимости?
на неконкретные вопросы даю неконкретные ответы ...
Step_UA вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите пож. срочно( mr_monkus Microsoft Office Word 0 13.03.2014 00:05
Помогите пож. с программой. Arshavin10 Паскаль, Turbo Pascal, PascalABC.NET 2 06.06.2009 12:23
Помогите пож-та))) B.a.k.i.R Паскаль, Turbo Pascal, PascalABC.NET 0 15.05.2009 08:17
Помогите пож. с макросом! platonmedvedev Microsoft Office Excel 2 13.01.2009 12:53
Помогите с с++ пож. manyak Помощь студентам 1 19.04.2008 16:00