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

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

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

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

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

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 23.10.2007, 17:12   #1
mik
Пользователь
 
Регистрация: 23.10.2007
Сообщений: 12
По умолчанию Подсчёт непустых клеток

Ситуация: с помощью формулы
Код:
 =IF(B2>10,"1",IF(B2<10,"1*",""))
получаю в нужной клетке или 1 или 1* или пустоту (если условия не выполняется).

Проблема: нужно подсчитать количество непустых клеток содержащих такую формулу (фактически сумму всех единиц, но из-за необходимости отобразить 1* приходится превращать все единицы в текст).

sum() не работает из-за текстового значения в клетке
counta() реагирует на формулу в клетке и воспринимает её как непустую даже когда значение в клетке ""

Есть способ подсчитать непустые клетки содержащие текстовое значение чтобы при подсчёте исключались пустые текстовые значения "" ?
Может есть способ с помощью условного форматироавния приклеить к единице звёздочку * а саму единицу оставить числом чтобы при подсчёте пользоваться обычной sum(), поскольку при общем подсчёте звёздочка никак не учитывается?
mik вне форума
Старый 23.10.2007, 18:49   #2
Pavel55
Форумчанин
 
Регистрация: 21.08.2007
Сообщений: 292
По умолчанию

А такая формула не подойдёт?

=СЧЁТЕСЛИ(C2:C30;"=1*")

где диапазон C2:C30 содержит вашу формулу, возвращающую 1, 1* или ""
Pavel55 вне форума
Старый 23.10.2007, 19:33   #3
pashulka
Форумчанин
 
Регистрация: 03.11.2006
Сообщений: 524
По умолчанию

Подсчитать сумму всех единиц можно, например, так (см. ниже), к сожалению, при таком способе подсчёта будут учитываться не только "1", но и 1
=СЧЁТЕСЛИ(A2:A15;"1")
=COUNTIF(A2:A15,"1")

Если этот вариант неприемлем, то подсчитать количество "1" можно воспользовавшись любой из нижеопубликованных формул :

=СУММПРОИЗВ(Ч(A2:A12="1"))
=СУММПРОИЗВ((A2:A12="1")+0)
=СУММПРОИЗВ((A2:A12="1")*1)
=SUMPRODUCT(N(A2:A12="1"))
и т.д.

P.S. Для того, чтобы отобразить число(любое) со звёздочкой, можно выделить необходимый диапазон, затем в меню Формат выбрать команду Ячейки (CTRL+1), выбрать закладку Число, в списке Числовые форматы: выбрать (Все) и в поле Тип: ввести необходимый формат, например Основной"*" или Основной\*
pashulka вне форума
Старый 24.10.2007, 12:59   #4
mik
Пользователь
 
Регистрация: 23.10.2007
Сообщений: 12
По умолчанию

Pavel55: Спасибо. Это интересный вариант. Он позволяет отдельно подсчитать разные результаты (или 1 или 1* или ""). Мне же нужно подсчитать общее количество единиц и единиц со звёздочкой (1 и 1*) и игнорировать при прдсчёте клетки содержащие пустое значение ("").

Пояснение: пустое значение клетки ("") показывает отсутствие объекта, единица (1) определяет наличие объекта, а единица со звёздочкой (1*) помимо наличия объекта указывает на его особые свойства. Нужно подсчитать общее количество объектов с особыми свойствами или без них.
mik вне форума
Старый 24.10.2007, 14:07   #5
mik
Пользователь
 
Регистрация: 23.10.2007
Сообщений: 12
По умолчанию

pashulka:
=COUNTIF(A2:A15,"1") действительно учитывает все единицы, хранящиеся в ячейке как в численном (1) так и в текстовом формате ('1). Но, как и в варианте предложенном Pavel55 единицы со звёздочкой остаются неучтёнными.
С =SUMPRODUCT(N(A2:A12="1")) происходит то же самое.

Формулы
=СУММПРОИЗВ(Ч(A2:A12="1"))
=СУММПРОИЗВ((A2:A12="1")+0)
=СУММПРОИЗВ((A2:A12="1")*1)
если я правильно понимаю, призваны перевести единицы из текстового формата в численный. Опять же, "1*" останется неучтённой.

Форматирование клеток с помощью (Основной"*") или (Основной\*) не эфективно так как для каждой клетки это придётся делать вручную напрягая мозги и отслеживая нужно ли форматировать эту конкретную клетку или нет. И что в этом случае делать если значение в клетке изменилось?

Вобщем, проблему я конечно решил с помощью условного форматирования. Только вместо звёздочки (которой в условном форматировании нет) выбираю жирный фонт с подчёркиванием. А вместо =IF(B2>10,"1",IF(B2<10,"1*","")) поставил =IF(B2=10,"",1). И теперь весь подсчёт делаю с помощью =sum().

А есть способ в условное форматирование вставить свой тип формата чтобы добиться-таки отображения звёздочки?
mik вне форума
Старый 24.10.2007, 14:07   #6
mik
Пользователь
 
Регистрация: 23.10.2007
Сообщений: 12
По умолчанию

pashulka:
=COUNTIF(A2:A15,"1") действительно учитывает все единицы, хранящиеся в ячейке как в численном (1) так и в текстовом формате ('1). Но, как и в варианте предложенном Pavel55 единицы со звёздочкой остаются неучтёнными.
С =SUMPRODUCT(N(A2:A12="1")) происходит то же самое.

Формулы
=СУММПРОИЗВ(Ч(A2:A12="1"))
=СУММПРОИЗВ((A2:A12="1")+0)
=СУММПРОИЗВ((A2:A12="1")*1)
если я правильно понимаю, призваны перевести единицы из текстового формата в численный. Опять же, "1*" останется неучтённой.

Форматирование клеток с помощью (Основной"*") или (Основной\*) не эфективно так как для каждой клетки это придётся делать вручную напрягая мозги и отслеживая нужно ли форматировать эту конкретную клетку или нет. И что в этом случае делать если значение в клетке изменилось?

Вобщем, проблему я конечно решил с помощью условного форматирования. Только вместо звёздочки (которой в условном форматировании нет) выбираю жирный фонт с подчёркиванием. А вместо =IF(B2>10,"1",IF(B2<10,"1*","")) поставил =IF(B2=10,"",1). И теперь весь подсчёт делаю с помощью =sum().

А есть способ в условное форматирование вставить свой тип формата чтобы добиться-таки отображения звёздочки?
mik вне форума
Старый 24.10.2007, 19:59   #7
pashulka
Форумчанин
 
Регистрация: 03.11.2006
Сообщений: 524
По умолчанию

Mik, Совершенно очевидно, что написанные мною формулы, не предназначены для суммирования "1" и "1*", т.е. налицо неверная трактовка поставленной задачи, впрочем, ничто не мешает следующий вариант :
=СУММ(СЧЁТЕСЛИ(A1:A4;{"1";"1~*"}))
=СЧЁТЕСЛИ(A1:A4;"1")+СЧЁТЕСЛИ(A1:A4 ;"1~*")
и т.д.
=SUM(COUNTIF(A1:A4,{"1","1~*"}))
=COUNTIFA1:A4,"1")+COUNTIF(A1:A4,"1 ~*")

Что касается создания пользовательского формата, то можно отформатировать сразу все необходимые ячейки, а при необходимости, и создать свой собственный формат, отличный от представленного. Условное форматирование - не предназначено для решения подобных задач.
pashulka вне форума
Старый 27.10.2007, 13:40   #8
mik
Пользователь
 
Регистрация: 23.10.2007
Сообщений: 12
По умолчанию

pashulka: =SUM(COUNTIF(A1:A4,{"1","1~*"}))

WOW! Интересный вариант! Я не знал, что можно использовать такой синтаксис. Спасибо.
mik вне форума
Закрытая тема


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Подсчёт кол-ва дней ivp88 БД в Delphi 7 14.01.2008 09:16
Подсчёт трафика с сайта Маркъ Работа с сетью в Delphi 3 25.09.2007 10:06
Подсчёт трафика Альберт Работа с сетью в Delphi 2 10.09.2007 11:35
ComboBox - убийца нервных клеток krem Компоненты Delphi 20 15.06.2007 22:07
Подсчёт кол-ва единиц в столбце Freddie_X Microsoft Office Excel 3 10.03.2007 09:38