Excel поиск ячеек одного цвета

На чтение 3 мин Просмотров 4.4к. Опубликовано 25.11.2021

Содержание

  1. Пример использования
  2. Сортировка по цвету ячеек
  3. Фильтр по цвету ячеек

Функция =ЦВЕТЗАЛИВКИ(ЯЧЕЙКА) возвращает код цвета заливки выбранной ячейки. Имеет один обязательный аргумент:

  • ЯЧЕЙКА — ссылка на ячейку, для которой необходимо применить функцию.

Ниже представлен пример, демонстрирующий работу функции.

Следует обратить внимание на тот факт, что функция не пересчитывается автоматически. Это связано с тем, что изменение цвета заливки ячейки Excel не приводит к пересчету формул. Для пересчета формулы необходимо пользоваться сочетанием клавиш Ctrl+Alt+F9

Пример использования

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

С помощью функции ЦВЕТЗАЛИВКИ все это становится выполнимым. Например, «протяните» данную формулу с цветом заливки в соседнем столбце и производите вычисления на основе числового кода ячейки.

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

Сортировка по цвету ячеек

Пример данных, которые необходимо отсортировать относительно цвета заливки ячеек изображен ниже на рисунке:

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

  • Щелкните на любую ячейку в области диапазона данных и выберите инструмент: «ДАННЫЕ»-«Сортировка и фильтр»-«Сортировка».

Поиск по цвету ячейки в Excel

  • Убедитесь, что отмечена галочкой опция «Мои данные содержат заголовки», а после чего из первого выпадающего списка выберите значение «Наименование». В секции «Сортировка» выберите опцию «Цвет ячейки». В секции «Порядок» раскройте выпадающее меню «Нет цвета» и нажмите на кнопку зеленого квадратика.

Поиск по цвету ячейки в Excel

  • Нажмите на кнопку «Копировать уровень» и в этот раз укажите желтый цвет в секции «Порядок».

Поиск по цвету ячейки в Excel

  • Аналогичным способом устанавливаем новое условие для сортировки относительно красного цвета заливки ячеек. И нажмите на кнопку ОК.

Поиск по цвету ячейки в Excel

Ожидаемый результат изображен ниже на рисунке:

Аналогичным способом можно сортировать данные по цвету шрифта или типу значка которые содержат ячейки. Для этого достаточно только указать соответствующий критерий в секции «Сортировка» диалогового окна настройки условий.

Фильтр по цвету ячеек

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

  • Перейдите на любую ячейку диапазона и воспользуйтесь инструментом: «ДАННЫЕ»-«Сортировка и фильтр»-«Фильтр».

Поиск по цвету ячейки в Excel

  • Раскройте одно из выпадающих меню, которые появились в заголовках столбцов таблицы и наведите курсор мышки на опцию «Фильтр по цвету».

Поиск по цвету ячейки в Excel

  • Из всплывающего подменю выберите зеленый цвет.

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

Обратите внимание! В режиме автофильтра выпадающие меню так же содержит опцию «Сортировка по цвету»:

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

 

Andy8

Пользователь

Сообщений: 8
Регистрация: 15.02.2019

Всех приветствую!
Есть табл. Х столбцов х Х строк с числами в рублях. Часть ячеек в табл. заливают разными цветами вручную. Фрагмент такой табл. прикрепил. В реальности диапазон на много больше.
Есть ли способ найти и выделить все ячейки с определенной заливкой? В идеале бы еще скрыть строки, не содержащие ячеек, выделенных заданным цветом.

Изменено: Andy830.09.2021 14:26:17

 

vikttur

Пользователь

Сообщений: 47199
Регистрация: 15.09.2012

Вас устроит ответ — можно? Если нет —  ознакомьтесь с правилами форума и прикрепите к первому сообщению пример

 

БМВ

Модератор

Сообщений: 21376
Регистрация: 28.12.2016

Excel 2013, 2016

#3

30.09.2021 14:44:23

Использовать стандартный поиск (ctrl+f) выбрать формат, там указать заливку. А вот сокрытие строк — это или через фильтр или макросом.

Цитата
vikttur написал:
Если нет —  ознакомьтесь с правилами форума и прикрепите к первому сообщению пример

Вить а что не так?

По вопросам из тем форума, личку не читаю.

 

vikttur

Пользователь

Сообщений: 47199
Регистрация: 15.09.2012

#4

30.09.2021 14:48:51

Цитата
БМВ написал: что не так

Мое сообщение — 13:58:56
Правка первого сообщения — 14:26:17

 

Andy8

Пользователь

Сообщений: 8
Регистрация: 15.02.2019

Я не вижу в этом диалоге выбор ячеек по формату. Excel для mac редуцирован(( Либо, не там ищу?..

 

БМВ

Модератор

Сообщений: 21376
Регистрация: 28.12.2016

Excel 2013, 2016

#6

30.09.2021 14:54:34

Цитата
Andy8 написал:
Excel для mac редуцирован((

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

По вопросам из тем форума, личку не читаю.

 

БМВ

Модератор

Сообщений: 21376
Регистрация: 28.12.2016

Excel 2013, 2016

#7

30.09.2021 14:57:11

Цитата
vikttur написал:
Мое сообщение — 13:58:56Правка первого сообщения — 14:26:17

Клянусь косяком  (жаль что не скринил) видел файл но Изменено: — там не было, а твое уже было.

По вопросам из тем форума, личку не читаю.

 

vikttur

Пользователь

Сообщений: 47199
Регистрация: 15.09.2012

 

Andy8

Пользователь

Сообщений: 8
Регистрация: 15.02.2019

Вот же ошибся с веткой
2Модератор: перенесите, пжст, в профильную ветку по Mac

 

Jack Famous

Пользователь

Сообщений: 10846
Регистрация: 07.11.2014

OS: Win 8.1 Корп. x64 | Excel 2016 x64: | Browser: Chrome

Здесь тема и помрёт за отсутствием спецов  :D Помянём

Изменено: Jack Famous30.09.2021 15:33:43

Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄

 

VSerg

Пользователь

Сообщений: 370
Регистрация: 01.01.1970

Я конечно далеко не спец, да и не факт что еще актуально. Во вложении вариант. Целевой цвет для поиска ячеек задается заливкой ячейки I7.

Прикрепленные файлы

  • Sample.xlsm (20.38 КБ)

 

Andy8

Пользователь

Сообщений: 8
Регистрация: 15.02.2019

Да это прям спасение!!!
Спасибо вам!
Подскажите, пжст, для чайника — как этот скрипт вставить в мою книгу?

Изменено: Andy803.10.2021 21:01:16

 

VSerg

Пользователь

Сообщений: 370
Регистрация: 01.01.1970

#13

03.10.2021 21:10:05

Цитата
Andy8 написал:
как этот скрипт вставить в мою книгу?

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

Код
Sub main()
Dim lRow As Long
Dim lCol As Long
Dim i As Long
Dim j As Long
Dim wb As Workbook
Dim ws As Worksheet
Dim SelectedRng As Range
Dim HideRow As Boolean
Dim CellColor As Long

Set wb = Application.ThisWorkbook
Set ws = wb.Sheets("Sheet")

lRow = ws.Cells.Find(What:="*", After:=Range("A1"), LookAt:=xlPart, LookIn:=xlFormulas, SearchOrder:=xlByRows, SearchDirection:=xlPrevious, MatchCase:=False).Row
lCol = ws.Cells(1, Columns.Count).End(xlToLeft).Column

CellColor = ws.Range("I7").Interior.Color

For i = lRow To 2 Step -1
    HideRow = True
    For j = 1 To lCol
        If ws.Cells(i, j).Interior.Color = CellColor Then
            If SelectedRng Is Nothing Then
                Set SelectedRng = ws.Cells(i, j)
            Else
                Set SelectedRng = Application.Union(SelectedRng, ws.Cells(i, j))
                SelectedRng.Select
            End If
            HideRow = False
        End If
    Next
    If HideRow = True Then
        Cells(i, j).EntireRow.Hidden = True
    End If
Next
End Sub
 

Andy8

Пользователь

Сообщений: 8
Регистрация: 15.02.2019

Цель использования данного макроса — формирование списка ФИО на оплату. Т.е. в Столбце А указаны ФИО, а последующих столбцах проекты, где эти ФИО участвовали (одни и теже ФИО участвую в разных проектах с разными гонорарами). Проекты плодятся, а ФИО присылают отчеты не сразу. По мере получения отчетов, ячейка на пересечении проекта и ФИО отмечается желтым в ручном режиме. Как-то так…

Но у меня проблема:
Я перенес макрос в свою книгу. Поменял ячейку с образцом цвета (в макросе в 2-х местах исправил). Но при попытке запустить макрос из меню получаю ошибку — см. Что я делаю не правильно?

 

VSerg

Пользователь

Сообщений: 370
Регистрация: 01.01.1970

Предположу, что забыли поменять имя листа. Замените в строке Set ws = wb.Sheets(«Sheet») текст в кавычках на название вашего листа с данными.

 

Andy8

Пользователь

Сообщений: 8
Регистрация: 15.02.2019

Да, вы правы — заработало!) Подскажите, пжст, как удовлетворить таким условиям:
1. «образцовая» ячейка в А1
2. диапазон для поиска ячеек со строки 3 и ниже (т.к. в строках 1-2 — заголовки)

 

VSerg

Пользователь

Сообщений: 370
Регистрация: 01.01.1970

#17

04.10.2021 05:53:00

Цитата
Andy8 написал:
1. «образцовая» ячейка в А1.

вместо

Код
CellColor = ws.Range("I7").Interior.Color

подставить

Код
CellColor = ws.Range("A1").Interior.Color

Цитата
Andy8 написал:
2. диапазон для поиска ячеек со строки 3 и ниже (т.к. в строках 1-2 — заголовки)

вместо

Код
For i = lRow To 2 Step -1

подставить

Код
For i = lRow To 4 Step -1

Должно помочь.

 

Andy8

Пользователь

Сообщений: 8
Регистрация: 15.02.2019

#18

04.10.2021 11:37:38

Цитата
VSerg написал: подставить
For i = lRow To 4 Step -1
Должно помочь.

Подставил «3» — все идеально! Спасибо вам!

Содержание

  1. Как в офисе.
  2. Вам также могут быть интересны следующие статьи
  3. Excel — выборка ячеек по цвету заливки
  4. December 15, 2013
  5. Режим “Разработчик” в Excel
  6. Вставка готовых функций в Excel VBA
  7. Функция подсчета количества ячеек
  8. Функция подсчета суммы ячеек
  9. Описание рабочей формулы
  10. Красивая функция trackBy
  11. Excel поиск ячеек одного цвета
  12. Быстро найти все ячейки с определенным форматированием в Excel
  13. Kutools for Excel
  14. Kutools for Excel

Как в офисе.

Все мы знаем, как пользоваться инструментом «Найти и заменить» в Excel, чтобы найти определенное значение в книге. Иногда возникает необходимость просто выделить значения, которые нашел Excel.

В нашем примере фрагмент выгруженного отчета из системы управления производством, в котором система отделила тысячный разряд точкой «.». Нам необходимо найти и выделить все значения, в которых присутствует точка.

Для начала воспользуемся инструментом «Найти и заменить», чтобы определить все ячейки с вхождением точки в значение. Для этого перейдем по вкладке Главная -> Редактирование —> Найти и выделить -> Найти. В появившемся диалоговом окне, ставим точку в поле поиска и жмем Найти далее.

При открытом диалоговом окне, нажмите Ctrl+A на клавиатуре. Это действие приведет не только к выделению всего списка найденных значений в диалоговом окне, но и выделит все найденные ячейки на листе.

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

Данный подход также применим, когда вам необходимо найти и выделить все вешние ссылки, находящиеся в ячейках книги. Для этого, вместо того чтобы искать точку, вам требуется найти квадратную скобку «[».

Почему открывающуюся квадратную скобку? Потому что Excel использует квадратные скобки [] для указания источника данных внешних ссылок.

Обратите внимание, что в этом случае Excel не найдет внешние ссылки, спрятанные в объектах или именованных диапазонах.

Вам также могут быть интересны следующие статьи

Источник

Excel — выборка ячеек по цвету заливки

December 15, 2013

На работе столкнулся с такой задачей — имеется таблица в Excel, в которой ведется табель выходов рабочих в цеху.

В таблице подсчитывается количество часов, фактически отработанных; часов переработки и часов сверх нормы. Так вот, необходимо сделать так, чтобы производилась автоматическая выборка ячеек таблицы по цвету заливки последних.

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

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

В Excel нет встроенных (готовых) инструментов для выборки подобного рода; можно отбирать ячейки только по одному условию — по значению, находящемуся в них. Поэтому решение задачи получалось только одно — через VBA (пользовательские функции).

Прекрасное и готовое решение моей задачи я нашел на сайте http://www.excel-vba.ru/. Даже не одно, а целых два решения, под разные условия. Ниже привожу последовательность шагов, которые привели меня к успеху.

Сразу скажу, что изображения были сделаны в Excel 2007. В Excel 2010 все несколько по другому, но запутаться невозможно, если что.

Режим “Разработчик” в Excel

Первое, что нужно сделать — заставить Excel работать с пользовательскими функциями. Фактически, мы будем писать сценарий на языке VBA в Excel, но такая возможность по умолчанию отключена в этой программе. Включить ее можно следующим образом.

Переходим в “Пуск — Параметры Excel” и находим в левом списке пункт “Надстройки”:

Выбираем в основном окне строчку “Пакет анализа — VBA” и жмем кнопочку “Перейти” в самом низу окна. Откроется еще одно окошко со списком доступных под Excel расширений (надстроек). Снова выбираем в этом списке “Пакет анализа — VBA” и соглашаемся, что хотим установить его, нажав кнопку “ОК”:

Потребуется установочный диск с Microsoft Office на нем (или же подключение к Интернет) чтобы программа получила необходимые пакеты для инсталляции. Если установка прошла успешно, то в “Ленте” появиться пункт “Разработчик” (Excel 2010). Можно перейти в него через эту панель или же с помощью сочетания клавиш Alt + F11 .

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

Вставка готовых функций в Excel VBA

Но есть готовые решения, которые я вставлю в виде кода с помощью меню “Insert — Module”. Просто берем отсюда код функций и вставляем в свой Excel. Затем сохраняем файл Excel с поддержкой VBA (макросов) и все готово для дальнейшей работы.

Вставленные функции появятся в списке формул таблицы:

Ниже представлен готовый код двух функций на VBA, написанных их автором Дмитрием Щербаковым. Первая функция с именем “CountByInteriorColor” выполняет подсчет количества ячеек по цвету заливки.

Вторая функция с именем “SumByInteriorColor” выполняет выборку ячеек по цвету заливки и суммирует все значения в этих ячейках.

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

  • — диапазон с ячейками для подсчета
  • — ячейка-образец с цветом заливки
  • — или учитывает скрытые ячейки; , или опущен(по умолчанию) — скрытые ячейки не подсчитываются.

Функция подсчета количества ячеек

Синтаксис этой функции прост:

Функция подсчета суммы ячеек

Синтаксис этой функции следующий:

При вставке пользовательской функции “CountByInteriorColor” и “SumByInteriorColor” можно воспользоваться либо “Мастером функций”, либо произвести указание диапазона ячеек и ячейку-критерий вручную.

Описание рабочей формулы

Готовый пример работы функции “CountByInteriorColor” можно посмотреть на рисунке “Табель выходов с зелеными ячейками”. В нем подсчет отработанного времени производится по следующей формуле:

Фактически эта формула получается такой (смотри строку №13 на рисунке):

Думаю, что больше сказать по поводу создания (точнее — вставки готового решения) пользовательских функций и способа выборки ячеек в таблице по цвету их заливки мне нечего.

Красивая функция trackBy

Пример красивой функции trackBy для Angular. Функция понравилась своей лаконичностью:<% highlight typescript %>public trackByNumber = (_. … Continue reading

Источник

Excel поиск ячеек одного цвета

Быстро найти все ячейки с определенным форматированием в Excel

Kutools for Excel

  • Обзор
  • Бесплатная загрузка
  • Купить сейчас
  • Учебники по функциям
  • Что нового?

Чтобы найти и выделить все выделенные или не выделенные жирным шрифтом ячейки в выделении, на листе или в книге, выполните следующие действия:

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

Функции: если вы хотите найти ячейки на листе или в книге, щелкните прямо Кутулс > Найти> Супер находка включить Супер находка функцию.

2. В Супер находка панели, выполните следующие операции:

(1.) Щелкните кнопка, чтобы активировать это Формат ячейки вариант;

(2.) Затем выберите одну область поиска из В раскрывающийся список, в данном случае я выбираю Выбор;

(3.) Затем выберите Жирные клетки or Нежирные ячейки в Тип выпадающий список по мере необходимости;

(4.) Затем щелкните Найдите кнопка для поиска всех указанных вами относительных ячеек;

(5.) Все определенные ячейки отображаются в списке, а затем в Выбрать по выпадающий список, выберите Клетки/Ряды/Колонны как вам нужно, и щелкните Выбрать кнопку, чтобы выделить их по ячейкам, рядам столбцов.

3. Затем все выделенные жирным или не жирным шрифтом ячейки были выбраны, как показано на следующем снимке экрана:

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

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

2. В Супер находка панель, пожалуйста, сделайте следующее:

(1.) Щелкните кнопка, чтобы активировать это Формат ячейки вариант;

(2.) Затем выберите одну область поиска из раскрывающегося списка Внутри, в данном случае я выбираю Выбор;

(3.) Затем выберите Объединенные ячейки в Тип раскрывающийся список;

(4.) Затем щелкните Найдите кнопка для поиска всех объединенных ячеек;

(5.) Все объединенные ячейки отображаются в списке, затем выберите выбранный тип из Выбрать по в раскрывающемся списке и нажмите Выбрать кнопка для выбора относительных ячеек по ячейкам, строкам или столбцам.

3. Затем все объединенные ячейки выбранного диапазона были выбраны, как показано на следующем снимке экрана:

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

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

1. Выберите диапазон ячеек, в котором вы хотите найти все ячейки с определенным шрифтом или цветом фона, а затем щелкните Кутулс > Найдите > Супер находка для активации Супер находка панель.

2. В Супер находка панель, пожалуйста, сделайте следующее:

(1.) Щелкните кнопка, чтобы активировать это Формат ячейки вариант;

(2.) Затем выберите одну область поиска из раскрывающегося списка Внутри, в данном случае я выбираю Выбор;

(3.) Затем выберите Цвет шрифта or Фоновый цвет в Тип раскрывающийся список;

(4.) Продолжайте нажимать кнопка для выбора ячейки с определенным шрифтом или цветом фона, по которому вы хотите найти ячейки;

(5.) Затем щелкните Найдите кнопка для поиска во всех ячейках с определенным шрифтом или цветом фона;

(6.) Все ячейки с определенным цветом шрифта или цветом фона отображаются в поле списка, затем щелкните значок Выбрать кнопку, чтобы выбрать их после выбора одного типа выбора из Выбрать по выпадающий список.

3. И все ячейки с указанным шрифтом или цветом фона были найдены и выделены сразу, см. Снимок экрана:

Заметки:

1. Эта полезная функция также может помочь вам найти все ячейки с другим определенным форматированием, например ячейки курсивом, ячейки с зачеркиванием, ячейки с формулами, ячейки с комментариями и т. Д.

2. Супер находка панель можно изменять и перемещать по своему усмотрению.

Kutools for Excel: с более чем 300 удобными надстройками Excel, которые можно попробовать бесплатно без каких-либо ограничений в 30 дней. Загрузите и бесплатную пробную версию прямо сейчас!

Kutools for Excel

Описанная выше функциональность — лишь одна из 300 мощных функций Kutools for Excel.

Предназначен для Excel(Office) 2021, 2019, 2016, 2013, 2010, 2007 и Office 365. Бесплатно скачать и использовать в течение 60 дней.

Источник

0 / 0 / 0

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

Сообщений: 9

1

Поиск ячейки по цвету

18.08.2014, 04:33. Показов 25918. Ответов 15


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

такой вопрос, как можно выполнить поиск ячейки по цвету?

имеется лист на котором вразнобой есть желтые, зеленые и красные ячейки.
необходимо переместить все желтые в 9й столбец, зеленые во 11й, красные в 13й.

поиск осуществляется по строкам начиная со 2й.



0



3827 / 2254 / 751

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

Сообщений: 5,928

18.08.2014, 09:49

2

файл приложите. вручную напишите что и где должно получиться.



0



0 / 0 / 0

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

Сообщений: 9

18.08.2014, 15:38

 [ТС]

3

количество желтых зеленых и красных ячеек в одной строке не всегда одинаково и может различаться.
размер файла может быть гораздо больше данного примера.



0



0 / 0 / 0

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

Сообщений: 9

20.08.2014, 19:51

 [ТС]

4

идей нет?

Добавлено через 7 минут
можно ли вообще искать ячейку по цвету или стоит пойти другим путем?

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



0



5942 / 3154 / 698

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

Сообщений: 10,524

20.08.2014, 20:46

5

По какому принципу происходит раскраска?



0



0 / 0 / 0

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

Сообщений: 9

21.08.2014, 20:29

 [ТС]

6

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

Так как в VB я полный 0 =) (возможно уже не полный, 3 дня его учу )) ), то написание кода идет медленно.
Закончу , выложу на корректировку.



0



414 / 262 / 82

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

Сообщений: 860

21.08.2014, 21:14

7

Так если строку надо делить на 3 зачем тогда цвет?



0



Феррим

0 / 0 / 0

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

Сообщений: 9

22.08.2014, 04:57

 [ТС]

8

изначально планировал по цвету определять так как количество ячеек каждого цвета может быть разным (хотя в 90% случаев они одинаковы).
но сам не понял какой командой можно определить цвет ячейки и никто не подсказал (склоняюсь к мысли что цвет ячейки на VB определить невозможно)
поэтому, изходя из того что в большинстве случаев количество ячеек по цвету в одной строке одинаково, а цвета всего 3, то и решил делить на 3.
единственно что в этом случае результат потребует некоторой ручной правки.
Но в документе из 2х тысяч строк доправить вручную 20-30 строк это уже мелочи )

Добавлено через 7 минут
вот собствеено на какой стадии находится код в данный момент

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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
Sub work()
 
Dim b As Range
 
    Dim столбец As Integer ' номер столбца
    Dim строка As Integer ' номер строки
    столбец = 1
    строка = 9
    
Range("I9").Select ' выбираем 1ю ячейку с данными
 
' Считаем количество непустых ячеек в строке
 
    Dim a As Boolean
    Dim i As Integer
    Dim j As Integer ' переменная для подсчета количества добавляемых строк
    Dim k As Integer ' переменная для подсчета строк
    Dim d As Double
    Dim c As Range
    
    k = 9
    j = 0
    i = 1
    a = True
    Set c = Range(ActiveCell.Address)
    c.Select
    d = c.Value
    c.Value = d
    While (a = True)
        ActiveCell.Offset(0, 1).Select
        If (IsEmpty(ActiveCell.Value) = False) Then
            Set c = Range(ActiveCell.Address)
            i = i + 1
            c.Select
            d = c.Value
            c.Value = d
        Else
            a = False
        End If
    Wend
    
    MsgBox i
' Считаем количество добавляемых строк
 
j = i / 3 - 1
 
' Добавляем нужное количество строк
 
While (j <> 0)
    Rows(k + 1).Select
    Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
    j = j - 1
Wend
 
' Перемещаем данные
 
j = i / 3 - 2
Dim пс As Integer ' проверка строки
пс = строка
Columns("I:N").Select ' Выделяем рабочие столбцы
Set b = Selection
' координаты для сдвига активной ячейки
Dim x As Integer
Dim y As Integer
y = 0
x = 2
строка = строка + 1
Range("I9").Select
While (j <> 0)
        ActiveCell.Offset(y, x).Select
            Set c = Range(ActiveCell.Address)
            c.Select
            MsgBox "Выбрано значение"
            Selection.Cut
            b(строка, столбец).Select
            ActiveSheet.Paste
            
            If (столбец = 1) Then
            x = x + 1
            Else
            x = x - 1
            End If
            
            
            
            If (пс = строка) Then
                строка = строка + 1
                столбец = столбец - 1
                x = x + 1
            Else
                
                y = y - 1
                пс = пс + 1
                столбец = столбец + 1
            End If
                
            j = j - 1
                        
        Wend
 
MsgBox "Работа выполнена."
 
End Sub

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

Добавлено через 11 минут
есть ли возможность точного выбора ячейки по относительным координатам которые будут задаваться переменными?
или только путем сдвига от текущей?
можно ли как-то задать диапазон типа Range (переменная).Select чтоб выбрать именно ту ячейку на которую укажет эта переменная, а не пытаясь с помощью сдвига на нее выскочить?

заранее благодарен за ответ



0



kalbasiatka

414 / 262 / 82

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

Сообщений: 860

22.08.2014, 09:05

9

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

Решение

Можно и по цвету, но зачем?
Вариант:

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
27
28
29
30
31
32
33
34
35
36
37
38
Sub tp() 'tp - подстанция (я так думаю) не путать с чем другим
    Dim a(), b()
    Dim i%, ii%, x%, part1%, part2%
    With Sheets("Лист1") 'с листом лист1
        a = .UsedRange.Value 'берём в массив рабочий диапазон (как ctr+shift+end)
    End With
    ReDim b(1 To 10000, 1 To 14) 'перезаписываем массив b() на 10000 строк например
    ii = 1 'счётчик строк массива b()
    For i = 2 To UBound(a) 'проходим по массиву а() - "строки"
        For j = 1 To 7 'идём по "колонкам" первые 7 элементов
            b(ii, j) = a(i, j) 'пишем в массив b()
        Next
        'считаем кол-во ячеек на строку начиная с 9й колонки
        x = 0 'сбрасываем счётчик кол-ва ячеек
        For j = 9 To UBound(a) 'идём по колонкам с 9 и до конца массива
            If a(i, j) = "" Then Exit For 'если дошли до пусто то выходим из цикла
            x = x + 1 'если не пусто увеличиваем счётчик на ед
        Next
        part1 = x / 3 'границы для жёлтого
        part2 = part1 * 2 'граница для красного
        If x <> 0 Then 'если была загрузка то
            For j = 9 To 9 + part1 - 1 Step 2 'идём по строке с 9 по 14 колонку с шагом 2
                'пишем в массив b()
                b(ii, 9) = a(i, j) 'жёлтый
                b(ii, 10) = a(i, j + 1) 'жёлтый + 1
                b(ii, 11) = a(i, j + part1) 'зелёный
                b(ii, 12) = a(i, j + part1 + 1) 'зелёный + 1
                b(ii, 13) = a(i, j + part2) 'красный
                b(ii, 14) = a(i, j + part2 + 1) 'красный + 1
                ii = ii + 1 'увеличиваем счётчик строк массива b()
            Next
        'если загрузки нет 0%
        Else: ii = ii + 1 'увеличиваем счётчик строк массива b()
        End If
    Next
    'выгружаем массив b() на лист 2
    Sheets("Лист2").Cells(2, 1).Resize(UBound(b), 14) = b
End Sub



1



3827 / 2254 / 751

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

Сообщений: 5,928

22.08.2014, 09:09

10

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

Решение

Цитата
Сообщение от Феррим
Посмотреть сообщение

командой можно определить цвет ячейки

Код

Range("A1").Interior.Color



1



0 / 0 / 0

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

Сообщений: 9

23.08.2014, 01:56

 [ТС]

11

класс! засунуть все в массив там обработать и вывести на другой лист я не додумался ).
так как массив а это рабочий диапазон, то в строке 16 пустая ячейка самой длинной строки выходит за его границу

Добавлено через 2 часа 16 минут
как сделать чтоб он, получая ошибку выхода за границы массива просто выходил из цикла и продолжал работу?



0



kalbasiatka

414 / 262 / 82

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

Сообщений: 860

23.08.2014, 09:15

12

У меня ошибка )
Размерность не ту взял, замените строку или дописать «, 2»

Visual Basic
1
For j = 9 To UBound(a, 2) 'идём по колонкам с 9 и до конца массива



1



0 / 0 / 0

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

Сообщений: 9

23.08.2014, 17:49

 [ТС]

13

огромное спасибо!
попытаюсь терь сделать чтом массив и цвет ячейки сохранял и при переносе на новый лист восстанавливал



0



414 / 262 / 82

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

Сообщений: 860

23.08.2014, 20:28

14

А зачем? ведь в итоге всегда 3 цветных колонки. Сразу их разрисовать и делов то.



0



0 / 0 / 0

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

Сообщений: 9

23.08.2014, 22:33

 [ТС]

15

иногда бывает что желтых в строке больше чем красных и зеленых (или наоборот), и тогда макрос неправильно разносит эту строку. В ручную это поправить не составит труда (таких строк 1 на тысячу), но без цвета (среди 5ти тысяч строк) найти это место несколько проблематично.
Как я понимаю надо сделать еще 1 массив который заполнить цветом ячеек и при заполнении второго листа из этого массива, сначала, закрашивать ячейку? Прошу просто подсказать а не писать код ) должен же я сам хоть что-то сделать ).
Спасибо.

Добавлено через 5 минут
еще вопрос, что означает знак % после переменной в 3й строке?



0



3827 / 2254 / 751

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

Сообщений: 5,928

24.08.2014, 17:36

16

Цитата
Сообщение от Феррим
Посмотреть сообщение

что означает знак % после переменной в 3й строке?

Символ определения типа



0



На работе столкнулся с такой задачей — имеется таблица в Excel, в которой ведется табель выходов рабочих в цеху.

В таблице подсчитывается количество часов, фактически отработанных; часов переработки и часов сверх нормы. Так вот, необходимо сделать так, чтобы производилась автоматическая выборка ячеек таблицы по цвету заливки последних.

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

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

Табель выходов с зелеными ячейками

В Excel нет встроенных (готовых) инструментов для выборки подобного рода; можно отбирать ячейки только по одному условию — по значению, находящемуся в них. Поэтому решение задачи получалось только одно — через VBA (пользовательские функции).

Прекрасное и готовое решение моей задачи я нашел на сайте http://www.excel-vba.ru/. Даже не одно, а целых два решения, под разные условия. Ниже привожу последовательность шагов, которые привели меня к успеху.

Сразу скажу, что изображения были сделаны в Excel 2007. В Excel 2010 все несколько по другому, но запутаться невозможно, если что.

Первое, что нужно сделать — заставить Excel работать с пользовательскими функциями. Фактически, мы будем писать сценарий на языке VBA в Excel, но такая возможность по умолчанию отключена в этой программе. Включить ее можно следующим образом.

Переходим в “Пуск — Параметры Excel” и находим в левом списке пункт “Надстройки”:

Excel - надстройка VBA

Выбираем в основном окне строчку “Пакет анализа — VBA” и жмем кнопочку “Перейти” в самом низу окна. Откроется еще одно окошко со списком доступных под Excel расширений (надстроек). Снова выбираем в этом списке “Пакет анализа — VBA” и соглашаемся, что хотим установить его, нажав кнопку “ОК”:

Excel - Пакет анализа VBA

Потребуется установочный диск с Microsoft Office на нем (или же подключение к Интернет) чтобы программа получила необходимые пакеты для инсталляции. Если установка прошла успешно, то в “Ленте” появиться пункт “Разработчик” (Excel 2010). Можно перейти в него через эту панель или же с помощью сочетания клавиш Alt + F11.

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

Вставка готовых функций в Excel VBA

Но есть готовые решения, которые я вставлю в виде кода с помощью меню “Insert — Module”. Просто берем отсюда код функций и вставляем в свой Excel. Затем сохраняем файл Excel с поддержкой VBA (макросов) и все готово для дальнейшей работы.

Вставленные функции появятся в списке формул таблицы:

Excel - пользовательские функции

Ниже представлен готовый код двух функций на VBA, написанных их автором Дмитрием Щербаковым. Первая функция с именем “CountByInteriorColor” выполняет подсчет количества ячеек по цвету заливки.

Вторая функция с именем “SumByInteriorColor” выполняет выборку ячеек по цвету заливки и суммирует все значения в этих ячейках.

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


  • 1
    
    rRange
    

    — диапазон с ячейками для подсчета


  • 1
    
    rColorCell
    

    — ячейка-образец с цветом заливки


  • 1
    
    bSumHide
    

    1
    
    ИСТИНА
    

    или

    1
    
    1
    

    учитывает скрытые ячейки;

    1
    
    ЛОЖЬ
    

    ,

    1
    
    0
    

    или опущен(по умолчанию) — скрытые ячейки не подсчитываются.

Функция подсчета количества ячеек

'---------------------------------------------------------------------------------------
' Procedure : CountByInteriorColor
' Author    : The_Prist(Щербаков Дмитрий)
'             http://www.excel-vba.ru
' Purpose   : Функция подсчета ячеек на основе цвета заливки.
' Аргументы:
'             rRange     - диапазон с ячейками для подсчета.
'             rColorCell - ячейка-образец с цветом заливки.
'             bSumHide   - ИСТИНА или 1 учитывает скрытые ячейки.
'                          ЛОЖЬ, 0 или опущен(по умолчанию) - скрытые ячейки не подсчитываются.
'---------------------------------------------------------------------------------------
Function CountByInteriorColor(rRange As Range, rColorCell As Range, Optional bSumHide As Boolean = False)
  Dim lColor As Long, rCell As Range, lCnt As Long, vVal
  lColor = rColorCell.Interior.Color
  For Each rCell In rRange
      If rCell.Interior.Color = lColor Then
          If rCell.EntireRow.Hidden Or rCell.EntireColumn.Hidden Then
              If bSumHide Then lCnt = lCnt + 1
          Else
              lCnt = lCnt + 1
          End If
      End If
  Next rCell
  CountByInteriorColor = lCnt
End Function

Синтаксис этой функции прост:

=CountByInteriorColor(D8:AG8;$E$65)

Функция подсчета суммы ячеек

'---------------------------------------------------------------------------------------
' Procedure : SumByInteriorColor
' Author    : The_Prist(Щербаков Дмитрий)
'             http://www.excel-vba.ru
' Purpose   : Функция суммирования ячеек на основе цвета заливки.
' Аргументы:
'             rRange     - диапазон с ячейками для суммирования.
'             rColorCell - ячейка-образец с цветом заливки.
'             bSumHide   - ИСТИНА или 1 учитывает скрытые ячейки.
'                          ЛОЖЬ, 0 или опущен(по умолчанию) - скрытые ячейки не суммируются.
'---------------------------------------------------------------------------------------
Function SumByInteriorColor(rRange As Range, rColorCell As Range, Optional bSumHide As Boolean = False)
  Dim lColor As Long, rCell As Range, dblSum As Double, vVal
  lColor = rColorCell.Interior.Color
  For Each rCell In rRange
      If rCell.Interior.Color = lColor Then
          vVal = rCell.Value
          If IsNumeric(vVal) Then
              If rCell.EntireRow.Hidden Or rCell.EntireColumn.Hidden Then
                  If bSumHide Then dblSum = dblSum + vVal
              Else
                  dblSum = dblSum + vVal
              End If
          End If
      End If
  Next rCell
  SumByInteriorColor = dblSum
End Function

Синтаксис этой функции следующий:

=SumByInteriorColor(D8:AG37;E63)

При вставке пользовательской функции “CountByInteriorColor” и “SumByInteriorColor” можно воспользоваться либо “Мастером функций”, либо произвести указание диапазона ячеек и ячейку-критерий вручную.

Описание рабочей формулы

Готовый пример работы функции “CountByInteriorColor” можно посмотреть на рисунке “Табель выходов с зелеными ячейками”. В нем подсчет отработанного времени производится по следующей формуле:

=((Сумма фактически отработанных часов) - (Норма часов выхода за месяц)) + ((Кол-во дней с переработкой)*4)

Фактически эта формула получается такой (смотри строку №13 на рисунке):

=(AH13-AI13) + (CountByInteriorColor(D13:AG13;$E$65)*4)

Думаю, что больше сказать по поводу создания (точнее — вставки готового решения) пользовательских функций и способа выборки ячеек в таблице по цвету их заливки мне нечего.


Like this post? Please share to your friends:
  • Excel поиск элемента в столбце
  • Excel поиск строки на листе
  • Excel поиск числовых значений
  • Excel поиск строки в файле
  • Excel поиск числа строке