Выбрать дату в календареВыбрать дату в календаре

Страницы: 1
Надстройка Attestat для статистического анализа - как запустить на современной Excel (64b), Надстройка Attestat для статистического анализа - как запустить на современной Excel (64b)
 
Понадобилась замечательная Надстройка Attestat для статистического анализа с очень широкими возхможностями. Ну и бесплатная, что немаловажно. Однако разработчик И.П. Гайдышев, к большому сожалению, перестал ее поддерживать. На 32b Excel устанавливается и работает даже под Win64. Но вот как запустить ее на современной Excel (64b).
Попробовал ничего не меняя просто кустарно убрать Private из всех модулей и заменить Declare Function и Declare Sub на Declare PtrSafe Function и Declare PtrSafe Sub.
Вроде бы компиляция большинства модулей проходит, но в одном месте все равно ругается на неопределенную переменную. Понял, своей квалификации не хватит.

Вопрос, может быть, у кого-то есть уже готовая надстройка Attestat для 64b Excel или подскажите, где взять. Ну или кто-то может исправить сам.
Нужна UDF для удаления одного указываемого элемента из текста (списка элементов)
 
День добрый!

Нужна UDF VBA функция для корректного удаления одного указываемого элемента из строки-списка элементов, разделенных запятыми (в одной ячейке)

Первый аргумент – строка, представляющая собой список элементов через запятую (без пробелов) в некоторой ячейке. Номера могут быть неупорядочены.
И могут быть типа X1,Y2,XX3, и т.д.
Второй аргумент – элемент, который нужно удалить из списка. Если его в списке нет, то оставить строку-список без изменения.

Например.

Исходная строка в ячейке
1,3,4,5,6,7,8,9,10,11,12,13
Нужно удалить некоторый элемент, если он там есть, то есть, задав 4, получить
1,3,5,6,7,8,9,10,11,12,13
При этом, задав для удаления 2, которого в примере не было, не надо получать
1,3,4,5,6,7,8,9,10,11,113

Именно так (т.е. неправильно) делает моя формула листа
Код
'=ЕСЛИ(НАЙТИ(B7;B$5)+ДЛСТР(B7)-1=ДЛСТР(B$5);ЗАМЕНИТЬ(B$5;НАЙТИ(B7;B$5)-1;ДЛСТР(B7)+1;"");ЗАМЕНИТЬ(B$5;НАЙТИ(B7;B$5);ДЛСТР(B7)+1;""))

B$13 – исходная строка, B15 – элемент для удаления

К тому же, длинно и долго выполняется. Пробовал сам написать функцию VBA, искал везде - безуспешно. Вроде бы, естественная не очень сложная задача, должна ведь где-то быть решена. Но увы.
Надеюсь на помощь знатоков

Спасибо
Нужна функция расчета R^2 множественной линейной регрессии с числом факторов > 16 (как у ЛИНЕЙН), преобразовать имеющуюся формулу в UDF функцию
 
Требуется рассчитать параметры множественной линейной регрессии методом наименьших квадратов в прямом матричном представлении (например, коэффициенты регрессии, стандартные ошибки, остаточную дисперсию и др.) .
Как известно, встроенные в Excel средства – Пакет анализа и функции типа ЛИНЕЙН – работают не более, чем с 16 факторами-регрессорами (по крайней мере в версиях до Office2007), а у меня как минимум десятки факторов (по максимуму – сотни).
Поэтому я составил формулу для расчета, например, коэффициента детерминации R^2 множественной линейной регрессии прямым матричным методом, которая вводится в одну ячейку как формула массива

{=СУММКВ(МУМНОЖ(XInput;МУМНОЖ(МУМНОЖ(МОБР(МУМНОЖ(ТРАНСП(XInput);XInput));ТРАНСП(XInput));YInput))–СРЗНАЧ(YInput))/СУММКВ(YInput–СРЗНАЧ(YInput))}

Формула вполне работает с десятками показателей-факторов. Однако, если попытаться "нагрузить" ее естественными проверками корректности входных данных, например таким образом

{=ЕСЛИ(ЧСТРОК(XInput)=ЧСТРОК(YInput);ЕСЛИ(МОПРЕД(МУМНОЖ(ТРАНСП(XInput);XInput))>ЕСЛИ(ЕЧИСЛО(MdetMin);MdetMin;0.01);
СУММКВ(МУМНОЖ(XInput;МУМНОЖ(МУМНОЖ(МОБР(МУМНОЖ(ТРАНСП(XInput);XInput));ТРАНСП(XInput));YInput))–СРЗНАЧ(YInput))/СУММКВ(YInput–СРЗНАЧ(YInput));"Исходная матрица факторов X вырождена");"Число строк в данных X и Y не совпадает")}

то Excel начинает ругаться о превышении лимита количества вложенных функций. Вариант "размазать" сложную формулу по нескольким ячейкам по частям не устраивает.
Кроме того, если входной столбец YInput передается в формулу непосредственно, как есть, то в соответствии с методом наименьших квадратов к исходной матрице факторов X необходимо слева приписать столбец из единиц, и таким образом, образовать рабочую матрицу XInput, которая подается на вход формулы. А это добавит в структуру данной формулы, как минимум, еще один "этаж", да в нескольких местах.
Представляется, что преодолеть эти и другие трудности можно при помощи соответствующей пользовательской функции VBA.

Вопрос. 1) Не встречал ли кто-нибудь готовую (свободную для использования) UDF функцию Excel для расчета параметров множественной линейной регрессии (коэффициент детерминации R^2 и др.), работающую с десятками факторов? (Встроенные функции ЛИНЕЙН  и т.п. не годятся – у них число факторов <=16). Если да, то можете ли поделиться ссылкой?
2) Если Вы способны писать на языке VBA так же свободно, как и по-русски, не заглядывая в справочник-словарь, как я, то не могли бы Вы преобразовать приведенные выше формулы в пользовательские функции Excel, которые я мог бы использовать в качестве образца для создания других функций для расчета всех необходимых параметров?
На всякий случай, позволю себе привести формулу в более принятом матричном виде

R^2=SUMM[(X(X'X)^(-1)X'Y–Yср)^2]/SUMM[Y–Yср)^2].    Здесь верхний штрих означает транспонирование.

Спасибо
Изменено: ken54 - 18.11.2015 22:14:53
Приписать к исходной матрице слева столбец из единиц
 
Требуется приписать к исходной матрице слева столбец из единиц.

Нужна формула Excel, возвращающая единый массив, в котором к столбцам исходного диапазона приписан слева столбец из единиц.
Нужная формула будет частью более сложной расчетной формулы, расположенной В ОДНОЙ ЯЧЕЙКЕ и введенной как функция массива.

В файле я привожу возможный вариант формулы массива НА ЛИСТЕ.
В составе более сложной расчетной формулы массива в одной ячейке этот вариант не работает.

Спасибо
Изменено: ken54 - 15.11.2015 10:58:58
Как внутри формулы массива сослаться на верхний левый угол диапазона, куда введена эта формула?
 
Собственно вопрос сформулирован. Возможно ответ прост, извините, что-то не соображу.

Для чего это нужно?
Ну, например, надо определить относительный номер столбца диапазона, в котором находится формула массива как-то так
СТОЛБЕЦ() – СТОЛБЕЦ(угол_диапазона) + 1,
Тогда в самой угловой ячейке он будет равен 1, далее 2 и т.д.

Обычная абсолютная ссылка типа СТОЛБЕЦ($AK$11) в качестве СТОЛБЕЦ(угол_диапазона) не подходит, так как формула должна сама определять, в какой диапазон она введена. Имя диапазона по той же причине не подходит – нужная формула предполагается быть частью более сложного расчета как бы вводимого в различные диапазоны. Функция ИНДЕКС даст циклическую ссылку. Функция ДВССЫЛ(текстовый_адрес) опять предполагает, что человек заранее знает, куда будет введена формула массива.

Вопрос не кажется неуместным. Ведь та же функция СТОЛБЕЦ(), будучи внутри формулы массива, прекрасно определяет номер текущего столбца этого самого массива, в который введена. Вопрос в том, как внутри формулы определить верхний левый угол диапазона формулы массива.

Лирическое отступление.
Предлагается пара новых терминов-аббревиатур. Возможно, названия для будущих функций, возвращающих ссылку:
ВЛУГОЛ()  –  верхний левый угол диапазона (формулы массива).
ПНУГОЛ()  –  правый нижний угол диапазона (формулы массива).
Изменено: ken54 - 10.11.2015 02:17:07
Единый массив из заданного подмножества несмежных столбцов исходного диапазона
 
Нужна функция массива Excel, возвращающая единый массив, составленный из заданного подмножества возможно несмежных столбцов исходного диапазона.
На входе функция получает два аргумента-массива: 1) исходный прямоугольный диапазон, пусть имеющий n строк и m столбцов, указанный, например, адресом через ":" или именем, и 2) вектор (строку или столбец) длиной m элементов из нулей или единиц, содержащий k единиц (k может быть от 1 до m). Единицы в этом векторе указывают те столбцы исходного массива, из которых и надо сделать единый (смежный) выходной массив размера n строк и k столбцов.

Пример.
вход:
1 4 7
2 5 8
3 6 9
и
1     0     1
выход:
1 7
2 8
3 9
Функция нужна для использования в качестве аргумента для расчетных функций.

Спасибо.

P.S.Разумеется, я искал, но не нашел. Не исключено, что подобная задача встречалась, но другой в формулировке.
Изменено: ken54 - 02.11.2015 20:34:06
Страницы: 1
Наверх