Перепрыгнеть в содержание


- - - - -

Применение в ставках Excel and VBA для чайников


63 ответов в эту тему

#21 OFFLINE   Bambuk

    Специалист


  • mp
  • 6322 сообщения
602

Добавлено 14 February 2014 - 07:50

Пример использования функций для подсчёта очков набранных в последних 6-ти играх (данные в БД идут снизу вверх)

В ячейках AB24 AC24 AD24 и ниже расположенных вектор вида 100 (выигрыш ) 010 (ничья) 001 (проигрыш домашней) Ячейки с названиями команд BI BJ

$GB$13 режим пересчёта (0 или 1)
$GC$13 размер окна (для общих 6-ти игр это значение равно 3 так как мы считаем сначала для домашнего состояния потом для гостевого)
$GD$13 размер окна просмотра (для 3игр можно взять значение около 90-100)
(изменяя эти 3 ячейки можно управлять всеми формулами сразу)

Считаем для домашней команды в записи расположенной по адр BI24
=((Bambs(BI24;AB24;$GC$13;$GD$13;BI24;$GB$13)+Bambs(BI24;AD24;$GC$13;$GD$13;BJ24;$GB$13))*3+Bambs(BI24;AC24;$GC$13;$GD$13;BI24;$GB$13)+Bambs(BI24;AC24;$GC$13;$GD$13;BJ24;$GB$13))/($GC$13*6)

Для гостевой расположенной в яч. BJ24
=((Bambs(BJ24;AD24;$GC$13;$GD$13;BJ24;$GB$13)+Bambs(BJ24;AB24;$GC$13;$GD$13;BI24;$GB$13))*3+Bambs(BJ24;AC24;$GC$13;$GD$13;BJ24;$GB$13)+Bambs(BJ24;AC24;$GC$13;$GD$13;BI24;$GB$13))/($GC$13*6)

Делитель вида ($GC$13*6) запихивает данные в диапазон 0—1(делит на максимальное число очков которые могут быть набраны их число очевидно =размер окна в функции а он равен половине числа игр которые мы считаем для команды по общему состоянию (дом+гость) умноженному на 2 и умноженному на 3(это очки за выигрыш))

По аналогии можно найти среднее число забитых голов для домашнего состояния для гостевого и общее.

Эксель сильно тормозит при большом числе данных поэтому можно оставить формулу в какой-то одной
записи (строке) а все остальные после расчёта скопировать и сохранить как значения.

Если допустим счёт записан в ячейках BK и BL то получить вектор ВНП достаточно просто
=ЕСЛИ(BK24>BL24;1;0) =ЕСЛИ(BK24=BL24;1;0) =ЕСЛИ(BK24<BL24;1;0)

Отредактировано Bambuk, 14 February 2014 - 07:57.


#22 OFFLINE   Bambuk

    Специалист


  • mp
  • 6322 сообщения
602

Добавлено 14 February 2014 - 08:46

Кто хочет может писать в этой теме ваши критерии (которые используете или допустим вы их придумали только что), как они вычисляются и через какие параметры (которые допустим тоже надо предварительно вычислить).
Вот например простая формула для критериев отражающих фактор поля Д/Общее Г/Общее Д, Г, Общее это какая-то интегральная характеристика например (сумма чего-то за определённый промежуток) определяемая по домашним играм по гостевым и общие данные за тот же интервал. Теперь очевидно получаем для параметров Голы, ВНП, очки...и так далее (хоть пробитие фор и тоталов.... смотря на чём играете и что вас интересует в первую очередь)...но желателен какой-то общий конечно критерий который сильнее всего отражает фактор поля во всех линиях (или хотя бы их части).
похожие варианты определяющие фактор поля (надо понять что лучше). Могут использоваться и порождаемые этими данными (голы, ВНП, очки) величины --вот допустим разность заб-проп. голов можно так же смотреть по формуле Д/О, Г/О При этом разумеется может быть важна и динамика для каких-то выводов не обязательно для этого конкретного примера но в целом для других допустим величин. Можно это обсудить допустим---можно посмотреть что-то в соседних окнах например (то есть надо придумать оптимальную общую функцию пригодную для любых параметров которые мы введём)... Можно конечно какие-то графики строить для визуализации но может понадобиться кому-то программно прописать принятие решений с учётом динамики (можно я думаю по трём точкам построить прямую менее отклоняющуюся от этих 3т. и найти тангенс угла наклона или ещё там как-то).

Чтоб сократить число критериев можно ввести разность, например Д/О-Г/О (при этом исходники Д/О и Г/О из базы убирать не следует так как они могут оказаться более влиятельными в определённых группах данных--кластерах).

Отредактировано Bambuk, 14 February 2014 - 08:49.


#23 OFFLINE   Bambuk

    Специалист


  • mp
  • 6322 сообщения
602

Добавлено 14 February 2014 - 09:28

ещё следует дописать по фактору поля---можно разумеется и вот так учитывать д/г .... но тогда если допустим в базе основная масса критериев рассчитана по общим данным то
первый вариант предпочтительнее так как он связывает Д и Г с Общими а в д/г такой очевидной связи нет...... многие критерии лучше унифицировать--брать либо стандартные окна для разных лиг или приводить критерий к одной игре--деля например на число игр в окне ...унификация по окну не всегда может быть удобна так как
есть лиги и с 16 ком. и с 24 ком. разница ощутимая.....

Отредактировано Bambuk, 14 February 2014 - 09:31.


#24 OFFLINE   Bambuk

    Специалист


  • mp
  • 6322 сообщения
602

Добавлено 14 February 2014 - 09:50

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

#25 OFFLINE   ДедМороз

    Новичок


  • Участник
  • Пип
  • 5 сообщения
0

Добавлено 14 February 2014 - 15:49

С прошлого года решил заняться написанием макросов в экселе. В итоге на данный момент имеются:
Парсинг кэфов и запись кэфов матча на лист экселя
Парсинг результатов и занесение их на лист экселя по таймам
Модуль сбора статистики по командам (дома, гости, всего, последние 5 игр, игры между командами одной группы)
И расчет возможного результата.
Не скажу что это истина конечно, но какая то информация все равно собирается и анализируется, что помогает выявлять матчи с более вреоятным исходом.
Ну и оперирую кэфами только больше 1,7.



#26 OFFLINE   Bambuk

    Специалист


  • mp
  • 6322 сообщения
602

Добавлено 14 February 2014 - 17:39

СообщенияДедМороз, on 14 February 2014 - 15:49, сказал:

С прошлого года решил заняться написанием макросов в экселе. В итоге на данный момент имеются:
Парсинг кэфов и запись кэфов матча на лист экселя
Парсинг результатов и занесение их на лист экселя по таймам
Модуль сбора статистики по командам (дома, гости, всего, последние 5 игр, игры между командами одной группы)
И расчет возможного результата.
Не скажу что это истина конечно, но какая то информация все равно собирается и анализируется, что помогает выявлять матчи с более вреоятным исходом.
Ну и оперирую кэфами только больше 1,7.
Дедуля, а выложить что-то можно в топ с комментариями и пояснениями что откуда растёт? если модули большие, то можно на обменник какой-то например залить.....
И кефы средние или с какой-то конкретной конторы? И какие линии?

#27 OFFLINE   ДедМороз

    Новичок


  • Участник
  • Пип
  • 5 сообщения
0

Добавлено 15 February 2014 - 09:16

СообщенияBambuk, on 14 February 2014 - 17:39, сказал:


Дедуля, а выложить что-то можно в топ с комментариями и пояснениями что откуда растёт? если модули большие, то можно на обменник какой-то например залить.....
И кефы средние или с какой-то конкретной конторы? И какие линии?
Ну модули выкладывать как то не айс, да и дохрена их, каждый отвечает за све и делает свое.
Линии беру с WH,
П1 х п2
Форы
Разницу
Точный счет
Тоталы
Результаты парсю с whoscored.com
Матчи Топовых чемпионатов парсятся с ударами, владением, и прочих факторов
Ну а потом сравниваю статистику команд, расчет кэфов на события, сравнение
их с wh и выявление выгодных кэфов.
Писал сам для себя. На все это потратил где то год, обкатывая программу.
Результаты разные. После новогодней корректировки расчета вроде как медленно график попер вверх.
На истину расчетов не претендую, надо еще вводить критерии расчета.


Бамбук, для начала, чтобы что то написать надо четко в голове представлять организацию всег этого дела,
Т.е. Грубо говоря нужен проект базы данных. Это основа, а потом писать модули.
Кстати где в иенете видел сайт готовый где расчитываются матчи таким образом как у тебя или у меня.
Во, нашел ineedscore.com/


#28 OFFLINE   ДИМА КЛЮКВИН

    Специалист


  • Участник II
  • ПипПипПип
  • 391 сообщения
20
  • МестоположениеNIGERIA

Добавлено 15 February 2014 - 19:23

СообщенияДедМороз, on 15 February 2014 - 09:16, сказал:



С прошлого года решил заняться написанием макросов в экселе. В итоге на данный момент имеются:
Парсинг кэфов и запись кэфов матча на лист экселя
Парсинг результатов и занесение их на лист экселя по таймам
Модуль сбора статистики по командам (дома, гости, всего, последние 5 игр, игры между командами одной группы)
И расчет возможного результата.
Не скажу что это истина конечно, но какая то информация все равно собирается и анализируется, что помогает выявлять матчи с более вреоятным исходом.
Напишите контакты в профиле как с Вами можно связаться?
У меня примерно похожие идеи и я так же собираю, правда вручную стату с сайтов, кладу в эксель и вручную обрабатываю...
Может Вы бы мне подсказали по эксель и по парсингу...

Отредактировано ДИМА КЛЮКВИН, 15 February 2014 - 19:24.


#29 OFFLINE   ДедМороз

    Новичок


  • Участник
  • Пип
  • 5 сообщения
0

Добавлено 16 February 2014 - 19:51

СообщенияДИМА КЛЮКВИН, on 15 February 2014 - 19:23, сказал:


Напишите контакты в профиле как с Вами можно связаться?
У меня примерно похожие идеи и я так же собираю, правда вручную стату с сайтов, кладу в эксель и вручную обрабатываю...
Может Вы бы мне подсказали по эксель и по парсингу...
Написал скайп

#30 OFFLINE   Bambuk

    Специалист


  • mp
  • 6322 сообщения
602

Добавлено 16 February 2014 - 20:04

СообщенияДедМороз, on 15 February 2014 - 09:16, сказал:

Ну модули выкладывать как то не айс, да и дохрена их, каждый отвечает за све и делает свое.
Линии беру с WH,
П1 х п2
Форы
Разницу
Точный счет
Тоталы
Результаты парсю с whoscored.com
Матчи Топовых чемпионатов парсятся с ударами, владением, и прочих факторов
Ну а потом сравниваю статистику команд, расчет кэфов на события, сравнение
их с wh и выявление выгодных кэфов.
Писал сам для себя. На все это потратил где то год, обкатывая программу.
Результаты разные. После новогодней корректировки расчета вроде как медленно график попер вверх.
На истину расчетов не претендую, надо еще вводить критерии расчета.


Бамбук, для начала, чтобы что то написать надо четко в голове представлять организацию всег этого дела,
Т.е. Грубо говоря нужен проект базы данных. Это основа, а потом писать модули.
Кстати где в иенете видел сайт готовый где расчитываются матчи таким образом как у тебя или у меня.
Во, нашел ineedscore.com/

Да все модули наверно не надо..самое гиморное собрать какие-то результаты и кефы, а остальное каждый может на свой вкус делать. Я например играю тока на линии 1Х2 в основном, но иногда нужны кефы просто и всё. Всю базу по статистике можно рассчитать имея хотя бы исход матча и тайма (голы желательно конечно с минутами но это наверно посложнее сделать..) а зачем все кефы таскать с сайтов? Для начала можно какие-то основные кефы 1Х2 ТМ-ТБ 2.5 ну и можно счёт наверно --этого за глаза хватит.
Тут больше проблема с обновлением...базу-то можно надыбать, а вот обновлять как? Парсинг это ж только пол-дела...что его блюсть? На Ваши механизмы анализа и критерии Вами используемые ни кто ж не претендует.

Да хоть бы кто-нить написал бы попонятнее--- как запросы делать допустим на Пинакл--там есть АПИ..а потом пихать кефы линии в эксель....я думаю это попроще будет чем сайты парсить (структура которых или платформа может поменяться и тогда не специалист в модулях Ваших всё равно не разберётся)....

#31 OFFLINE   ДедМороз

    Новичок


  • Участник
  • Пип
  • 5 сообщения
0

Добавлено 17 February 2014 - 07:31

Не знаю насколько тебе это поможет
Вызов функции из главного модуля:
Сама строка какую ищем:
sURI = "http://sports.williamhill.com/bet/en-gb/betting/y/5/et/Football.html"
и собственно сам вызов функции
oddbet = GetHTML(sURI)

в ответ получаем строку, которую подвергаем парсингу (несколько этапов. Один модуль находит нужный чемпионат, второй модуль находит нужный матч, третий модуль находит кэфы 1 х 2, другой разницу, и т.д. Их дохрена этих модулей. Не понимаю зачем весь проект бросать сюда, надо полностью бросать и структуру листов экселя. Их тоже немало. Table, teams, match, Database, betting, Bet, players, goals, cards)


Function GetHTML(sURI As String) As String

Dim oHttp As Object, HTMLcode, OutStr As String
Dim d As String, m As String, y As String, divider As Double
Dim str As String, foundRate As String, foundCount As String
Dim pleft As Long, pright As Long

On Error Resume Next
Set oHttp = CreateObject("MSXML2.XMLHTTP")
If Err.Number <> 0 Then
Set oHttp = CreateObject("MSXML.XMLHTTPRequest")
End If
On Error GoTo 0
If oHttp Is Nothing Then
Exit Function
End If

oHttp.Open "GET", sURI, False
oHttp.Send
HTMLcode = oHttp.responseText: Set oHttp = Nothing

'pleft = InStr(1, HTMLcode, "primaryCollectionContainer")
'pright = InStr(pleft, HTMLcode, "newContainer")

' str = Mid(HTMLcode, pleft, pright - pleft)
str = HTMLcode
GetHTML = str

End Function


Зачем нужны кэфы букмекеров, я их потом сравниваю с возможными, т.е. с расчетными, и если кэф, мой расчетный выше букмекеров, то эта начинаю анализировать эту ставку.


#32 OFFLINE   andre48

    Специалист


  • mp
  • 1622 сообщения
286
  • МестоположениеМосква

Добавлено 17 February 2014 - 14:36

Для обработки информации по ставкам нужна система, которая может очень быстро, по очень многим критериям обработать большой объем информации, с возможностью запоминания результатов предыдущих обработок для последующего использования. То есть, нужна однопользовательская реляционная база данных, желательно с прямым доступом к информации, и реляционная СУБД с простейшей системой команд, работающая в режиме компиляции (не интерпретации), что обеспечивает скорость обработки. Ни Excel ни Access не отвечают этим требованиям. Не отвечают этим требованиям и многие современные СУБД, в которых развивают, в основном, многопользовательский режим и графику в ущерб скорости обработки. Мне не удалось найти ничего более приемлемого, чем использование старинного Клиппера с компилятором Harbour. Язык Clipper очень прост. Он гораздо проще чем VBA, необходимый для Excel или Access. Для начала работы с базой данных достаточно знать минимум команд и функций языка Clipper, которые можно освоить за несколько дней. Процентов девяносто команд и функций этого языка не будут нужны никогда. Кроссплатформенный компилятор Harbour позволяет работать с разными операционными системами, делает автоматический перевод с примитивного языка Clipper на язык C и создает исполняемые файлы exe, которые работают в несколько раз быстрее, чем файлы, полученные с применением собственного компилятора Clipper. Кроме того, в этом компиляторе нет некоторых ошибок и ограничений, которые есть в компиляторе Clipper. Накопленную же в Excel информацию можно легко переписать в таблицы dbf Клиппера.

#33 OFFLINE   Bambuk

    Специалист


  • mp
  • 6322 сообщения
602

Добавлено 17 February 2014 - 14:56

СообщенияДедМороз, on 17 February 2014 - 07:31, сказал:

Не знаю насколько тебе это поможет

Спасибо, будем разбираться......
Даже если не поможет мне может поможет (да простят меня за туфту...логию) ещё кому-то....

Сообщенияandre48, on 17 February 2014 - 14:36, сказал:

Для обработки информации по ставкам нужна система, которая может очень быстро, по очень многим критериям обработать большой объем информации, с возможностью запоминания результатов предыдущих обработок для последующего использования. То есть, нужна однопользовательская реляционная база данных, желательно с прямым доступом к информации, и реляционная СУБД с простейшей системой команд, работающая в режиме компиляции (не интерпретации), что обеспечивает скорость обработки. Ни Excel ни Access не отвечают этим требованиям. Не отвечают этим требованиям и многие современные СУБД, в которых развивают, в основном, многопользовательский режим и графику в ущерб скорости обработки. Мне не удалось найти ничего более приемлемого, чем использование старинного Клиппера с компилятором Harbour. Язык Clipper очень прост. Он гораздо проще чем VBA, необходимый для Excel или Access. Для начала работы с базой данных достаточно знать минимум команд и функций языка Clipper, которые можно освоить за несколько дней. Процентов девяносто команд и функций этого языка не будут нужны никогда. Кроссплатформенный компилятор Harbour позволяет работать с разными операционными системами, делает автоматический перевод с примитивного языка Clipper на язык C и создает исполняемые файлы exe, которые работают в несколько раз быстрее, чем файлы, полученные с применением собственного компилятора Clipper. Кроме того, в этом компиляторе нет некоторых ошибок и ограничений, которые есть в компиляторе Clipper. Накопленную же в Excel информацию можно легко переписать в таблицы dbf Клиппера.
Это уже не для чайников, а для самоваров :)

#34 OFFLINE   andre48

    Специалист


  • mp
  • 1622 сообщения
286
  • МестоположениеМосква

Добавлено 17 February 2014 - 15:54

Да нет. Если попробовать, то легко понять, что система много проще, а возможностей много больше чем в Excel.

#35 OFFLINE   Fedorok

    Специалист


  • mp
  • 2128 сообщения
297

Добавлено 17 February 2014 - 17:38

СообщенияДедМороз, on 17 February 2014 - 07:31, сказал:

Не знаю насколько тебе это поможет
Вызов функции из главного модуля:
Сама строка какую ищем:
sURI = "http://sports.williamhill.com/bet/en-gb/betting/y/5/et/Football.html"
и собственно сам вызов функции
oddbet = GetHTML(sURI)

в ответ получаем строку, которую подвергаем парсингу (несколько этапов. Один модуль находит нужный чемпионат, второй модуль находит нужный матч, третий модуль находит кэфы 1 х 2, другой разницу, и т.д. Их дохрена этих модулей. Не понимаю зачем весь проект бросать сюда, надо полностью бросать и структуру листов экселя. Их тоже немало. Table, teams, match, Database, betting, Bet, players, goals, cards)


Function GetHTML(sURI As String) As String

Dim oHttp As Object, HTMLcode, OutStr As String
Dim d As String, m As String, y As String, divider As Double
Dim str As String, foundRate As String, foundCount As String
Dim pleft As Long, pright As Long

On Error Resume Next
Set oHttp = CreateObject("MSXML2.XMLHTTP")
If Err.Number <> 0 Then
Set oHttp = CreateObject("MSXML.XMLHTTPRequest")
End If
On Error GoTo 0
If oHttp Is Nothing Then
Exit Function
End If

oHttp.Open "GET", sURI, False
oHttp.Send
HTMLcode = oHttp.responseText: Set oHttp = Nothing

'pleft = InStr(1, HTMLcode, "primaryCollectionContainer")
'pright = InStr(pleft, HTMLcode, "newContainer")

' str = Mid(HTMLcode, pleft, pright - pleft)
str = HTMLcode
GetHTML = str

End Function


Зачем нужны кэфы букмекеров, я их потом сравниваю с возможными, т.е. с расчетными, и если кэф, мой расчетный выше букмекеров, то эта начинаю анализировать эту ставку.
Этот метод подходит для парсинга не всех сайтов, например Racingpost этими методами (MSXML.XMLHTTPRequest, MSXML2.XMLHTTP) не возьмёшь. В строке .responseText возвращается только часть HTML кода страницы почему то.

#36 OFFLINE   Вулкан

    Специалист


  • Участник II
  • ПипПипПип
  • 424 сообщения
12

Добавлено 17 February 2014 - 20:18

СообщенияДедМороз, on 17 February 2014 - 07:31, сказал:


Зачем нужны кэфы букмекеров, я их потом сравниваю с возможными, т.е. с расчетными, и если кэф, мой расчетный выше букмекеров, то эта начинаю анализировать эту ставку.
Не ошибся ? Может кэф расчетный ниже букмекерского, т.е. расчетная вероятность выше (валуй) ?

#37 OFFLINE   Bambuk

    Специалист


  • mp
  • 6322 сообщения
602

Добавлено 17 February 2014 - 21:50

СообщенияВулкан, on 17 February 2014 - 20:18, сказал:

Не ошибся ? Может кэф расчетный ниже букмекерского, т.е. расчетная вероятность выше (валуй) ?
Это описка.

Может кто-то подскажет вот по какому вопросу---- идут данные какие-то в ячейках будем считать что смежных
вот так допустим 23/13/ 2,5/ итд числом допустим 6-ячеек нам надо в функцию передать этот диапазон--точнее значения вот в этих ячейках (ну в принципе можно сделать как я раньше в функцию передавал...если нет вариантов) а потом обратиться к каждому элементу, провести там вычисления какие-то а потом вернуть не одно значение в клетку где мы функцию будем писать а и в соседние ячейки (слева допустим)...то есть надо вернуть одномерный массив (конкретно 4 циферы в 4 клетки эксель ,включая саму ячейку с функцией)...
может надо тогда вводить эту байду как для формул массивов, выделяя 4 клетки?

Вообще если конкретнее говорить то вот допустим я задаю жёстко (значения не меняются) центры кластеров в виде массива в функции (один центр-это вектор определённой размерности равный количеству передаваемых клеток в функцю в примере это вот это 23/13/ 2,5/ итд ... и таких центров несколько их число равно числу кластеров в целом получается двумерный массив размерности из примера 6*число кластеров)

Потом мы должны вот что делать--брать наши переданные данные и до каждого центра находить Евклидово расстояние потом взять наименьшее и приписать номер кластера
который условно говоря равен номеру того вектора-центров который и дал этот минимум..... и плюс к этому вернуть ещё три параметра которые для каждого кластера имеют свои специфические значения.
Я вот эту хрень могу на листе эксель за пять сек навоять для одного набора а в VBA ни как не врублюсь как лучше сделать........

Отредактировано Bambuk, 17 February 2014 - 21:59.


#38 OFFLINE   ДедМороз

    Новичок


  • Участник
  • Пип
  • 5 сообщения
0

Добавлено 18 February 2014 - 06:27

СообщенияВулкан, on 17 February 2014 - 20:18, сказал:


Не ошибся ? Может кэф расчетный ниже букмекерского, т.е. расчетная вероятность выше (валуй) ?

Зарапортовался, сорри.

СообщенияBambuk, on 17 February 2014 - 21:50, сказал:


Это описка.

Может кто-то подскажет вот по какому вопросу---- идут данные какие-то в ячейках будем считать что смежных
вот так допустим 23/13/ 2,5/ итд числом допустим 6-ячеек нам надо в функцию передать этот диапазон--точнее значения вот в этих ячейках (ну в принципе можно сделать как я раньше в функцию передавал...если нет вариантов) а потом обратиться к каждому элементу, провести там вычисления какие-то а потом вернуть не одно значение в клетку где мы функцию будем писать а и в соседние ячейки (слева допустим)...то есть надо вернуть одномерный массив (конкретно 4 циферы в 4 клетки эксель ,включая саму ячейку с функцией)...
может надо тогда вводить эту байду как для формул массивов, выделяя 4 клетки?

Вообще если конкретнее говорить то вот допустим я задаю жёстко (значения не меняются) центры кластеров в виде массива в функции (один центр-это вектор определённой размерности равный количеству передаваемых клеток в функцю в примере это вот это 23/13/ 2,5/ итд ... и таких центров несколько их число равно числу кластеров в целом получается двумерный массив размерности из примера 6*число кластеров)

Потом мы должны вот что делать--брать наши переданные данные и до каждого центра находить Евклидово расстояние потом взять наименьшее и приписать номер кластера
который условно говоря равен номеру того вектора-центров который и дал этот минимум..... и плюс к этому вернуть ещё три параметра которые для каждого кластера имеют свои специфические значения.
Я вот эту хрень могу на листе эксель за пять сек навоять для одного набора а в VBA ни как не врублюсь как лучше сделать........

Что тебе мешает цикл организовать,? И брать поочередно каждыую цифру из ячейки, внутри цикла рассчитывать по формуле, и полученный результат выкладывать на лист в необходимую ячейку? Или я что то неправильно понял?

#39 OFFLINE   Bambuk

    Специалист


  • mp
  • 6322 сообщения
602

Добавлено 18 February 2014 - 12:33

СообщенияДедМороз, on 18 February 2014 - 06:27, сказал:

Зарапортовался, сорри.



Что тебе мешает цикл организовать,? И брать поочередно каждыую цифру из ячейки, внутри цикла рассчитывать по формуле, и полученный результат выкладывать на лист в необходимую ячейку? Или я что то неправильно понял?
Передаются в функцию например 4 параметра из 4 клеток и возвращается допустим три цифры.
вот с этими входными надо со всеми сразу произвести вычисления, а потом вернуть три значения(вектор) в зависимости от результата.... а как выложить на лист что-то из функции?
она же должна как-то определиться куда это выкладывать при этом надо чтоб формула функции при протаскивании по листу (при копировании маркером) продолжала работать а как она будет работать если я жёстко пропишу адреса ячеек куда возвращаются данные?

А расчёт там простой---берутся данные жёстко прописанные в функции--вектор из 4 компонент и ищется расстояние входного вектора до каждого 4-мерного вектора центройдов
а этих центров много может быть допустим 15 потом мы берём минимальное расстояние которому разумеется есть соответствие=номеру центройда условно=номеру кластера ρе(Xд , Xкластер) = ( N(xданные n xцентр кластера n)2 )1/2 берём мин. из набора
и вот возвращаем номер+ещё один вектор--ответы какие-то в виде цифр..ответы тоже соответствуют каждый своему номеру кластера и жёстко прописаны (допустим в виде массивов или массива)

Отредактировано Bambuk, 18 February 2014 - 12:38.


#40 OFFLINE   Bambuk

    Специалист


  • mp
  • 6322 сообщения
602

Добавлено 24 February 2014 - 01:44

Все разъяснения, пояснения......в приложении адрес файла найдёте тут Ссылка Здесь
Тупо копируйте всю ниже расположенную хрень вставляете в модуль и можете уже образовывать свои первые в жизни кластеры в имеющихся данных.
Для критериев которые не представлены в приложении можно по аналогии что-то сделать...тут в основном показана методология..... Если нужны кластеры по другим параметрам то надо в начале найти центры кластеров для простоты работы алгоритмов (можно разными способами это делать в представленных функциях центры искались с помощью К-средних)

Function Bclaster1(ByRef rah As Range, Optional VolatileOn As Boolean = True) As Variant
Application.Volatile VolatileOn
Dim VOZ As Range
Dim i As Long
Dim smas(7) As Single
For Each VOZ In rah.Cells
smas(i) = VOZ.Value
i = i + 1
Next VOZ

Arrast = Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
Dim Vxod(15, 7) As Double
Dim Wix(15, 3) As Double
Dim SRR As Double
Dim Otvet(3) As Double

Vxod(0, 0) = 1.25
Vxod(1, 0) = 2.0288
Vxod(2, 0) = 2.25074
Vxod(3, 0) = 1.1487
Vxod(4, 0) = 1.4299
Vxod(5, 0) = 2.1028
Vxod(6, 0) = 1.6762
Vxod(7, 0) = 1.4966
Vxod(8, 0) = 1.4656
Vxod(9, 0) = 1.4579
Vxod(10, 0) = 1.2202
Vxod(11, 0) = 1.07
Vxod(12, 0) = 1.3399
Vxod(13, 0) = 1.3153
Vxod(14, 0) = 1.3
Vxod(15, 0) = 3.19

Vxod(0, 0) = 1.25
Vxod(1, 0) = 2.0288
Vxod(2, 0) = 2.25074
Vxod(3, 0) = 1.1487
Vxod(4, 0) = 1.4299
Vxod(5, 0) = 2.1028
Vxod(6, 0) = 1.6762
Vxod(7, 0) = 1.4966
Vxod(8, 0) = 1.4656
Vxod(9, 0) = 1.4579
Vxod(10, 0) = 1.2202
Vxod(11, 0) = 1.07
Vxod(12, 0) = 1.3399
Vxod(13, 0) = 1.3153
Vxod(14, 0) = 1.3
Vxod(15, 0) = 3.19

Vxod(0, 2) = 0.90068
Vxod(1, 2) = 1.106
Vxod(2, 2) = 1.5457
Vxod(3, 2) = 0.8842
Vxod(4, 2) = 0.949
Vxod(5, 2) = 1.4304
Vxod(6, 2) = 1.6762
Vxod(7, 2) = 1.0126
Vxod(8, 2) = 0.9613
Vxod(9, 2) = 0.9907
Vxod(10, 2) = 0.8511
Vxod(11, 2) = 0.943
Vxod(12, 2) = 0.9818
Vxod(13, 2) = 1.0015
Vxod(14, 2) = 1.0511
Vxod(15, 2) = 2.235

Vxod(0, 3) = 1.7086
Vxod(1, 3) = 1.5317
Vxod(2, 3) = 0.96439
Vxod(3, 3) = 1.45885
Vxod(4, 3) = 1.5462
Vxod(5, 3) = 1.267
Vxod(6, 3) = 1.404
Vxod(7, 3) = 1.698
Vxod(8, 3) = 1.0661
Vxod(9, 3) = 1.7481
Vxod(10, 3) = 1.708
Vxod(11, 3) = 1.7577
Vxod(12, 3) = 1.441
Vxod(13, 3) = 1.5826
Vxod(14, 3) = 2.29
Vxod(15, 3) = 0.9967

Vxod(0, 4) = 2.1289
Vxod(1, 4) = 1.2665
Vxod(2, 4) = 1.3368
Vxod(3, 4) = 1.111
Vxod(4, 4) = 2.1706
Vxod(5, 4) = 2.0706
Vxod(6, 4) = 1.357
Vxod(7, 4) = 3.2485
Vxod(8, 4) = 1.2794
Vxod(9, 4) = 1.2215
Vxod(10, 4) = 1.3358
Vxod(11, 4) = 1.5945
Vxod(12, 4) = 1.2306
Vxod(13, 4) = 1.8365
Vxod(14, 4) = 1.35
Vxod(15, 4) = 1.5754
Vxod(0, 5) = 0.77625
Vxod(1, 5) = 1.1095
Vxod(2, 5) = 1.28907
Vxod(3, 5) = 0.9793
Vxod(4, 5) = 1.28187
Vxod(5, 5) = 0.8887
Vxod(6, 5) = 1.0243
Vxod(7, 5) = 0.7703
Vxod(8, 5) = 0.9238
Vxod(9, 5) = 1.3
Vxod(10, 5) = 1.0626
Vxod(11, 5) = 0.8781
Vxod(12, 5) = 1.6952
Vxod(13, 5) = 0.9347
Vxod(14, 5) = 1.2428
Vxod(15, 5) = 1.1611

Vxod(0, 6) = 1.7017
Vxod(1, 6) = 1.03686
Vxod(2, 6) = 0.951
Vxod(3, 6) = 0.93238
Vxod(4, 6) = 1.1162
Vxod(5, 6) = 1.5947
Vxod(6, 6) = 0.9389
Vxod(7, 6) = 2.2127
Vxod(8, 6) = 1.026
Vxod(9, 6) = 0.7255
Vxod(10, 6) = 0.9759
Vxod(11, 6) = 1.1127
Vxod(12, 6) = 0.8745
Vxod(13, 6) = 1.3756
Vxod(14, 6) = 0.957759
Vxod(15, 6) = 1.0708

Vxod(0, 7) = 1.0279
Vxod(1, 7) = 1.855
Vxod(2, 7) = 1.6137
Vxod(3, 7) = 1.8883
Vxod(4, 7) = 1.2936
Vxod(5, 7) = 1.1438
Vxod(6, 7) = 1.4752
Vxod(7, 7) = 1.0169
Vxod(8, 7) = 1.2299
Vxod(9, 7) = 1.2633
Vxod(10, 7) = 1.5143
Vxod(11, 7) = 1.1657
Vxod(12, 7) = 1.9391
Vxod(13, 7) = 1.822
Vxod(14, 7) = 1.96178
Vxod(15, 7) = 1.61435

Wix(0, 0) = 0
Wix(1, 0) = 1
Wix(2, 0) = 2
Wix(3, 0) = 3
Wix(4, 0) = 4
Wix(5, 0) = 5
Wix(6, 0) = 6
Wix(7, 0) = 7
Wix(8, 0) = 8
Wix(9, 0) = 9
Wix(10, 0) = 10
Wix(11, 0) = 11
Wix(12, 0) = 12
Wix(13, 0) = 13
Wix(14, 0) = 14
Wix(15, 0) = 15

Wix(0, 1) = 0.229
Wix(1, 1) = 0.5706
Wix(2, 1) = 0.72
Wix(3, 1) = 0.4921
Wix(4, 1) = 0.4181
Wix(5, 1) = 0.4351
Wix(6, 1) = 0.6068
Wix(7, 1) = 0.1747
Wix(8, 1) = 0.5
Wix(9, 1) = 0.4766
Wix(10, 1) = 0.382
Wix(11, 1) = 0.3034
Wix(12, 1) = 0.4919
Wix(13, 1) = 0.4037
Wix(14, 1) = 0.4404
Wix(15, 1) = 0.8604

Wix(0, 2) = 0.2109
Wix(1, 2) = 0.2507
Wix(2, 2) = 0.1907
Wix(3, 2) = 0.33158
Wix(4, 2) = 0.2241
Wix(5, 2) = 0.2922
Wix(6, 2) = 0.2321
Wix(7, 2) = 0.2289
Wix(8, 2) = 0.2832
Wix(9, 2) = 0.3
Wix(10, 2) = 0.344
Wix(11, 2) = 0.3065
Wix(12, 2) = 0.288
Wix(13, 2) = 0.2484
Wix(14, 2) = 0.2924
Wix(15, 2) = 0.093

Wix(0, 3) = 0.56
Wix(1, 3) = 0.1786
Wix(2, 3) = 0.08923
Wix(3, 3) = 0.1763
Wix(4, 3) = 0.3578
Wix(5, 3) = 0.2727
Wix(6, 3) = 0.16099
Wix(7, 3) = 0.5963
Wix(8, 3) = 0.2167
Wix(9, 3) = 0.2233
Wix(10, 3) = 0.2737
Wix(11, 3) = 0.39
Wix(12, 3) = 0.22
Wix(13, 3) = 0.3478
Wix(14, 3) = 0.2671
Wix(15, 3) = 0.0465

For i = 0 To 15
SRR = 0
For j = 0 To 7
SRR = SRR + (Vxod(i, j) - smas(j)) ^ 2

Next j
Arrast(i) = SRR

Next i
For k = 0 To 3
Otvet(k) = Wix((WorksheetFunction.Match(WorksheetFunction.Min(Arrast), Arrast, 0) - 1), k)
Next k

Bclaster1 = Otvet
End Function

Function Bclaster2(ByRef rah As Range, Optional VolatileOn As Boolean = True) As Variant
Application.Volatile VolatileOn
Dim VOZ As Range
Dim i As Long
Dim smas(5) As Single
For Each VOZ In rah.Cells
smas(i) = VOZ.Value
i = i + 1
Next VOZ

Arrast = Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
Dim Vxod(15, 5) As Double
Dim Wix(15, 3) As Double
Dim SRR As Double
Dim Otvet(3) As Double

Vxod(0, 0) = 0.499333
Vxod(1, 0) = 0.348022
Vxod(2, 0) = 0.24798
Vxod(3, 0) = 0.2724637
Vxod(4, 0) = 0.41496
Vxod(5, 0) = 0.676086
Vxod(6, 0) = 0.631076
Vxod(7, 0) = 0.698138
Vxod(8, 0) = 0.463985
Vxod(9, 0) = 0.359247
Vxod(10, 0) = 0.569037
Vxod(11, 0) = 0.853551
Vxod(12, 0) = 0.483216
Vxod(13, 0) = 0.288557
Vxod(14, 0) = 0.5626649
Vxod(15, 0) = 0.276149

Vxod(0, 1) = 0.371333
Vxod(1, 1) = 0.3898305
Vxod(2, 1) = 0.4181
Vxod(3, 1) = 0.399758
Vxod(4, 1) = 0.4257679
Vxod(5, 1) = 0.2123188
Vxod(6, 1) = 0.209201
Vxod(7, 1) = 0.139627
Vxod(8, 1) = 0.324395
Vxod(9, 1) = 0.1819
Vxod(10, 1) = 0.22594
Vxod(11, 1) = 0.06994
Vxod(12, 1) = 0.212139
Vxod(13, 1) = 0.2761
Vxod(14, 1) = 0.182497
Vxod(15, 1) = 0.208046

Vxod(0, 2) = 0.129333
Vxod(1, 2) = 0.2621469
Vxod(2, 2) = 0.33391
Vxod(3, 2) = 0.32777
Vxod(4, 2) = 0.15927
Vxod(5, 2) = 0.11159
Vxod(6, 2) = 0.15972
Vxod(7, 2) = 0.162234
Vxod(8, 2) = 0.211619
Vxod(9, 2) = 0.45884
Vxod(10, 2) = 0.20502
Vxod(11, 2) = 0.0765027
Vxod(12, 2) = 0.304644
Vxod(13, 2) = 0.435323
Vxod(14, 2) = 0.254837
Vxod(15, 2) = 0.5158

Vxod(0, 3) = 0.147555
Vxod(1, 3) = 0.203107
Vxod(2, 3) = 0.336505
Vxod(3, 3) = 0.098792
Vxod(4, 3) = 0.43714
Vxod(5, 3) = 0.35072
Vxod(6, 3) = 0.3946759
Vxod(7, 3) = 0.112588
Vxod(8, 3) = 0.196109
Vxod(9, 3) = 0.161839
Vxod(10, 3) = 0.696304
Vxod(11, 3) = 0.257377
Vxod(12, 3) = 0.351483
Vxod(13, 3) = 0.525186
Vxod(14, 3) = 0.15985
Vxod(15, 3) = 0.1991379

Vxod(0, 4) = 0.311555
Vxod(1, 4) = 0.472599
Vxod(2, 4) = 0.1782
Vxod(3, 4) = 0.268357
Vxod(4, 4) = 0.281285
Vxod(5, 4) = 0.168357
Vxod(6, 4) = 0.390625
Vxod(7, 4) = 0.20811
Vxod(8, 4) = 0.10962
Vxod(9, 4) = 0.17759
Vxod(10, 4) = 0.14191
Vxod(11, 4) = 0.3142076
Vxod(12, 4) = 0.186768
Vxod(13, 4) = 0.249067
Vxod(14, 4) = 0.416666
Vxod(15, 4) = 0.373563

Vxod(0, 5) = 0.540888
Vxod(1, 5) = 0.3242937
Vxod(2, 5) = 0.48529
Vxod(3, 5) = 0.63285
Vxod(4, 5) = 0.281569
Vxod(5, 5) = 0.480917
Vxod(6, 5) = 0.214699
Vxod(7, 5) = 0.679299
Vxod(8, 5) = 0.694269
Vxod(9, 5) = 0.660569
Vxod(10, 5) = 0.161785
Vxod(11, 5) = 0.428415
Vxod(12, 5) = 0.4617486
Vxod(13, 5) = 0.225746
Vxod(14, 5) = 0.42348
Vxod(15, 5) = 0.427298

Wix(0, 0) = 0
Wix(1, 0) = 1
Wix(2, 0) = 2
Wix(3, 0) = 3
Wix(4, 0) = 4
Wix(5, 0) = 5
Wix(6, 0) = 6
Wix(7, 0) = 7
Wix(8, 0) = 8
Wix(9, 0) = 9
Wix(10, 0) = 10
Wix(11, 0) = 11
Wix(12, 0) = 12
Wix(13, 0) = 13
Wix(14, 0) = 14
Wix(15, 0) = 15

Wix(0, 1) = 0.541
Wix(1, 1) = 0.4317
Wix(2, 1) = 0.4275
Wix(3, 1) = 0.4352
Wix(4, 1) = 0.4
Wix(5, 1) = 0.5836
Wix(6, 1) = 0.3837
Wix(7, 1) = 0.66
Wix(8, 1) = 0.5232
Wix(9, 1) = 0.41
Wix(10, 1) = 0.307
Wix(11, 1) = 0.697
Wix(12, 1) = 0.4588
Wix(13, 1) = 0.2222
Wix(14, 1) = 0.5357
Wix(15, 1) = 0.325

Wix(0, 2) = 0.2691
Wix(1, 2) = 0.28058
Wix(2, 2) = 0.2753
Wix(3, 2) = 0.2962
Wix(4, 2) = 0.2563
Wix(5, 2) = 0.2249
Wix(6, 2) = 0.31
Wix(7, 2) = 0.2033
Wix(8, 2) = 0.2582
Wix(9, 2) = 0.3538
Wix(10, 2) = 0.1905
Wix(11, 2) = 0.1866
Wix(12, 2) = 0.2668
Wix(13, 2) = 0.2797
Wix(14, 2) = 0.2472
Wix(15, 2) = 0.325

Wix(0, 3) = 0.1898
Wix(1, 3) = 0.2877
Wix(2, 3) = 0.2971
Wix(3, 3) = 0.2685
Wix(4, 3) = 0.3429
Wix(5, 3) = 0.1915
Wix(6, 3) = 0.306
Wix(7, 3) = 0.1364
Wix(8, 3) = 0.2185
Wix(9, 3) = 0.237
Wix(10, 3) = 0.502
Wix(11, 3) = 0.1162
Wix(12, 3) = 0.2743
Wix(13, 3) = 0.498
Wix(14, 3) = 0.217
Wix(15, 3) = 0.3498


For i = 0 To 15
SRR = 0
For j = 0 To 5
SRR = SRR + (Vxod(i, j) - smas(j)) ^ 2

Next j
Arrast(i) = SRR

Next i
For k = 0 To 3
Otvet(k) = Wix((WorksheetFunction.Match(WorksheetFunction.Min(Arrast), Arrast, 0) - 1), k)
Next k

Bclaster2 = Otvet
End Function

Function Bclaster3(ByRef rah As Range, Optional VolatileOn As Boolean = True) As Variant
Application.Volatile VolatileOn
Dim VOZ As Range
Dim i As Long
Dim smas(1) As Single
For Each VOZ In rah.Cells
smas(i) = VOZ.Value
i = i + 1
Next VOZ

Arrast = Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
Dim Vxod(15, 1) As Double
Dim Wix(15, 3) As Double
Dim SRR As Double
Dim Otvet(3) As Double

Vxod(0, 0) = 1.12228
Vxod(1, 0) = 1.33857
Vxod(2, 0) = 1.952
Vxod(3, 0) = 0.78814
Vxod(4, 0) = 1.122
Vxod(5, 0) = 1.9895
Vxod(6, 0) = 0.8099
Vxod(7, 0) = 2.2275
Vxod(8, 0) = 2.4529
Vxod(9, 0) = 1.2232
Vxod(10, 0) = 1.6815
Vxod(11, 0) = 1.1632
Vxod(12, 0) = 1.8528
Vxod(13, 0) = 1.5497
Vxod(14, 0) = 0.8965
Vxod(15, 0) = 1.4451

Vxod(0, 1) = 2.5049
Vxod(1, 1) = 2.0174
Vxod(2, 1) = 2.3444
Vxod(3, 1) = 0.9907
Vxod(4, 1) = 1.181
Vxod(5, 1) = 0.8807
Vxod(6, 1) = 1.4444
Vxod(7, 1) = 1.7573
Vxod(8, 1) = 1.1644
Vxod(9, 1) = 1.6047
Vxod(10, 1) = 1.7319
Vxod(11, 1) = 0.7784
Vxod(12, 1) = 1.279
Vxod(13, 1) = 0.9464
Vxod(14, 1) = 1.9455
Vxod(15, 1) = 1.2976
Wix(0, 0) = 0
Wix(1, 0) = 1
Wix(2, 0) = 2
Wix(3, 0) = 3
Wix(4, 0) = 4
Wix(5, 0) = 5
Wix(6, 0) = 6
Wix(7, 0) = 7
Wix(8, 0) = 8
Wix(9, 0) = 9
Wix(10, 0) = 10
Wix(11, 0) = 11
Wix(12, 0) = 12
Wix(13, 0) = 13
Wix(14, 0) = 14
Wix(15, 0) = 15

Wix(0, 1) = 0.171
Wix(1, 1) = 0.2896
Wix(2, 1) = 0.3622
Wix(3, 1) = 0.4325
Wix(4, 1) = 0.4363
Wix(5, 1) = 0.6942
Wix(6, 1) = 0.3591
Wix(7, 1) = 0.63095
Wix(8, 1) = 0.843
Wix(9, 1) = 0.396
Wix(10, 1) = 0.4349
Wix(11, 1) = 0.4688
Wix(12, 1) = 0.6461
Wix(13, 1) = 0.5869
Wix(14, 1) = 0.296
Wix(15, 1) = 0.5189

Wix(0, 2) = 0.2434
Wix(1, 2) = 0.2278
Wix(2, 2) = 0.2519
Wix(3, 2) = 0.2629
Wix(4, 2) = 0.3358
Wix(5, 2) = 0.2184
Wix(6, 2) = 0.3356
Wix(7, 2) = 0.2143
Wix(8, 2) = 0.093
Wix(9, 2) = 0.2419
Wix(10, 2) = 0.2825
Wix(11, 2) = 0.3264
Wix(12, 2) = 0.2275
Wix(13, 2) = 0.2536
Wix(14, 2) = 0.2527
Wix(15, 2) = 0.2867

Wix(0, 3) = 0.5855
Wix(1, 3) = 0.4826
Wix(2, 3) = 0.3858
Wix(3, 3) = 0.3045
Wix(4, 3) = 0.2279
Wix(5, 3) = 0.087
Wix(6, 3) = 0.3054
Wix(7, 3) = 0.1547
Wix(8, 3) = 0.6395
Wix(9, 3) = 0.3623
Wix(10, 3) = 0.2825
Wix(11, 3) = 0.2047
Wix(12, 3) = 0.1264
Wix(13, 3) = 0.1595
Wix(14, 3) = 0.4513
Wix(15, 3) = 0.1943


For i = 0 To 15
SRR = 0
For j = 0 To 1
SRR = SRR + (Vxod(i, j) - smas(j)) ^ 2

Next j
Arrast(i) = SRR

Next i
For k = 0 To 3
Otvet(k) = Wix((WorksheetFunction.Match(WorksheetFunction.Min(Arrast), Arrast, 0) - 1), k)
Next k

Bclaster3 = Otvet
End Function

Function Clbuk(ByRef rah As Range, Optional VolatileOn As Boolean = True) As Variant
Application.Volatile VolatileOn

Set DANK = rah

If (DANK.Cells(1, 1) > 1) And (DANK.Cells(1, 1) <= 1.1) Then
Outsig = Array(0, 0.95071754, 0.045089359)
ElseIf (DANK.Cells(1, 1) > 1.1) And (DANK.Cells(1, 1) <= 1.17) Then
Outsig = Array(1, 0.895747593, 0.082150576)
ElseIf (DANK.Cells(1, 1) > 1.17) And (DANK.Cells(1, 1) <= 1.25) Then
Outsig = Array(2, 0.830878922, 0.150826378)
ElseIf (DANK.Cells(1, 1) > 1.25) And (DANK.Cells(1, 1) <= 1.35) Then
Outsig = Array(3, 0.775296465, 0.166493)
ElseIf (DANK.Cells(1, 1) > 1.35) And (DANK.Cells(1, 1) <= 1.46) Then
Outsig = Array(4, 0.691113592, 0.233028264)
ElseIf (DANK.Cells(1, 1) > 1.46) And (DANK.Cells(1, 1) <= 1.59) Then
Outsig = Array(5, 0.626258705, 0.257140469)
ElseIf (DANK.Cells(1, 1) > 1.59) And (DANK.Cells(1, 1) <= 1.75) Then
Outsig = Array(6, 0.597720673, 0.243692625)
ElseIf (DANK.Cells(1, 1) > 1.75) And (DANK.Cells(1, 1) <= 1.95) Then
Outsig = Array(7, 0.523138692, 0.300353872)
ElseIf (DANK.Cells(1, 1) > 1.95) And (DANK.Cells(1, 1) <= 2.2) Then
Outsig = Array(8, 0.485470749, 0.306978945)
ElseIf (DANK.Cells(1, 1) > 2.2) And (DANK.Cells(1, 1) <= 2.5) Then
Outsig = Array(9, 0.424331744, 0.310352368)
ElseIf (DANK.Cells(1, 1) > 2.5) And (DANK.Cells(1, 1) <= 2.9) Then
Outsig = Array(10, 0.3629406, 0.315335213)
ElseIf (DANK.Cells(1, 1) > 2.9) And (DANK.Cells(1, 1) <= 3.45) Then
Outsig = Array(11, 0.301373764, 0.30971869)
ElseIf (DANK.Cells(1, 1) > 3.45) And (DANK.Cells(1, 1) <= 4.3) Then
Outsig = Array(12, 0.259633122, 0.280269263)
ElseIf (DANK.Cells(1, 1) > 4.3) And (DANK.Cells(1, 1) <= 5.6) Then
Outsig = Array(13, 0.196705062, 0.265044984)
ElseIf (DANK.Cells(1, 1) > 5.6) And (DANK.Cells(1, 1) <= 8.2) Then
Outsig = Array(14, 0.153583812, 0.207455484)
ElseIf (DANK.Cells(1, 1) > 8.2) Then
Outsig = Array(15, 0.084612993, 0.178969138)
Else
Outsig = "BGDAN"
End If
Clbuk = Outsig
End Function

Отредактировано Bambuk, 24 February 2014 - 01:52.