Макрос excel одинаковые значения в столбцах excel

В данном примере напишем код макроса, который сможет автоматически найти и объединить все одинаковые ячейки в таблице Excel любой сложности.

Как объединить одинаковые ячейки в столбце используя макрос

Имеется отчет продаж в сети магазинов по целой стране. Нам нужно сделать таблицу данного отчета более читабельной. Для этого следует красиво сформатировать первый столбец, в котором содержаться названия штатов:

Исходная таблица магазинов.

Мы хотим объединить все ячейки с одинаковыми значениями в столбце «Штат» (A). Это можно реализовать с помощью ручного выделения отдельных групп одинаковых значений и объединения их ячеек, воспользовавшись инструментом: «ГЛАВНАЯ»-«Выравнивание»-«Объединить и поместить в центре». Но если таблица содержит тысячи таких групп, да еще с разным количеством повторяющихся ячеек, тогда рационально написать макрос. Он сам быстро и автоматически выполнит всю работу за Вас.

Откройте редактор Visual Basic (ALT+F11):

Откройте редактор.

И создайте новый модуль с помощью инструмента: «Insert»-«Module». А потом запишите в него VBA-код макроса:

Sub JoinDoubles()
Dim i As Long
Application.DisplayAlerts = False
For i = Selection.Rows.Count To 2 Step -1
  If Selection.Cells(i, 1) = Selection.Cells(i - 1, 1) Then
  Range(Selection.Cells(i - 1, 1), Selection.Cells(i, 1)).Merge
  End If
Next
Selection.VerticalAlignment = xlVAlignCenter
Application.DisplayAlerts = True
End Sub

Код в модуле.

Теперь если нам необходимо объединить ячейки с одинаковыми значениями, то выделите диапазон A1:A18 и запустите макрос выбрав инструмент: «РАЗРАБОТЧИК»-«Код»-«Макросы»-«JoinDoubles»-«Выполнить». Результат действия макроса отображен на рисунке:

Пример.

В начале кода мы декларируем переменную для хранения показателей счетчика цикла. В цикле проверяем значения соседних ячеек, начиная с низа выделенного диапазона. Если ячейка содержит такое же значение значит она будет объединена.

Дополнительно в начале кода макроса устанавливаем свойство «False» для объекта «DisplayAlerts», чтобы предотвратить появления предупреждающего сообщение о попытке объединить непустые ячейки в программе Excel. В конце выполнения кода макроса обратно возвращаем свойство «True» для объекта «DisplayAlerts».

Обратите внимание! Если перед выполнением макроса выделить более одного столбца, то в результате будут объединены одинаковые значения только в первом столбце. Чтобы расширить поле действия макроса следует немного изменить его код.



Как объединить все одинаковые ячейки в любой таблице

Немного изменим структуру исходной таблицы:

Новая структура исходной таблицы.

На этот раз нам необходимо объединить все ячейки с одинаковыми значениями в столбце «Штат» (B) в столбце «№» (A).

Если мы хотим, чтобы действия макроса распространялось на несколько выделенных столбцов, то делаем следующее. Сначала добавим новую переменную:

Dim j As Long

Далее добавим строку с кодом начала нового цикла, который будет проходить по другим столбцам выделенного диапазона:

For j = 1 To Selection.Columns.Count

После конца, ранее созданного (внутреннего) цикла добавляем инструкцию Next для конца нового (внешнего) цикла . И соответственно сделаем код более читабельным с помощью отступов табуляции. Кроме того, для всех экземпляров объекта Cells во втором аргументе, вместо числа 1 введем переменную j (например, Selection.Cells(i, j)). Новая версия измененного кода макроса выглядит следующим образом:

Sub JoinDoubles()
Dim i As Long
Dim j As Long
Application.DisplayAlerts = False
For j = 1 To Selection.Columns.Count
  For i = Selection.Rows.Count To 2 Step -1
    If Selection.Cells(i - 1, j) = Selection.Cells(i, j) Then
    Range(Selection.Cells(i - 1, j), Selection.Cells(i, j)).Merge
    End If
  Next
Next
Selection.VerticalAlignment = xlVAlignCenter
Application.DisplayAlerts = True
End Sub

Чтобы увидеть результат действия новой версии кода, выделяем всю таблицу и запускаем макрос:

Объеденены все одинаковы ячейки.

Читайте также: как объединить одинаковые ячейки в строках таблицы.

Как видно на рисунке теперь макрос автоматически объединяет одинаковые значения сразу в двух столбцах.

Excel для Microsoft 365 Excel для Microsoft 365 для Mac Excel 2021 Excel 2021 для Mac Excel 2019 Excel 2019 для Mac Excel 2016 Excel 2016 для Mac Excel 2013 Office для бизнеса Excel 2010 Excel 2007 Еще…Меньше

Чтобы сравнить данные в двух столбцах Microsoft Excel и найти повторяющиеся записи, воспользуйтесь следующими способами. 

Способ 1. Использование формулы на этом этапе

  1. Начните Excel.

  2. На новом примере введите следующие данные (оставьте столбец B пустым):

    A

    B

    C

    1

    1

    3

    2

    2

    5

    3

    3

    8

    4

    4

    2

    5

    5

    0

  3. Введите в ячейку B1 следующую

    формулу:=IF(ISERROR(MATCH(A1,$C$1:$C$5,0)),»»,A1)

  4. Выберем ячейку С1 по B5.

  5. В Excel 2007 и более поздних версиях Excel выберите Заполнить в группе Редактирование, а затем выберите Вниз.

    Повторяющиеся числа отображаются в столбце B, как в следующем примере: 

    A

    B

    C

    1

    1

    3

    2

    2

    2

    5

    3

    3

    3

    8

    4

    4

    2

    5

    5

    5

    0

Способ 2. Использование макроса Visual Basic макроса

Предупреждение: Корпорация Майкрософт предоставляет примеры программирования только для иллюстрации без гарантии, выраженной или подразумеваемой. Это относится и не только к подразумеваемой гарантии пригодности и пригодности для определенной цели. В этой статье предполагается, что вы знакомы с языком программирования, который демонстрируется, и средствами, используемыми для создания и от debug procedures. Инженеры службы поддержки Майкрософт могут объяснить функциональные возможности конкретной процедуры. Однако они не будут изменять эти примеры, чтобы обеспечить дополнительные функциональные возможности или процедуры по построению в необходимом порядке.

Чтобы использовать макрос Visual Basic для сравнения данных в двух столбцах, с помощью следующих действий:

  1. Запустите Excel.

  2. Нажмите ALT+F11, чтобы запустить Visual Basic редактора.

  3. В меню Вставка выберите Модуль.

  4. Введите следующий код на листе модуля:

    Sub Find_Matches()
    Dim CompareRange As Variant, x As Variant, y As Variant
    ' Set CompareRange equal to the range to which you will
    ' compare the selection.
    Set CompareRange = Range("C1:C5")
    ' NOTE: If the compare range is located on another workbook
    ' or worksheet, use the following syntax.
    ' Set CompareRange = Workbooks("Book2"). _
    ' Worksheets("Sheet2").Range("C1:C5")
    '
    ' Loop through each cell in the selection and compare it to
    ' each cell in CompareRange.
    For Each x In Selection
    For Each y In CompareRange
    If x = y Then x.Offset(0, 1) = x
    Next y
    Next x
    End Sub

  5. Нажмите ALT+F11, чтобы вернуться к Excel.

    1. Введите в качестве примера следующие данные (оставьте столбец B пустым):
       

      A

      B

      C

      1

      1

      3

      2

      2

      5

      3

      3

      8

      4

      4

      2

      5

      5

      0

  6. Выберем ячейку от A1 до A5.

  7. В Excel 2007 и более поздних версиях Excel выберите вкладку Разработчик, а затем в группе Код выберите макрос.

    Примечание: Если вкладка Разработчик не отключается, возможно, ее нужно включить. Для этого выберите Файл > параметры > настроитьленту , а затем выберите вкладку Разработчик в поле настройки справа.

  8. Щелкните Find_Matches, а затем нажмите кнопку Выполнить.

    Повторяющиеся числа отображаются в столбце B. Совпадающие числа будут поместиться рядом с первым столбцом, как показано ниже.

    A

    B

    C

    1

    1

    3

    2

    2

    2

    5

    3

    3

    3

    8

    4

    4

    2

    5

    5

    5

    0

Нужна дополнительная помощь?

Skip to content

На чтение 3 мин. Просмотров 4.1k.

Что делает макрос: Всегда хотел выделить значения дубликатов в диапазоне. Макрос в этом разделе делает именно это. Есть много ручных способов найти и выделить дубликаты — способы, включающие формулы, условное форматирование, сортировку и т.д. Тем не менее, все эти методы требуют ручной настройки и определенного уровня обслуживания по мере изменения данных.
Этот макрос упрощает задачу, что позволяет найти и выделить дубликаты в ваших данных с помощью щелчка мыши.

Содержание

  1. Как макрос работает
  2. Код макроса
  3. Как этот код работает
  4. Как использовать

Как макрос работает

Этот макрос перечисляет ячейки в целевом диапазоне, используя оператор For Each, чтобы активировать каждую ячейку по одной за раз. Затем мы используем функцию СЧЕТЕСЛИ, чтобы подсчитать, сколько раз значение в активной ячейке находится в выбранном
диапазоне. Если это число больше единицы, то формат ячейки — желтого цвета.

Код макроса

Sub VidelitDublikati()
'Шаг 1: Объявляем переменные
Dim MyRange As Range
Dim MyCell As Range
'Шаг 2: определяем целевой диапазон
Set MyRange = Selection
'Шаг 3: запускаем цикл через диапазон
For Each MyCell In MyRange
'Шаг 4: Убедить, что ячейка имеет форматирование текста
If WorksheetFunction.CountIf(MyRange, MyCell.Value) > 1 Then
MyCell.Interior.ColorIndex = 36
End If
'Шаг 5: Получаем следующую ячейку в диапазоне
Next MyCell
End Sub

Как этот код работает

  1. На шаге 1 объявляются две переменные объекта Range, одна из которых называется MyRange для хранения всей цели диапазона, а другая называется MyCell для хранения каждой ячейки в диапазоне.
  2. Шаг 2 заполняет переменную MyRange целевым диапазоном. В этом примере мы используем выбранный диапазон — диапазон, который был выбран в электронной таблице. Вы можете легко установить переменную MyRange для определенного диапазона, например Range («A1: Z100»). Кроме того, если ваша цель — именованный диапазон, вы можете просто ввести его имя: Range («MyNamedRange»).
  3. Шаг 3 макрос начинает проходить по каждой ячейке в целевом диапазоне, активируя каждую ячейку.
  4. Объект WorksheetFunction позволяет нам запускать многие из Excel функции электронных таблиц в VBA. Шаг 4 использует объект WorksheetFunction для запуска Функция СЧЕТЕСЛИ в VBA.
    В этом случае мы рассчитываем, сколько раз значение активной ячейки (MyCell.Value) найдено в заданном диапазоне (MyRange). Если выражение СЧЕТЕСЛИ оценивается больше 1, макрос изменяет цвет ячейки.
  5. Шаг 5 возвращается к следующей ячейке. После активации всех ячеек в целевом диапазоне макрос заканчивается.

Как использовать

Для реализации этого макроса, вы можете скопировать и вставить его в стандартный модуль:

  1. Активируйте редактор Visual Basic, нажав ALT + F11.
  2. Щелкните правой кнопкой мыши имя проекта / рабочей книги в окне проекта.
  3. Выберите Insert➜Module.
  4. Введите или вставьте код.

Поиск повторяющихся значений (дубликатов) в одном из столбцов таблицы Excel и выделение их цветом заливки с помощью кода VBA.

Поиск дубликатов в столбце

Чаще всего повторяющиеся значения ищут в первом столбце таблицы, поэтому процедуру поиска дубликатов в VBA Excel рассмотрим именно на нем:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

Sub DuplicateSearch()

Dim ps As Long, myRange As Range, i1 As Long, i2 As Long

‘Определяем номер последней строки таблицы

ps = Cells(1, 1).CurrentRegion.Rows.Count

    ‘Нет смысла искать дубликаты в таблице, состоящей из одной строки

    If ps > 1 Then

    ‘Присваиваем объектной переменной ссылку на исследуемый столбец

    Set myRange = Range(Cells(1, 1), Cells(ps, 1))

        With myRange

        ‘Очищаем ячейки столбца от предыдущих закрашиваний

        .Interior.Color = xlNone

            For i1 = 1 To ps 1

                For i2 = i1 + 1 To ps

                    If .Cells(i1) = .Cells(i2) Then

                        ‘Если значения сравниваемых ячеек совпадают,

                        ‘обеим присваиваем новый цвет заливки

                        .Cells(i1).Interior.Color = 6740479

                        .Cells(i2).Interior.Color = 6740479

                    End If

                Next

            Next

        End With

    End If

End Sub

После ручного исправления или удаления повторяющихся значений, запускаем процедуру DuplicateSearch вновь, чтобы очистить от заливки ячейки столбца с уникальными значениями и заново выделить оставшиеся дубликаты.

Чтобы найти повторы в другом столбце, замените номер столбца в параметрах свойства Cells (в трех местах процедуры DuplicateSearch).

Константы для заливки

Для указания цвета заливки для ячеек с повторяющимися значениями вместо числового значения цвета можно использовать предопределенные константы:

Предопределенная константа Наименование цвета
vbBlack Черный
vbBlue Голубой
vbCyan Бирюзовый
vbGreen Зеленый
vbMagenta Пурпурный
vbRed Красный
vbWhite Белый
vbYellow Желтый

23 / 23 / 12

Регистрация: 13.09.2010

Сообщений: 88

1

Поиск одинаковых значений в столбце

26.09.2011, 14:41. Показов 23042. Ответов 11


Студворк — интернет-сервис помощи студентам

Добрый день.

Не могу разобраться с одной задачей на Excel.

Дан одномерный массив, занесенный в столбец Excel. Необходимо найти количество повторений числа, но только того которое стоит раньше, чем другие числа имеющие повторения…


Например:

7
5
3
1
2
3
4
5
0
1

В итоге получается что необходимо посчитать сколько «

5» у нас в массиве. Также нужно посчитать на какой позиции находится первая считаемая цифра (в нашем случае «5» на позиции 2).



0



15136 / 6410 / 1730

Регистрация: 24.09.2011

Сообщений: 9,999

26.09.2011, 15:44

2

Со вспомогательным столбцом:



2



23 / 23 / 12

Регистрация: 13.09.2010

Сообщений: 88

26.09.2011, 17:07

 [ТС]

3

Спасибо огромное, а как это изобразить в виде макроса?



0



19vitek

730 / 406 / 95

Регистрация: 19.12.2010

Сообщений: 756

26.09.2011, 17:43

4

Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

как вариант.

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
Sub n()
For i = 1 To 10
Cells(i, 2) = Application.WorksheetFunction.CountIf([a1:a10], Cells(i, 1))
Next i
For Each cel In [b1:b10]
If cel.Value > 1 Then
Cells(1, 5) = "Цифра " & Cells(cel.Row, 1) & " стоит первой в массиве "
Cells(2, 5) = "и повторяется " & Cells(cel.Row, 2) & " раз(a)"
Cells(3, 5) = "ее индекс в массиве " & cel.Row
Exit For
End If
Next cel
End Sub

Вложения

Тип файла: xls Подсчет повторов_1.xls (32.0 Кб, 362 просмотров)



1



Казанский

15136 / 6410 / 1730

Регистрация: 24.09.2011

Сообщений: 9,999

26.09.2011, 17:51

5

Можно так:

Visual Basic
1
2
3
4
5
6
7
8
Sub malenkaya()
Dim i&, j&, v()
On Error Resume Next
i = Cells(Rows.Count, 1).End(xlUp).Row
v = Evaluate("INDEX(COUNTIF(A1:A" & i & ",A1:A" & i & ")>1,)")
j = WorksheetFunction.Match(True, v, 0)
MsgBox "позиция: " & j & vbLf & "число: " & [A1].Cells(j)
End Sub



2



23 / 23 / 12

Регистрация: 13.09.2010

Сообщений: 88

26.09.2011, 19:18

 [ТС]

6

спасибо большое!!!

Добавлено через 3 минуты
извените за беспокойство, а можно узнать индексы всех повторяеммых чисел, или хотя-бы второй?

ну вроде индекс 1-ой 5 — 2
индекс 2-ой 5 — 8



0



19vitek

730 / 406 / 95

Регистрация: 19.12.2010

Сообщений: 756

26.09.2011, 19:29

7

Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Sub n()
For i = 1 To 10
Cells(i, 2) = Application.WorksheetFunction.CountIf([a1:a10], Cells(i, 1))
Next i
For Each cel In [b1:b10]
If cel.Value > 1 Then
Cells(1, 5) = "Цифра " & Cells(cel.Row, 1) & " стоит первой в массиве "
Cells(2, 5) = "и повторяется " & Cells(cel.Row, 2) & " раз(a)"
Cells(3, 5) = "ее индекс в массиве " & cel.Row
Exit For
End If
Next cel
For Each cel In [b1:b10]
If cel.Value > 1 Then Cells(cel.Row, 3) = cel.Row
Next cel
Cells(11, 3) = "Индексы повторяющихся елементов"
End Sub



1



23 / 23 / 12

Регистрация: 13.09.2010

Сообщений: 88

26.09.2011, 19:37

 [ТС]

8

А чтобы вывести только искомые индексы всех 5 как это сделать?



0



19vitek

730 / 406 / 95

Регистрация: 19.12.2010

Сообщений: 756

26.09.2011, 19:47

9

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Sub n()
For i = 1 To 10
Cells(i, 2) = Application.WorksheetFunction.CountIf([a1:a10], Cells(i, 1))
Next i
For Each cel In [b1:b10]
If cel.Value > 1 Then
Cells(1, 5) = "Цифра " & Cells(cel.Row, 1) & " стоит первой в массиве "
Cells(2, 5) = "и повторяется " & Cells(cel.Row, 2) & " раз(a)"
Cells(3, 5) = "ее индекс в массиве " & cel.Row
temp = Cells(cel.Row, 1)
Exit For
End If
Next cel
[c:c].Clear
For Each cel In [b1:b10]
If cel.Value > 1 And Cells(cel.Row, 1) = temp Then Cells(cel.Row, 3) = cel.Row
Next cel
Cells(11, 3) = "Индексы цифры " & temp
End Sub



1



23 / 23 / 12

Регистрация: 13.09.2010

Сообщений: 88

26.09.2011, 20:00

 [ТС]

10

Не обижайтесь пожалуйста, но меня просто интересует индекс именно второй цифры 5, как его программно запомнить, он мне нужен будет для расчетов….



0



19vitek

730 / 406 / 95

Регистрация: 19.12.2010

Сообщений: 756

26.09.2011, 20:17

11

ИМЕННО ВТОРОЙ ИЛИ ПОСЛЕДНЕЙ?

Добавлено через 12 минут

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
Sub n()
For i = 1 To 10
Cells(i, 2) = Application.WorksheetFunction.CountIf([a1:a10], Cells(i, 1))
Next i
For Each cel In [b1:b10]
If cel.Value > 1 Then
Cells(1, 5) = "Цифра " & Cells(cel.Row, 1) & " стоит первой в массиве "
Cells(2, 5) = "и повторяется " & Cells(cel.Row, 2) & " раз(a)"
Cells(3, 5) = "ее индекс в массиве " & cel.Row
temp = Cells(cel.Row, 1)
Exit For
End If
Next cel
[c:c].Clear
For Each cel In [b1:b10]
If cel.Value > 1 And Cells(cel.Row, 1) = temp Then
Cells(cel.Row, 3) = cel.Row
k = k + 1
End If
If k = 2 Then
ind = cel.Row
Exit For
End If
Next cel
Cells(11, 3) = "Второй индекс цифры " & temp & "=" & ind
End Sub



1



23 / 23 / 12

Регистрация: 13.09.2010

Сообщений: 88

26.09.2011, 20:57

 [ТС]

12

Именно второй

Добавлено через 1 минуту
Большое Вам спасибо за помощь и терпение!!!



0



Понравилась статья? Поделить с друзьями:
  • Макрос excel объединяющий все листы книги в один
  • Макрос excel обращение к ячейке
  • Макрос excel нескольких таблиц в одну
  • Макрос excel неактивная кнопка
  • Макрос excel не могу включить