Function Долг(Диапазон As Range, Optional Месяцы As String = "янв фев мар апр май июн июл авг сен окт ноя дек") As String 'Диапазон - диапазон ячеек, в котром содержатся суммы задолжностей 'Месяцы - необязательный аргумент - перечень названий месяцев, записанных через пробел, соответствующих диапазону ячеек 'Количество названий месяцев не должно быть меньше количества ячеек в диапазоне Dim Arr: Arr = Диапазон.Value Dim Month: Month = Split(Application.WorksheetFunction.Trim(Месяцы)) Dim L As Long, I As Long L = UBound(Arr, 2) If L > (UBound(Month) + 1) Then Exit Function For I = 1 To L If Val(Arr(1, I)) <> 0 Then Долг = Долг & "Долг за " & Month(I - 1) & " " & Str(Arr(1, I)) & "; " Next L = Len(Долг) If L = 0 Then Exit Function If Right(Долг, 2) = "; " Then Долг = Left(Долг, L - 2) Долг = UCase(Left(Долг, 1)) & Right(Replace(Долг, "Д", "д"), Len(Долг) - 1) End Function
[/vba]
Можно вот такой UDF [vba]
Код
Function Долг(Диапазон As Range, Optional Месяцы As String = "янв фев мар апр май июн июл авг сен окт ноя дек") As String 'Диапазон - диапазон ячеек, в котром содержатся суммы задолжностей 'Месяцы - необязательный аргумент - перечень названий месяцев, записанных через пробел, соответствующих диапазону ячеек 'Количество названий месяцев не должно быть меньше количества ячеек в диапазоне Dim Arr: Arr = Диапазон.Value Dim Month: Month = Split(Application.WorksheetFunction.Trim(Месяцы)) Dim L As Long, I As Long L = UBound(Arr, 2) If L > (UBound(Month) + 1) Then Exit Function For I = 1 To L If Val(Arr(1, I)) <> 0 Then Долг = Долг & "Долг за " & Month(I - 1) & " " & Str(Arr(1, I)) & "; " Next L = Len(Долг) If L = 0 Then Exit Function If Right(Долг, 2) = "; " Then Долг = Left(Долг, L - 2) Долг = UCase(Left(Долг, 1)) & Right(Replace(Долг, "Д", "д"), Len(Долг) - 1) End Function