2014-12-05 3 views
1

Я собрал ежемесячный отчет, содержащий столбец с уникальными именами. Я использую формулу для подсчета количества уникальных имен, перечисленных в каждом месяце (например, если бы три записи для Смита, Сара и две для Джонса, Марта, формула дала бы мне 2). Формула, которую я использую, - =SUMPRODUCT((B5:B46<>"")/COUNTIF(B5:B46,B5:B46&"")), и она прекрасно работает. Список есть и должен оставаться отсортированным по дате, а не по имени.Excel 2007 - подсчет уникальных значений на нескольких рабочих листах

С приближением конца года я хотел бы составить ежегодное резюме, в том числе количество уникальных имен, появившихся в течение года. У меня это создано как книга, с отдельными листами за каждый месяц. То, что я ищу, - это метод подсчета уникальных имен, которые появляются на этих двенадцати листах (так что если в январе была одна запись для Смита, Сары и Джонса, Марты и две для Смита, Сары и одна для Джонса, Марта в феврале, я все равно получаю 2 в качестве своего результата).

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

ответ

0

Вставляет ли все имена на одном листе вариант? Если это так, вставьте все имена из 12 листов в один и тот же столбец на отдельном листе, как только закончите, просто создайте сводную таблицу, добавив имена в качестве меток столбцов, это даст вам список всех уникальных имен за 12 месяцев, поэтому просто сделайте формулу counta в этом списке, вычитая заголовок и общую строку, и вы получите ответ.

EDIT вот код, как и обещал быстро составить список:

Sub compile() 

ws = Array("Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec") 

Sheets("Summary").Range("A1", Range("A1000000").End(xlUp)).ClearContents 

For Each sh In ws 
    Sheets(sh).Select 
    Sheets(sh).Range("A2", Range("A1000000").End(xlUp)).Copy 
    Sheets("Summary").Range("A1000000").End(xlUp).Offset(1, 0).PasteSpecial 
Next 

Sheets("Summary").Select 

' End Sub

он будет работать до тех пор, как закладка объединенным называется „Резюме“ и все ежемесячные вкладки в виде строки массива, которые вы можете изменить, каковы ваши фактические имена вкладок. он скопирует все данные из каждого из 12 листов из столбца «A», начиная с ячейки «A2» и вставляя друг под друга на вкладку «Сводка». Обратите внимание, что это не будет работать в Excel 2003, если у вас есть Excel 2003, просто измените все ссылки «A1000000» на «A65500»

+0

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

+0

Да, такое же предложение у меня было. Он должен работать. Временный лист для расчета. Это не самый логичный/практический способ сделать это, но для других подходов потребуется больше работы и знаний визуального базового. –

+0

Это выглядит как лучший вариант. Я надеялся на то, что будет обновляться автоматически, но если я создам массивную таблицу и привяжу данные за каждый месяц к ее сегменту, чтобы он обновлялся по мере добавления записей до декабря, это должно позаботиться об этом. Эта последняя страница не должна быть такой же красивой и презентабельной, как ежемесячные листы. –

0

Предполагая, что все имена находятся в одной колонке и отсортированы.

Вы можете начать с первой ячейки и сравнить, если эта ячейка равна предыдущей ячейке (это не так, потому что нет предыдущей).

Идти вперед, если имя, которое появляется в следующей ячейке, совпадает с предыдущим, не добавляйте 1 к сумме. Если он отличается, добавьте 1 к сумме и продолжайте дальше.

В конце сумма будет содержать количество уникальных имен.

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

+0

Это не сработает, так как не проверяет uniques на всех листах – Raugmor

+1

Я думал, что это требование было проверить уникальность на одном листе? Если это по листам, я не могу придумать способ сделать это легко. Единственный простой способ - скопировать все записи на один лист, отсортировать их и применить ту же логику. –

+0

К сожалению, список (и должен быть) отсортирован по дате, а не по имени. И, как сказал Раугмор, это только число на листе, на которое у меня уже есть формула. –

Смежные вопросы