Новости:

Теперь на форум можно залогиниться / зарегистрироваться с помощью ВКонтакте. Уже существующие пользователи могут связать свою учетную запись с аккаунтом ВКонтакте одним кликом в профиле пользователя http://forum.msexcel.ru/index.php?action=profile;area=account

Главное меню

макрос для поиска одинаковых ячеек с сохраненением на другом листе

Автор lelvit, 26.01.2012, 08:13

« назад - далее »

lelvit

Помогите пожалуйста javascript:void(0);создать макрос, который будет искать одинаковые ячейки во всей таблице (по строкам в столбцах). суть такая: есть несколько колонок с уникальными значениями в каждой, но иногда повторяющиеся, необходимо  начинать поиск со второго столбца , затем переходим на второй столбец и начинать с третьего и т.д. и т.п., а результат поиска сохранить на втором листе, таким образом чтобы значения находились в той же колонке но на втором листе . допустим в 1, 2, 5, 8 колонках есть один и тот же  текст соответственно в конечном итоге должно получиться на втором листе что-то в виде такого 1 колонка 0 записей (сам текст ячейки ) 2 колонка -1 зап. 5 к -2 зап 3 к- 3 зап и так по всем . заранее благодарю

GWolf

Добрый день, уважаемый lelvit!

Вы не пишете насколько Вы в теме VBA, но раз говорите о макросах, думаю как их запускать и что есть стандартный модуль - объяснять не нужно!?
Итак:
Создадим в стандартном модуле процедуру и в ней организуем перемещение указателя
Цитироватьпо строкам в столбцах
. А вот
Цитироватьнеобходимо  начинать поиск со второго столбца , затем переходим на второй столбец и начинать с третьего и т.д. и т.п.,
ничегошеньки не понял! Может както на примере что ли поясните.

Sub unikum()
    Dim iDiapazon As Range
    Dim nREnd As Long
    Dim nCEnd As Long
    Dim nRZ As Integer
    Dim i As Long, j As Long
   
    With ThisWorkbook
        With .Worksheets("L1")
            'определим нижнюю (строка), правую (столбец) крайние границы занятой таблицей области листа
            Set iDiapazon = .UsedRange '- используемый диапазон листа, в переменную
            With iDiapazon
                nREnd = .Row + .Rows.Count - 1 'нижнюю (строка)
                nCEnd = .Column + .Columns.Count - 1 'правую (столбец)
            End With
            Set iDiapazon = Nothing '- чистим переменную, за ненадобностью
           
            'если перемещение в таблице следует производить исключая строки заголовка, то
            nRZ = 4 '- устанавливаем значение крайней строки заголовка
            'и организовываем проверку на существование строк с данными в таблице
            If nREnd < nRZ + 1 Then
                'если таковых необнаружилось, то "обнуляем" переменные и
                nREnd = 0
                nCEnd = 0
                nRZ = 0
                'завершаем работу макроса
                Exit Sub
            Else 'в противном случае, если строки с данными существуют, то
                'перемещаемся по строкам в столбцах
                i = 0
                For i = 1 To nCEnd
                    j = 0
                    For j = nRZ + 1 To nREnd
                        '- пока, просто чтобы визуализировать перемещение указателя _
                           на тех ячейках, в которых есть данные
                        If .Cells(j, i).Text <> "" Then
                            .Cells(j, i).Select
                            MsgBox "Указатель в ячейке " & j & " " & i
                        End If
                    Next j
                Next i
            End If
        End With
    End With
End Sub


P.S.
Я тут взял на себя смелость примерчик изобразить, хотя и нарушил, вероятно, п. 2 правил_форума  ;) 8)
Путей к вершине - множество. Этот один из многих!

lelvit

спасибо за помощь. Просто забыл добавить что таблица с разным количеством строк файл выложу чуть позже

GWolf

Цитата: lelvit от 01.02.2012, 07:04
спасибо за помощь. Просто забыл добавить что таблица с разным количеством строк файл выложу чуть позже

Добрый день, ув. lelvit!

Вы бы просто написали Ваш уровень знания VBA, а макрос количество занятых строк в таблице ОПРЕДЕЛЯЕТ АВТОМАТИЧЕСКИ, ну это так - на всякий случай!

P.S. Осмелюсь пояснить, почему добиваюсь от респондентов описания уровня владения VBA и желания овладеть им? Макрос, написанный однажды, в ходе его - макроса жизненного цикла, претерпевает изменение информационного потока, который он призван обрабатывать. А посему, сам макрос требует изменения. Тому есть немало подтверждений, как из моей практики, так и из топиков данного форума. Поэтому, можно идти двумя путями проектирования макроса: - просто решить сиюминутную задачу респондента, подразумевая что, оный сам займется реинженерингом (изменение, дополнение) в случае надобности; - прорабатывать с респондентом ВСЕ варианты "жизни" информационного потока, и закладывать в макрос возможности вариативного ответа на изменения. Второй путь, как Вы понимаете, более трудозатратен. Есть в моей практике пара проектов, по которым так и не наступила "сдача под ключь", по причине слишком долгой проработки деталей и, нежелания респондента заниматься проектом, реализовать который, как ему казалось в начале - плевое дело!
Кстати автоматическое определения используемого поля таблицы, тоже может быть попадаловом! Если рядом с таблицей пользователь разместит свои, не относящиеся к оговоренной структуре таблицы при разработке макроса, данные. Макрос не сможет этого отследить, если его не "обучить" этому специально.
Путей к вершине - множество. Этот один из многих!