Foliant написал: А на том форуме человек взялся помочь, но куда-то пропал.
Если меня имеете в виду, то напомню, что "человек на том форуме" написал: "Да! И чтобы не быть понятым неправильно, типа "я уже берусь за реализацию" - я это не для себя куски тех.задания набрасываю, а для Вас. И для тех формулистов и макрописцев, которые далее, возможно, захотят поучаствовать в теме."
А "пропал", потому что "тема комбо" до сих пор "не раскрыта". Чего делать-то? Раскрашивать ячейки со счетами УФ-зеленью, как просите - сомнительная затея, мне лично не интересная. Считаю свою "строку угаданных позиций" гораздо более информативной и позволяющей что-то с ней сделать дальше в плане вычислений (чего не скажешь об УФ-зелени). И совершенно непонятен итоговый вид "отчета".
И как в итоге решено премировать: по самой старшей комбинации (как в классическом покере) или по всем возможным? "По всем возможным" означает, что, например, "карэ" (4 совпадения), помимо собственно карэ еще содержит внутри себя, как я понимаю, "пару", вторую "пару", "две пары" и "тройку" (сет) - и за все эти 5 комбинаций будут суммироваться очки? Или как? Усилия на "по старшей" (проще) или "по всем возможным" (сложнее) разнятся в разы... И самое печальное, уж извините, что из Вас приходится инфу "клещами тянуть" - кому из разработчиков такое понравится? Кому это всё надо, в конце концов?
Поскольку Виктор практически уже всё и рассказал, я тогда, пользуясь случаем, расскажу как можно вводить массив констант в формулу, вообще не вводя самому фигурных скобок, а заодно и разделителей колонок и столбцов внутри массива (с ними бывают заморочки при ручном вводе - я обычно не помню наизусть, какой символ что разделяет).
Итак, введем наши данные в диапазон C1:D5 (5 строк х 2 колонки):
Код
0 Н
4 У
10 Д
16 В
23 Н
В B1 - формулу с ВПР, но без массива констант (как выше), а со ссылкой на диапазон:
Код
=ВПР(ЧАС(A1);C1:D5;2)
Теперь заходим в режим редактирования ячейки B1 и аккуратно выделяем адрес диапазона C1:D5 (мышкой или стрелками с шифтом). При выделенном тексте "C1:D5" жмем F9 - вуаля!
Количество пустых ячеек в строке до первой непустой, начиная с некоторой пустой:
Код
Function доПервойНепустой(rng As Range) As Long
If IsEmpty(rng.Cells(1)) Then
доПервойНепустой = Range(rng.Cells(1), _
rng.Cells(1).End(xlToRight)).Cells.Count - 1
End If
End F unction
Function доПервойНепустой(rng As Range) As Integer
If IsEmpty(rng(1)) Then _
доПервойНепустой = Range(rng(1), rng(1).End(xlToRight)).Count - 1
End F unction
Itreyder пишет: Даже если пройдет один день месяца, то считать как +1 месяц
Тогда предлагаю такой алгоритм из трёх формул: 1. Вычисляете весь диапазон в месяцах: =РАЗНДАТ(E6;F6;"m") +(РАЗНДАТ(E6;F6;"md") >0) . 2. Потом от этого значения простейшими формулами: полные годы как =ОТБР(месяцы/12) и месяцы сверх полных лет как =ОСТАТ(месяцы;12).
P.S.
Цитата
Itreyder пишет: Тоесть если между датами один месяц, то должно быть значение 1/12, если между датами прошло 11 месяцев то должно быть 11/12.
Даже, наверное, Вам надо просто результат по первой формуле разделить на 12 и уложиться в одну формулу для количества лет:
Господа, предлагаю отменить автобан по авторитету (пункт 5.3). Я уже в нём побывал (как выяснилось, из-за искусственно созданной ситуации) и мне не понравилось это по следующим причинам:
* никто не проинформировал об этом (ни сообщением в личный кабинет на форуме, ни письмом во внешнюю почту) - я узнал об этом, грубо говоря, случайно, сопоставив некоторые факты и показатели после многих минут недоумения
* непонятно (нигде не сказано) сколько времени надо находиться в бане и когда наконец произойдет разбанивание; в частности, зависит ли это от "глубины" минуса, в который ты проваливаешься.
* анонимность поощрений/порицаний - я даже не знаю, кто именно меня забанил - И ЗА ЧТО?! Да, пока у меня немного сообщений на форуме и я смог их перебрать вручную. А когда их будет в 10 раз больше? Т.е. правильно ли сидеть в тюрьме, даже не зная за что? И как "исправляться", т.е. какие именно "гайки" в себе подкрутить на будущее, чтобы быть белым и пушистым?
* помимо блокирования написания сообщений в топики, отключается возможность редактирования профиля и написания сообщений по внутренней почте, т.е. я даже не могу написать админу и поинтересоваться в чём дело.
В общем, хорошо бы баном как карающим инструментом явно рулила только администрация, как это обычно и бывает на форумах.
mrnosik пишет: сомневался как-раз по причине високосных годов
Чтобы окончательно развеять Ваши сомнения, вот ссылочка на недавнюю тему на дружественном форуме: http://www.excelworld.ru/forum/7-3427-1 . Там как раз и про 400, и про 2000 хорошо говорится.
optima пишет: если дату указать не с первого числа
Тогда можно добавить одну строку перед циклом для приведения входной даты к первому числу:
Код
Function f$(d)
Dim s$, i&
d = DateSerial(Year(d), Month(d), 1)
For i = d To DateAdd("m", 1, d) - 1
If Weekday(i, 2) > 5 Then s = s & ", " & Day(i)
Next
f = Mid(s, 3)
End F unction
На всякий случай: VBA в Excel может работать с датами от 100 до 9999. Например, длительность войны 1812 в днях можно посчитать в окне отладки (Immediate):
P.S.А еще, если не стоит задача определения дней недели и вычисляются только интервалы между датами, то можно прибавлять к датам какое-либо заранее оговоренное количество годов, обязательно кратное 400 (чтобы правильно была учтена високосность). Например, добавим к 1812 две тысячи лет и уже можно считать по формулам в таблице:
Можно просто вести плоскую табличку данных с колонками: Человек, Задача, Неделя, Значение. А то, что попытались изобразить автофильтрами, возложить на сводную таблицу.
Дмитрий Малых пишет: Есть ли какие то фильтры куда бы скопировал все эти нужные номера и они выделились, а ненужные отсеились
ИМХО приведенному желаемому сценарию наиболее соответствует функциональность "Расширенный фильтр" (в 2007+ доступна по маршруту "Данные \ Дополнительно").
Где-нибудь в сторонке по отдельности создайте три отсортированных уникальных списка по каждой из трех колонок. В каждом из них пронумеруйте элементы. И потом подтяните номера этих элементов к первоначальному списку и сделайте конкатенацию трёх значений в каждой строке.
А если будет отмечено более 2-х значений, то надо будет перебирать массив:
Код
Sub moreThan2criteria()
Dim wks As Worksheet
Dim arr As Variant
Dim i As Integer
Set wks = Worksheets(1)
arr = wks.AutoFilter.Filters(2).Criteria1
For i = 1 To UBound(arr)
Debug.Print arr(i)
Next i
End Sub