Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.01.2012, 23:24   #1
HyperSonik
 
Регистрация: 21.10.2011
Сообщений: 3
Вопрос формула суммы сочетаний

Здравствуйте!

Нужно рассчитать простую формулу в Excel таблице (2007)

значения k,p будут браться из конкретных ячеек.

Стандартная функция для подсчета сочетаний: ЧИСЛКОМБ()

Но как ее прикрутить к сумме и поставить цикл...

Подозреваю что нужно использовать VBA, но я никогда с ним не работал, гугл не помогает совсем.

Подскажите как справиться с задачкой?
HyperSonik вне форума Ответить с цитированием
Старый 29.01.2012, 00:13   #2
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

Цитата:
гугл не помогает совсем.

Подскажите как справиться с задачкой?
Ключевое слово для гугля СОЧЕТАНИЯ
ТЫНЦ
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Старый 29.01.2012, 00:24   #3
HyperSonik
 
Регистрация: 21.10.2011
Сообщений: 3
По умолчанию

Или лыжи не едут, или я ...

Я уже разобрался как написать на VBA нужную функцию... надеюсь)))

Но мне нужно чтобы в ячейке, я мог записать что то вроде:
=myfunction(p;k)
и получить результат в этой же ячейке!

Код я вроде написал, в VBA project - modules - module1
но вызвать функцию из самой таблицы не получается...
Как это сделать? Или я хочу странного?

Код:
Sub MyFunction(p, k)
Dim l As Integer
l = 1
Dim rezult As Integer
rezult = 0

Dim factork As Integer
Dim temp As Integer
factork = 1
temp = 1
Do While temp <= k
     factork = factork * temp
     temp = temp + 1
Loop
temp = 1

Do While l <= p
    Dim factorkl As Integer
    factorkl = 1
    Do While temp <= (k - l)
        factorkl = factorkl * temp
        temp = temp + 1
    Loop
    
    Dim factorl As Integer
    factorl = 1
    Do While temp <= l
        factorl = factorl * temp
        temp = temp + 1
    Loop
    rezult = rezult + factork / (factorkl * factorl)
    l = l + 1
Loop
Dim R As CellFormat
R = Application.Caller.Address
Range("R").Value = rezult
End Sub
Спасибо!

Последний раз редактировалось HyperSonik; 29.01.2012 в 00:27.
HyperSonik вне форума Ответить с цитированием
Старый 29.01.2012, 01:30   #4
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

Код:
Function MyFunction(p, k)
Dim l As Integer
l = 1
Dim rezult As Integer
rezult = 0

Dim factork As Integer
Dim temp As Integer
factork = 1
temp = 1
Do While temp <= k
     factork = factork * temp
     temp = temp + 1
Loop
temp = 1

Do While l <= p
    Dim factorkl As Integer
    factorkl = 1
    Do While temp <= (k - l)
        factorkl = factorkl * temp
        temp = temp + 1
    Loop
    
    Dim factorl As Integer
    factorl = 1
    Do While temp <= l
        factorl = factorl * temp
        temp = temp + 1
    Loop
    rezult = rezult + factork / (factorkl * factorl)
    l = l + 1
Loop

MyFunction = rezult
End Function
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Старый 29.01.2012, 02:36   #5
HyperSonik
 
Регистрация: 21.10.2011
Сообщений: 3
По умолчанию

Огромное спасибо, doober!!!
Это именно то что нужно!!


P.S.
Мой код не совсем рабочий был...
Но я его исправил))
Вот этот вариант всё делает как нужно, если кому вдруг понадобится!

P.S. По видимому вариант для высших порядков, предложенный по ссылке выше, должен работать лучше(через треугольник Паскаля), но VBA редактор ругается на код из статьи, поэтому вот альтернатива:

Код:
Function CalcSochlk(l, k)
Dim rezult As Double
rezult = 1

Dim temp As Double
temp = k
Do While (temp > 0)
     rezult = rezult * temp
     If ((k - l) > (temp - 1)) Then
     rezult = rezult / temp
     End If
     
     If (l > (temp - 1)) Then
     rezult = rezult / temp
     End If
     
     temp = temp - 1
Loop

CalcSochlk = rezult
End Function

Function CalcSummSochpk(p, k)
Dim temp As Double
temp = 1
Dim rezult As Double
rezult = 0
Do While (temp < (p + 1))
     rezult = rezult + CalcSochlk(temp, k)
     temp = temp + 1
Loop

CalcSummSochpk = rezult
End Function

Последний раз редактировалось HyperSonik; 29.01.2012 в 14:59.
HyperSonik вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Найти количество сочетаний из n по k и вывести все комбинации этих сочетаний на экран Рон99 Паскаль, Turbo Pascal, PascalABC.NET 2 14.12.2011 00:05
Посчитать число сочетаний (Cnk) pollypolly Visual C++ 0 07.11.2011 21:30
формула для подсчета суммы shrjanayin Microsoft Office Excel 2 19.02.2011 11:25
Формула суммы произведений в зависимости от значения признака Sensi Microsoft Office Excel 2 20.01.2010 05:43
Восстановление сочетаний клавиш... Busine2009 Microsoft Office Word 0 28.06.2009 20:17