Страницы: 1
RSS
Как посчитать в табеле часы, когда в ячейках цифры и символы написаны вместе?
 
Здравствуйте! Необходимо посчитать в табеле часы. Но в ячейках могут стоять как обычное число, так и совместно с символом "/". Например: " 11/ ддо". Т.е. при сумме чисел необходимо из этой ячейки взять цифру 11 и суммировать с остальными. Но есть еще условие. Если стоит например "6/3" то суммировать нужно как 6 так и 3
Изменено: Дарья - 12.01.2022 17:43:28
 
Если всегда используется "/", то сначала разделять
Код
Split("11/ддо", "/")
Split("6/3","/")

Дальше выходные данные прогонять в цикле через
Код
IsNumeric

и производить дальнейшие вычисления.
 
Формула массива (Ctrl+Shift+Enter)
=СУММПРОИЗВ(ЕСЛИОШИБКА(--ЛЕВСИМВ(C7:AG7;НАЙТИ("/3";C7:AG7)-1);ЕСЛИОШИБКА(--ЛЕВСИМВ(C7:AG7;НАЙТИ("/";C7:AG7)-1);C7:AG7)))
В объединенных ячейках эта формула не работает, поэтому я её прописал в ячейку AH7 и закрасил белым, а в AH8 уже просто на неё сослался.
Изменено: Wiss - 12.01.2022 18:10:39
Я не волшебник, я только учусь.
 
Wiss, Ваш вариант работает замечательно, только еще в дополнение нужно прибавить 3, которая стоит в ячейке R7 после "/". Это обязательное условие. Т.е. где стоят цифры и буквы, считать только цифры, а где стоят одни цифры в таком формате "7/3", то суммировать нужно обе.
 
Цитата
суммировать с остальными.
у меня получилась сумма 179,5. правильно?
 
Цитата
написал:
у меня получилась сумма 179,5. правильно?
Да правильно! Но вот в файле от Wiss получилось 176,5
Изменено: Дарья - 14.01.2022 16:07:50
 
Код
Sub iSumma()
Dim j As Long
Dim iSumma As Double
  For j = 3 To 33 'от C до AG
    If IsNumeric(Cells(7, j)) Then
      iSumma = iSumma + Cells(7, j)
    Else
      If InStr(1, Cells(7, j), "/") > 0 Then
        iSumma = iSumma + Split(Cells(7, j), "/")(0)
          If IsNumeric(Split(Cells(7, j), "/")(1)) Then
            iSumma = iSumma + Split(Cells(7, j), "/")(1)
          End If
      End If
    End If
  Next
    Cells(7, "AH") = iSumma
End Sub
 
Kuzmich, До такого уровня как Вы мне еще расти. Я не умею прописывать пользовательские функции :) Если подскажите куда Вписывать Ваш код, буду очень признательна
Изменено: Дарья - 14.01.2022 16:16:44
 
Код
=СУММ(ФИЛЬТР.XML("<j><i>"&ПОДСТАВИТЬ(ОБЪЕДИНИТЬ("/";1;C7:AG7);"/";"</i><i>")&"</i></j>";"//i[number()=.]"))
Изменено: Тимофеев - 14.01.2022 16:25:45
 
Чуток массивная
=SUM(IFERROR(--LEFT(SUBSTITUTE(C7:AG7;"/";REPT(" ";15));15);))

И обычная
=SUMPRODUCT(--LEFT(SUBSTITUTE(SUBSTITUTE(C7:AG7;"/";REPT(" ";15));"В";0);15)) но оно не пеерварит отпуск больничный и прочие отметки.

Цитата
Wiss написал:
В объединенных ячейках эта формула не работает,
это почему?
Изменено: БМВ - 14.01.2022 16:44:42
По вопросам из тем форума, личку не читаю.
 
БМВ, у вас не считает число 3 которое записано в формате "8,25/3". Хотя именно ваш код я применить могу к своей основной таблице

Цитата
написал: =СУММ(ФИЛЬТР.XML("  "&ПОДСТАВИТЬ(ОБЪЕДИНИТЬ("/";1;C7:AG7);"/";"  ")&"  ";"//i[number()=.]"))
Почему я не могу эту формулу применить к своим ячейкам? при копировании вашей строчки вместо "ОБЪЕДИТЬ" у меня отображается "_xlfn.TEXTJOIN". И мало того, когда я пытаюсь прописать как у вас, на этом месте функции "ОБЪЕДИНИТЬ" у меня нет. А когда пытаюсь в вашем прикрепленном фале менять значения табельного времени, не просчитывает. Возвращает "#ИМЯ?"
 
Примечание: Эта функция доступна на Windows или Mac, если у вас Office 2019 или если у вас есть подписка Microsoft 365 . Если вы являетесь подписчиком Microsoft 365, убедитесь, что у вас установлена последняя версия Office
 
Тогда понятно, почему лагает. У меня Office 2016 года. Жаль!
Изменено: Дарья - 14.01.2022 17:30:41
 
Цитата
Дарья написал:
А у вас не считает
вот говорила мне мама, не начинай работать с чужими формулами  :D
=SUM(IFERROR(--MID(SUBSTITUTE(C7:AG7;"/";REPT(" ";15));{1;15};15);))
Изменено: БМВ - 14.01.2022 17:42:38
По вопросам из тем форума, личку не читаю.
 
Код
еще изврат
=СУММ(ЕСЛИОШИБКА(--ПСТР(C7:AG7;ПОИСК("/";C7:AG7;1)+1;100);0);ЕСЛИОШИБКА(--ПСТР(C7:AG7;1;ПОИСК("/";C7:AG7;1)-1);0);ЕСЛИОШИБКА(ЕЧИСЛО(C7:AG7)*C7:AG7;0))
 
БMВ, Спасибо!  ;)  Теперь считает как надо!!!! Тимофеев, Вам тоже большое спасибо!
Но у меня еще есть задача посложнее. Если можно будет ее решить, Вы очень меня спасёте :oops:
Необходимо следующее: сотрудник ходит в смену. Но смена проставляется по разному. Когда 2 выходных впереди, проставляется 20 часовая днем и 6 ночью. Когда 1 выходной впереди, то 18 часов днем и 5 ночью. Теперь сам расчет: берутся рабочие календарные дни (выходные по календарю не включаются. В примере исключить дни 4,5,11,12,18,19,25,26,31) период когда сотрудник ходил по 20 часов - это 1,2,3,13,14,15,16,17,27,28,29 = 11 дней. Остальные попадают в период 18 часового дня - это 6,7,8,9,10,20,21,22,23,24,30 = 11. Далее 11*8 (часов. Это константа) / 20 (часы в день) = 4 полные смены (без округления до целого). 4*6 (часов ночные) = 24 (искомое значение). Далее все тоже самое но с 18 часовым днем. 11*8/18=4. 4*5=20. Теперь 24+20=44. Вот эту 44 нужно выставить в табель.

P.s. просто у меня 40 человек и каждого я руками просчитываю  :cry:  
Изменено: Дарья - 14.01.2022 18:12:35
 
Дарья, Может попробуете это  и презентация на yuotube
Изменено: skais675 - 14.01.2022 19:03:57
 
skais675, спасибо за предложение, но форму табеля необходимо предусмотреть именно ту, которая в примере. Мы руководствуемся приказом. И по сменникам, у нас все очень непонятно. Нет определенного алгоритма работы. Они могу ходит как сутки через двое несколько смен подряд, так и сутки через трое. Подход индивидуальный. Если каждый раз забивать схему сменника у вас в программе, дольше получиться. Но в целом очень хорошая идея. Может пригодиться кому.

А вот фишка с выбором месяца и года, когда в ячейках автоматом подсвечиваются выходные, заинтересовала. Можно будет не создавать кучу книг по месячно и не вбивать руками.
Изменено: Дарья - 14.01.2022 20:50:19
 
Дарья, Думаю Вы ошибаетесь, Вы даже не попробовали, Данное решение позволит Вам сделать любую форму и все Ваши задачи будут решены легко. Просто Вы не вникли в возможности.
Изменено: skais675 - 14.01.2022 20:51:02
 
skais675, ну хорошо, если вы настаиваете, я попробую разобраться с ней, пересмотрев Ваше наставление. Как можно обратиться к Вам за частной консультацией, чтобы не засорять этот чат?
Изменено: Дарья - 14.01.2022 20:54:18
 
Дарья, Все верно, мои контакты в моем профиле, я готов Вам помочь на бесплатной основе. Пишите, звоните.
Страницы: 1
Читают тему (гостей: 1)
Наверх