Как посчитать количество объединенных ячеек excel

Обычно вы предпочитаете объединять все ячейки с одинаковыми значениями в диапазоне в Excel. Но в некоторых случаях может потребоваться подсчитать все объединенные ячейки в выбранном диапазоне. Как с этим бороться? В этой статье будут представлены два метода быстрого подсчета объединенных ячеек в Excel.

Подсчет объединенных ячеек в диапазоне в Excel с кодом VBA
Легко подсчитывать объединенные ячейки в диапазоне в Excel одним щелчком мыши


Подсчет объединенных ячеек в диапазоне в Excel с кодом VBA

1. Держать ALT и нажмите F11 на клавиатуре, чтобы открыть Microsoft Visual Basic для приложений окно.

2. Нажмите Вставить > Модули, и скопируйте VBA в модуль.

VBA: подсчет объединенных ячеек в диапазоне

Function CountMerged(pWorkRng As Range) As Long
'Updateby20140307
Dim rng As Range
Dim total As Long
Set dt = CreateObject("Scripting.Dictionary")
For Each rng In pWorkRng
    If rng.MergeCells Then
        TempAddress = rng.MergeArea.Address
        dt(TempAddress) = ""
    End If
Next
CountMerged = dt.Count
End Function

3. Сохраните код, закройте окно и введите эту формулу. = CountMerged (A1: G10) (диапазон A1: G10 — это диапазон, из которого вы хотите подсчитать объединенные ячейки, вы можете изменить его по своему усмотрению) в пустую ячейку и нажмите Enter кнопку на клавиатуре. Затем подсчитанный результат отображается в ячейке, см. Снимок экрана:


Подсчет объединенных ячеек в диапазоне в Excel одним щелчком мыши

Здесь я покажу вам быстрый способ подсчета объединенных ячеек в диапазоне одним щелчком мыши с Выберите объединенные ячейки полезности Kutools for Excel. Пожалуйста, сделайте следующее.

1. Выберите диапазон с объединенными ячейками, который вы хотите подсчитать. А затем нажмите Кутулс > Выберите > Выбрать объединенные ячейки. Смотрите скриншот:

2. Затем Kutools for Excel диалоговое окно всплывает с общим количеством объединенных ячеек, перечисленных внутри. Пожалуйста, нажмите на OK кнопка. Затем сразу выбираются все объединенные ячейки в выбранном диапазоне. Смотрите скриншот:

  Если вы хотите получить бесплатную пробную версию (30-день) этой утилиты, пожалуйста, нажмите, чтобы загрузить это, а затем перейдите к применению операции в соответствии с указанными выше шагами.


Легко подсчитывайте объединенные ячейки в диапазоне в Excel с помощью Kutools for Excel


Относительные статьи:

  • Подсчет повторяющихся значений в столбце в Excel

Лучшие инструменты для работы в офисе

Kutools for Excel Решит большинство ваших проблем и повысит вашу производительность на 80%

  • Снова использовать: Быстро вставить сложные формулы, диаграммы и все, что вы использовали раньше; Зашифровать ячейки с паролем; Создать список рассылки и отправлять электронные письма …
  • Бар Супер Формулы (легко редактировать несколько строк текста и формул); Макет для чтения (легко читать и редактировать большое количество ячеек); Вставить в отфильтрованный диапазон
  • Объединить ячейки / строки / столбцы без потери данных; Разделить содержимое ячеек; Объединить повторяющиеся строки / столбцы… Предотвращение дублирования ячеек; Сравнить диапазоны
  • Выберите Дубликат или Уникальный Ряды; Выбрать пустые строки (все ячейки пустые); Супер находка и нечеткая находка во многих рабочих тетрадях; Случайный выбор …
  • Точная копия Несколько ячеек без изменения ссылки на формулу; Автоматическое создание ссылок на несколько листов; Вставить пули, Флажки и многое другое …
  • Извлечь текст, Добавить текст, Удалить по позиции, Удалить пробел; Создание и печать промежуточных итогов по страницам; Преобразование содержимого ячеек в комментарии
  • Суперфильтр (сохранять и применять схемы фильтров к другим листам); Расширенная сортировка по месяцам / неделям / дням, периодичности и др .; Специальный фильтр жирным, курсивом …
  • Комбинируйте книги и рабочие листы; Объединить таблицы на основе ключевых столбцов; Разделить данные на несколько листов; Пакетное преобразование xls, xlsx и PDF
  • Более 300 мощных функций. Поддерживает Office/Excel 2007-2021 и 365. Поддерживает все языки. Простое развертывание на вашем предприятии или в организации. Полнофункциональная 30-дневная бесплатная пробная версия. 60-дневная гарантия возврата денег.

вкладка kte 201905


Вкладка Office: интерфейс с вкладками в Office и упрощение работы

  • Включение редактирования и чтения с вкладками в Word, Excel, PowerPoint, Издатель, доступ, Visio и проект.
  • Открывайте и создавайте несколько документов на новых вкладках одного окна, а не в новых окнах.
  • Повышает вашу продуктивность на 50% и сокращает количество щелчков мышью на сотни каждый день!

офисный дно

Комментарии (2)


Оценок пока нет. Оцените первым!

как обойти в частном случае подсчет объединенных ячеек?

Автор tutik, 12.12.2013, 11:42

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

Всем доброго времени суток!
Прошу помощи или подсказки.
Файл таблицы во вложении.
В таблице изменяется (в основном добавляются строки) столбец Изделия, соответственно дополняются и все остальные столбцы. Заказчики располагаются по алфавиту, поэтому строка может добавляться и в середине таблицы. (в итоге строк будет около 150)
Для первой гистограммы путем поисков в инете удалось посчитать кол-во заказов по месяцам. А вот для второй гистограммы не получается.
Хотелось бы, чтобы количество изделий по заказчикам считалось формулой. (в ячейках В58:В64)
Фактически нужно посчитать кол-во строк в объединенной ячейке или может можно посчитать разницу между номерами следующих друг за другом объединенных ячеек, но можно ли такое сделать…

П.С. Я понимаю, что объединенные ячейки — зло, но с ними же симпатичней. А к отчету нужно будет прилагать не только диаграммы, но и всю таблицу (и надо, чтобы она была читабельна не только для меня).


создать доп. столбец с формулой

=ПРОСМОТР("яяя";$A$3:A3) который можно скрыть.
после по нему делать подсчет с помощью СЧЕТЕСЛИ(диапазон доп. столбца;A58)



  • Профессиональные приемы работы в Microsoft Excel

  • Обмен опытом

  • Microsoft Excel

  • как обойти в частном случае подсчет объединенных ячеек?

Макрос. Подчет количества объединенных ячеек

Michelangelo

Дата: Понедельник, 28.02.2011, 23:33 |
Сообщение № 1

Группа: Пользователи

Ранг: Прохожий

Сообщений: 8


Репутация:

0

±

Замечаний:
0% ±


Всем привет)))
На этот раз вот такой вопросик.
Например я по вертикале объединил несколько ячеек. Необходимо написать функцию которая будет подсчитывать количество объединенных ячеек.
Ну и работать она должна примерно так.

Задается первая по порядку (сверху в низ) ячейка из какого то количества обедненных ячеек.
Заводится счетчик , который и будет подсчитываться количество ячеек.
Ну и потом циклически надо идти в низ пока «объединена ячейка» не закончится.

По факту у меня загвоздка в условии остановки цикла))

 

Ответить

Alex_ST

Дата: Вторник, 01.03.2011, 10:00 |
Сообщение № 2

Группа: Друзья

Ранг: Участник клуба

Сообщений: 3176


Репутация:

604

±

Замечаний:
0% ±


2003

Что-то у меня замороченно, ИМХО, получается…
Явно можно проще…
Но пока так:

Code

Sub MergeCells_Count()
    Dim rCell As Range, i&, sAddress$
    For Each rCell In Intersect(Selection, ActiveSheet.UsedRange)
       If rCell.MergeCells Then
          If rCell.MergeArea.Address <> sAddress Then
             sAddress = rCell.MergeArea.Address
             i = i + 1
          End If
       End If
    Next
    MsgBox i
End Sub



С уважением,
Алексей
MS Excel 2003 — the best!!!

 

Ответить

Alex_ST

Дата: Вторник, 01.03.2011, 10:14 |
Сообщение № 3

Группа: Друзья

Ранг: Участник клуба

Сообщений: 3176


Репутация:

604

±

Замечаний:
0% ±


2003

Можно, конечно, и так:

Code

Sub MergeCells_Count2()
    Dim rCell As Range, rRange As Range
    For Each rCell In Intersect(Selection, ActiveSheet.UsedRange)
       If rCell.MergeCells Then
          If rRange Is Nothing Then
             Set rRange = rCell.MergeArea
          Else
             Set rRange = Union(rRange, rCell.MergeArea)
          End If
       End If
    Next
    MsgBox rRange.Areas.Count
End Sub

но тоже, ИМХО, как-то сложновато.



С уважением,
Алексей
MS Excel 2003 — the best!!!

 

Ответить

Hugo

Дата: Вторник, 01.03.2011, 23:41 |
Сообщение № 4

Группа: Друзья

Ранг: Участник клуба

Сообщений: 3140


Репутация:

670

±

Замечаний:
0% ±


2010, теперь уже с PQ

Алексей, а если адреса в словарь? smile

Code

Sub MergeCells_CountDic()
       Dim rCell As Range

       With New Dictionary ‘ Раннее связывание, нужен Reference на MS Scripting Runtime

           For Each rCell In Intersect(Selection, ActiveSheet.UsedRange)
               If rCell.MergeCells Then
                   If Not .Exists(rCell.MergeArea.Address) Then .Add rCell.MergeArea.Address, 0
               End If
           Next
       MsgBox .Count
       End With
End Sub

Можно чуть сократить, ты умеешь smile


excel@nxt.ru
webmoney: R418926282008 Z422237915069

 

Ответить

KuklP

Дата: Среда, 02.03.2011, 09:45 |
Сообщение № 5

Группа: Проверенные

Ранг: Старожил

Сообщений: 2369


Репутация:

486

±

Замечаний:
0% ±


2003-2010

А я так понял, что надо посчитать к-во ячеек в объединении:

Code

Public Function MyMergeCount(cMerge As Range)
     MyMergeCount = cMerge.MergeArea.Count
End Function

Но может я и не прав…


Ну с НДС и мы чего-то стoим! kuklp60@gmail.com
WM Z206653985942, R334086032478, U238399322728

Сообщение отредактировал KuklPСреда, 02.03.2011, 09:45

 

Ответить

Alex_ST

Дата: Среда, 02.03.2011, 13:38 |
Сообщение № 6

Группа: Друзья

Ранг: Участник клуба

Сообщений: 3176


Репутация:

604

±

Замечаний:
0% ±


2003

Quote (Hugo)

Алексей, а если адреса в словарь?

Игорь, хоть я и люблю словари (ты на это намекаешь, как я понял?) но не настолько же чтобы «из пушки по воробьям» biggrin
KuklP, Серёга, если бы ножно было посчитать общее число ячеек в объединённых областях, то никто бы с циклами, естественно, не заморачивался… Аналогичное твоему предложению решение у меня получилось уже через пару минут после того, как решил попробовать помочь. Но я подумал, что с таким элементарным вопросом топик-стартер обращаться бы не стал.

Хотя… Michelangelo поставил вопрос так, что трудно точно понять, что он хочет, посчитать кол-во ячеек в объединённых областях или кол-во объединенных областей.



С уважением,
Алексей
MS Excel 2003 — the best!!!

 

Ответить

Michelangelo

Дата: Среда, 02.03.2011, 13:47 |
Сообщение № 7

Группа: Пользователи

Ранг: Прохожий

Сообщений: 8


Репутация:

0

±

Замечаний:
0% ±


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

Ну на всякий случай пример. Например объединяю диапазон А1:B4 . в этом случае функция по горизантале должна вернуть 2, а функция по вертикале 4

 

Ответить

Hugo

Дата: Среда, 02.03.2011, 13:59 |
Сообщение № 8

Группа: Друзья

Ранг: Участник клуба

Сообщений: 3140


Репутация:

670

±

Замечаний:
0% ±


2010, теперь уже с PQ

Алексей, хоть и из пушки, но вроде покороче код получается.
А угадал похоже Сергей smile


excel@nxt.ru
webmoney: R418926282008 Z422237915069

 

Ответить

Hugo

Дата: Среда, 02.03.2011, 14:07 |
Сообщение № 9

Группа: Друзья

Ранг: Участник клуба

Сообщений: 3140


Репутация:

670

±

Замечаний:
0% ±


2010, теперь уже с PQ

Только у меня такой вариант функции Сергея получился smile :

Code

Public Function MyMergeCount2(cMerge As Range)
Dim cc As Range
For Each cc In cMerge
With cc.MergeArea
          If .MergeCells Then
           MyMergeCount2 = MyMergeCount2 + 1
          End If
End With
Next
End Function

P.S. Попроще можно (вложение заменил):

Code

Public Function MyMergeCount2(cMerge As Range)
Dim cc As Range
For Each cc In cMerge
        If cc.MergeCells Then
         MyMergeCount2 = MyMergeCount2 + 1
        End If
Next
End Function


excel@nxt.ru
webmoney: R418926282008 Z422237915069

 

Ответить

Alex_ST

Дата: Среда, 02.03.2011, 14:13 |
Сообщение № 10

Группа: Друзья

Ранг: Участник клуба

Сообщений: 3176


Репутация:

604

±

Замечаний:
0% ±


2003

И, к стати, если уж использовать словари, то, наверное, лучше так:

Code

Function MergeAreas(rRange As Range)
    Dim rCell As Range
    With CreateObject(«Scripting.Dictionary»)  ‘ создаем временный словарь
       For Each rCell In Intersect(rRange, ActiveSheet.UsedRange)
          If rCell.MergeCells Then
             .Item(rCell.MergeArea.Address) = «»  ‘ попытка записи значения по отсутствующему ключу добавит ключ в словарь
          End If
       Next
       MergeAreas = .Count
    End With
End Function

или так:

Code

Sub MergeCells_CountDic()
    Dim rCell As Range
    With CreateObject(«Scripting.Dictionary»)  ‘ создаем временный словарь
       For Each rCell In Intersect(Selection, ActiveSheet.UsedRange)
          If rCell.MergeCells Then
             .Item(rCell.MergeArea.Address) = «»  ‘ попытка записи значения по отсутствующему ключу добавит ключ в словарь
          End If
       Next
       MsgBox .Count
    End With
End Sub



С уважением,
Алексей
MS Excel 2003 — the best!!!

 

Ответить

Hugo

Дата: Среда, 02.03.2011, 14:15 |
Сообщение № 11

Группа: Друзья

Ранг: Участник клуба

Сообщений: 3140


Репутация:

670

±

Замечаний:
0% ±


2010, теперь уже с PQ

Так я про то и говорил — проверять попытками, а не проверкой. Я сам там хромаю… Ты спец.


excel@nxt.ru
webmoney: R418926282008 Z422237915069

 

Ответить

Alex_ST

Дата: Среда, 02.03.2011, 14:17 |
Сообщение № 12

Группа: Друзья

Ранг: Участник клуба

Сообщений: 3176


Репутация:

604

±

Замечаний:
0% ±


2003

Прошу прощения, свой предыдущий пост оставил, не обновив экран, поэтому не видел, что появились ответы.

P.S.
к стати, Игорь, если, как меня научили гуру на Планете, использовать конструкцию типа

Code

With CreateObject(«Scripting.Dictionary»)

End With

, то и код не усложняется введением дополнительных

Code

Dim oDict as Object : Set oDoct = CreateObject(«Scripting.Dictionary»)

Set oDoct = Nothing

и не надо заморачиваться ранним связыванием (ссылками в Reference) и возможностью проблем если вдруг на другом компе не связано.



С уважением,
Алексей
MS Excel 2003 — the best!!!

Сообщение отредактировал Alex_STСреда, 02.03.2011, 14:31

 

Ответить

KuklP

Дата: Четверг, 03.03.2011, 08:29 |
Сообщение № 13

Группа: Проверенные

Ранг: Старожил

Сообщений: 2369


Репутация:

486

±

Замечаний:
0% ±


2003-2010

В одну строчку:

Code

Public Function MyMergeCount(cMerge As Range) As String
      MyMergeCount = UBound(cMerge.MergeArea.Formula) & «, » & UBound(cMerge.MergeArea.Formula, 2)
End Function

Через запятую к-во строк, столбцов.


Ну с НДС и мы чего-то стoим! kuklp60@gmail.com
WM Z206653985942, R334086032478, U238399322728

 

Ответить

Alex_ST

Дата: Четверг, 03.03.2011, 09:24 |
Сообщение № 14

Группа: Друзья

Ранг: Участник клуба

Сообщений: 3176


Репутация:

604

±

Замечаний:
0% ±


2003

Quote (KuklP)

В одну строчку

Серёга, попытался разобраться в твоей формуле — не понял, что должно вернуть UBound(cMerge.MergeArea.Formula) ?
Как это ты у возвращаемой формулы в нотации А1 определяешь верхнюю границу массива? При этом в одной и той же строке сначала — одномерного, а потом двумерного? Решил, что должно дать ошибку.
Засомневался в своих теоретических знаниях. Решил проверить на практике — попробовал тупо вставить в стандартный модуль. Как и ожидал — ошибка. В модуль листа — тоже.
Что-то ты либо недописал, либо перемудрил.



С уважением,
Алексей
MS Excel 2003 — the best!!!

Сообщение отредактировал Alex_STЧетверг, 03.03.2011, 09:26

 

Ответить

KuklP

Дата: Четверг, 03.03.2011, 09:42 |
Сообщение № 15

Группа: Проверенные

Ранг: Старожил

Сообщений: 2369


Репутация:

486

±

Замечаний:
0% ±


2003-2010

Смотри. Ошибка там, где и должна быть — где нет объединенных.

К сообщению приложен файл:

merge.xls
(20.5 Kb)


Ну с НДС и мы чего-то стoим! kuklp60@gmail.com
WM Z206653985942, R334086032478, U238399322728

 

Ответить

Alex_ST

Дата: Четверг, 03.03.2011, 10:10 |
Сообщение № 16

Группа: Друзья

Ранг: Участник клуба

Сообщений: 3176


Репутация:

604

±

Замечаний:
0% ±


2003

Да, действительно…
Просто я чтобы не связываться с листом, проверял твою функцию с помощью

Code

Sub ttt()
Debug.Print MyMergeCount(ActiveSheet.[A1])
End Sub

А ActiveSheet когда пробовал в модуле листа опустил. Вот и не работало.

Но всё равно НЕ ПОНИМАЮ что воэвращает UBound(cMerge.MergeArea.Formula) ?
Ведь .Formula «Returns or sets the object’s formula in A1-style notation and in the language of the macro»

МАССИВОМ (а ведь это должен быть массив, иначе какой же у него UBound ?) какой размерности является значение, возвращаемое cMerge.MergeArea.Formula ?
Если одномерный, то почему не ругается UBound по второму измерению? А если двумерный, то почему не ругается UBound без указания измерения?



С уважением,
Алексей
MS Excel 2003 — the best!!!

Сообщение отредактировал Alex_STЧетверг, 03.03.2011, 10:14

 

Ответить

KuklP

Дата: Четверг, 03.03.2011, 10:32 |
Сообщение № 17

Группа: Проверенные

Ранг: Старожил

Сообщений: 2369


Репутация:

486

±

Замечаний:
0% ±


2003-2010

Смотри.

Quote

Если одномерный, то почему не ругается UBound по второму измерению? А если двумерный, то почему не ругается UBound без указания измерения?

Многомерный массив без указания размерности вернет UBound первой размерности. Можешь проверить.

К сообщению приложен файл:

2519470.gif
(10.9 Kb)


Ну с НДС и мы чего-то стoим! kuklp60@gmail.com
WM Z206653985942, R334086032478, U238399322728

Сообщение отредактировал KuklPЧетверг, 03.03.2011, 10:36

 

Ответить

0 / 0 / 0

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

Сообщений: 12

1

Узнать количество объединенных ячеек

07.07.2010, 18:35. Показов 19960. Ответов 8


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

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



0



0 / 0 / 0

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

Сообщений: 12

07.07.2010, 18:36

 [ТС]

2

ссори, речь идет про Exel



0



vlth

14 / 14 / 2

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

Сообщений: 635

07.07.2010, 18:48

3

Например (аналогично строки):

Visual Basic
1
2
3
4
For Each oColumn In Cells.Columns
    If oColumn.MergeCells = True Then i = i + 1
Next oColumn
MsgBox i

Или хотелось обойтись без перебора? — по-моему, это невозможно.



0



0 / 0 / 0

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

Сообщений: 12

07.07.2010, 19:27

 [ТС]

4

хотелось без перебора думал свойство какое есть и я его не знаю.
все равно спасибо.



0



0 / 0 / 0

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

Сообщений: 12

07.07.2010, 22:40

 [ТС]

5

ActiveCell.MergeArea.Cells.Count



0



1121 / 229 / 36

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

Сообщений: 698

08.07.2010, 10:25

6

ActiveCell.MergeArea.Cells.Count выдаст общее значение ячеек т.е. строки*столбцы.Для строк или столбцов нужно добавить Rows или Columns в приведенный выше код.



0



0 / 0 / 0

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

Сообщений: 12

08.07.2010, 12:02

 [ТС]

7

Да так и есть, Всем спасибо



0



14 / 14 / 2

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

Сообщений: 635

08.07.2010, 12:37

8

Я понял вопрос так, что имелось ввиду определение количества
объединённых строк (столбцов) в произвольном диапазоне, включающем
как объединённые, так и обычные ячейки?



0



0 / 0 / 0

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

Сообщений: 12

08.07.2010, 14:18

 [ТС]

9

Не совсем так имелось в виду именно количество строк и столбцов в объединенной конкретной ячейке. Извиняюсь за возможно не правильно поставленный вопос. Задача решена. Спасибо всем кто ответил.



0



  1. Щелкните ячейку, в которой должен выводиться результат.

  2. На вкладке Формулы щелкните Другие функции, наведите указатель мыши на пункт Статистические и выберите одну из следующих функции:

    • СЧЁТЗ: подсчитывает количество непустых ячеек.

    • СЧЁТ: подсчитывает количество ячеек, содержащих числа.

    • СЧИТАТЬПУСТОТЫ: подсчитывает количество пустых ячеек.

    • СЧЁТЕСЛИ: подсчитывает ячейки, отвечающие заданным условиям.

      Совет: Чтобы ввести нескольких условий, используйте вместо этого функцию СЧЁТЕСЛИМН.

  3. Выделите диапазон ячеек и нажмите клавишу RETURN.

  1. Щелкните ячейку, в которой должен выводиться результат.

  2. На вкладке Формулы щелкните Вставить, наведите указатель мыши на пункт Статистические и выберите одну из следующих функции:

    • СЧЁТЗ: подсчитывает количество непустых ячеек.

    • СЧЁТ: подсчитывает количество ячеек, содержащих числа.

    • СЧИТАТЬПУСТОТЫ: подсчитывает количество пустых ячеек.

    • СЧЁТЕСЛИ: подсчитывает ячейки, отвечающие заданным условиям.

      Совет: Чтобы ввести нескольких условий, используйте вместо этого функцию СЧЁТЕСЛИМН.

  3. Выделите диапазон ячеек и нажмите клавишу RETURN.

Like this post? Please share to your friends:
  • Как посчитать количество букв в строке excel
  • Как посчитать количество нулей в строке excel
  • Как посчитать количество букв в excel формула
  • Как посчитать количество нулей в столбце excel
  • Как посчитать количество баллов в excel