Обновлено 27 ноября
Я все еще в аэропорту и решил сделать эту проблему ударом без VBA / UDF.
Функция Array может получитьты чего хочешь.Введите это в свой рабочий лист с помощью CTL SHIFT ENTER для решения, отличного от vba:
=SUM(ROUNDUP(COUNTIF(A1:AH1,">="&ROW(INDIRECT("A1:A"&MAX(A1:AH1),TRUE)))/12,0))
Вы можете скачать файл XLSM здесь .
Для тех, кто когда-либо пожелал, чтобы они могли выполнять «циклы» VBA в обычной формуле Excel, это довольно хороший пример того, как подходить, так как это, по сути, «циклы» через диапазон с более высоким целым числом каждый разиспользуя функции Row
и Indirect
. Чип Пирсон отлично справляется с подобными вещами .
ОБНОВЛЕНО 26 ноября
Мне скучно сидеть в аэропорту, поэтому я дам этоеще один ход ... Я думаю, что эта пользовательская функция получит ОП, что они хотят.Поместите это в любое место, и вы получите 77. =UMutCustom2(A1:AH1)
Необходимый код пользовательской функции находится здесь:
Function UMutCustom2(rng As Range) As Double
Dim r As Long
For r = 1 To Application.WorksheetFunction.Max(rng)
UMutCustom2 = Application.WorksheetFunction.RoundUp(Application.WorksheetFunction.CountIf(rng, ">=" & r) / 12, 0) + UMutCustom2
Next r
End Function
оригинальный ответ
Я включил оба этих примера в файл здесь .
Вероятно, проще всего использовать формулу массива.В ячейку Ai1 поместите эту формулу: =SUM(ROUNDUP(AI3:AI999/12,0))
Однако, после ввода формулы ВЫ ДОЛЖНЫ УДЕРЖИТЬ CTR SHIFT ENTER!
Это создастфигурные скобки вокруг формулы, поэтому при просмотре формулы она должна выглядеть следующим образом: {=SUM(ROUNDUP(AI3:AI999/12,0))}
и в моей версии файла сумма равна 77.
(хорошая новость заключается в том, что в 2019 году новый механизм Excel обработаетне требует CTL SHIFT !)
В качестве альтернативы, если вы хотите создать пользовательскую функцию с использованием vba, вы можете использовать эту пользовательскую функцию, которая не требует ввода ctr shift ... вот код VBA длясделать это:
Function UMuTCustomFunc(rng As Range) As Double
Dim ws As Worksheet, rCell As Range
Set ws = Sheets(rng.Parent.Name)
For Each rCell In Intersect(ws.UsedRange, rng).Cells
UMuTCustomFunc = Application.WorksheetFunction.RoundUp(rCell.Value / 12, 0) + UMuTCustomFunc
Next rCell
End Function