Суммирование чисел которые находятся в цветной ячейки

Автор Yarik, 1 февраля 2018, 11:04

0 Пользователи и 1 гость просматривают эту тему.

Yarik

#15
Цитата: Bigor от  3 февраля 2018, 21:25Sub summcolor
Dim oSheet As Variant, i As Long
Dim oSelection As Variant, oActiveCell As Variant, oRow As Variant
oSelection = ThisComponent.getCurrentSelection()
oSpreadsheet = oSelection.getSpreadsheet()
sum_byr=0
sum_kr=0
For j =7 To 68
   For i =4 To 16
     Select case oSpreadsheet.getCellByPosition(j, i).CellBackColor
      '3407769
      Case  3407769 ' если бирюзовый
         sum_byr = sum_byr + oSpreadsheet.getCellByPosition(j, i).getvalue
      '16724787
      Case 16724787 ' если красный
         sum_kr = sum_kr + oSpreadsheet.getCellByPosition(j, i).getvalue    
   End Select
   Next i
   If j Mod 2 =0 Then
      oSpreadsheet.getCellByPosition(j-1, 21).setvalue(sum_kr)
      oSpreadsheet.getCellByPosition(j-1, 27).setvalue(sum_byr)
      sum_byr=0
      sum_kr=0   
   End if   
Next j
End Sub


Вот теперь все круто))) Только нужно на три цвета)
Это уже в последний раз)

Yarik

Цитата: economist от  4 февраля 2018, 11:19
А недодумано вот что: если в день две смены и два рабочих места на 3-х работников, - то чтобы посчитать выработку изделий или часы каждому - не нужно использовать цвет,а нужно прямо указывать ФИО в соседней ячейке. Или не умничать и просто взять форму Табеля учета рабочего времени. Эта форма транспонирована и не зря - пересменки, выходы в чужую смену там отлично видны, а все итоги подбиваются обычными формулами вида СУММ().

Цвет может быть, но только как вспомогательная "информация" (его можно получить автоматом - формулой =СТИЛЬ() или автоформатированием. Даже если хочется таблицу как на скрине - суммировать все равно надо по фамилиям, а не по цветам. Для этого есть готовые функции:
СЧЁТЕСЛИ, СУММЕСЛИ, СУММЕСЛИМН итд, которые позволяют реализовать любую задумку. Просто добавьте колонку ФИО.

Спасибо за помощь, возможно действительно лучше переделать таблицу, а то честно говоря уже у самого голова взрывается, буду думать и пробовать

bigor

Цитата: Yarik от  4 февраля 2018, 17:51как узнать код цвета ячейки?

Раскрашиваете а1 на первом листе и запускаете макрос
Sub testcolor
msgbox thiscomponent.sheets(0).getCellByPosition(0,0).CellBackColor
End Sub

Поддержать разработчиков LibreOffice можно можно тут, а наш форум вот тут

Yarik

Цитата: Bigor от  4 февраля 2018, 20:14
Цитата: Yarik от  4 февраля 2018, 17:51как узнать код цвета ячейки?

Раскрашиваете а1 на первом листе и запускаете макрос
Sub testcolor
msgbox thiscomponent.sheets(0).getCellByPosition(0,0).CellBackColor
End Sub



Все !! Наконец разобрался, добавил третий цвет, спасибо большое, все вроде пока так как я хотел))))

bigor

#19
Цитата: Yarik от  3 февраля 2018, 10:03Calc в отличие от Excel - штатно умеет суммировать числа по цвету шрифта.
А как это сделать?
вот попалось на глаза расширение
после установки появляются две новых функции - ЦВЕТФ и ЦВЕТШ, которые возвращают соответственно цвет фона и шрифта в ячейке
Расширение не мое, что там внутри не знаю (как понял на java), на стабильность работы не проверял.
В общим все на свой страх и риск :)
Поддержать разработчиков LibreOffice можно можно тут, а наш форум вот тут

JohnSUN

Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

bigor

#21
Ну раз нашлись первоисточники, то перед использованием полезно посмотреть и о проблемах при применении расширения.

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

JohnSUN

Да, все старые вложения как-то смели, чтобы место на сервере расчистить.
А насчет HEX - файл переехал сюда
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

bigor

Поддержать разработчиков LibreOffice можно можно тут, а наш форум вот тут

Yarik

Цитата: Bigor от  3 февраля 2018, 23:25
но я тоже склоняюсь к мысли, что чего-то изначально у тебя не додумано.

Еще одна мысль появилась, можно сделать так: я в первый столбик (Н5: Н16) ввожу данные, но если в следующей колонке есть закрашенные ячейки то оно автоматически делит пополам столбик Н и вторую часть бросает в столбик І и это все также на месяц ))) ?????

bigor

У тебя на рисунке до -  бирюзовых 6 ячеек, после - уже 7, хотя в описании про это ни слова  ???

Если это ошибка рисования  :), то смотри макрос

Sub razn_color
Dim oSheet As Variant, i As Long
Dim oSelection As Variant, oActiveCell As Variant, oRow As Variant
oSelection = ThisComponent.getCurrentSelection()
oSpreadsheet = oSelection.getSpreadsheet()

For j =7 To 67 Step 2
    For i =4 To 16
     If oSpreadsheet.getCellByPosition(j+1, i).CellBackColor<>-1 Then
      oSpreadsheet.getCellByPosition(j+1, i).setvalue(oSpreadsheet.getCellByPosition(j, i).getvalue/2)
      oSpreadsheet.getCellByPosition(j, i).setvalue(oSpreadsheet.getCellByPosition(j, i).getvalue/2)
     End if
   Next i
  Next j
End Sub

вот результат его работы
Поддержать разработчиков LibreOffice можно можно тут, а наш форум вот тут

Yarik

Цитата: Bigor от  6 февраля 2018, 19:43
У тебя на рисунке до -  бирюзовых 6 ячеек, после - уже 7, хотя в описании про это ни слова  ???

Если это ошибка рисования  :), то смотри макрос

Sub razn_color
Dim oSheet As Variant, i As Long
Dim oSelection As Variant, oActiveCell As Variant, oRow As Variant
oSelection = ThisComponent.getCurrentSelection()
oSpreadsheet = oSelection.getSpreadsheet()

For j =7 To 67 Step 2
    For i =4 To 16
     If oSpreadsheet.getCellByPosition(j+1, i).CellBackColor<>-1 Then
      oSpreadsheet.getCellByPosition(j+1, i).setvalue(oSpreadsheet.getCellByPosition(j, i).getvalue/2)
      oSpreadsheet.getCellByPosition(j, i).setvalue(oSpreadsheet.getCellByPosition(j, i).getvalue/2)
     End if
   Next i
  Next j
End Sub

вот результат его работы

Чет у меня не работатет

bigor

#27
сделай скриншот что бы были видны № строк и имена столбцов
Поддержать разработчиков LibreOffice можно можно тут, а наш форум вот тут

Yarik

Цитата: Bigor от  6 февраля 2018, 21:39
сделай скриншот что бы были видны № строк и имена столбцов

Yarik

Цитата: economist от  7 февраля 2018, 10:45
Цитата: Yarik от  6 февраля 2018, 16:34Еще одна мысль появилась, можно сделать так: я в первый столбик (Н5:Н16) ввожу данные, но если в следующей колонке есть закрашенные ячейки то оно автоматически делит пополам столбик Н и вторую часть бросает в столбик І и это все также на месяц?

Ещё раз скажу: избавляйтесь от мысли использовать цвета, считайте что все вокруг - дальтоники! Потом, спустя время, скажете спасибо.

А то что процитировано - если будет колонка с ФИО - делается банальнейшими формулами и с функциями ЕСЛИ И ИЛИ НЕ, не знать которые - значит не уметь работать вообще. С таким подходом к делу даже "тренироваться" в Calc нельзя, не то что зарплату живым работникам считать - побьют...

Минута осмысления задачи сбережет час при её реализации и месяц при эксплуатации. Цвет - не критерий. Ни одна серьезная учетная система не позволяет использовать цвета как критерий для суммирования/разделения, и это не из-за ЛГБТ и любви к дальтоникам, просто это правильнее и эргономичнее.


Если не трудно, скинь пример, я не полностью понимаю .....