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

Страницы: 1 2 След.
Надстройка Attestat для статистического анализа - как запустить на современной Excel (64b), Надстройка Attestat для статистического анализа - как запустить на современной Excel (64b)
 
Спасибо. Но с этого сайта я уже все четыре версии Attestat пробовал – ни одна не запускается. Точнее у одной устанавливается огрызок меню с одним разделом анализа из примерно 20, которые там были.
Надстройка 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 для удаления одного указываемого элемента из текста (списка элементов)
 
Еще раз большое спасибо всем участникам обсуждения.
Проверил все опубликованные решения (в том числе дополненные для обработки частных случаев) в Excel 2010.

To AB1
Был неправ. Формула, предложенная Вами, работает, в том числе, правильно дает пустоту, если исходная строка состоит из одного элемента (без запятых) и он же задается в качестве удаляемого, то есть, если первый аргумент "4", и второй – тоже "4". Более того, она дает пустоту даже если первый аргумент "4," или ",4", а второй – "4". И только если строка это  ",4,", а удалить надо  "4", то в ответе остается одинокая запятая. Но это уже совсем невероятный случай.
По-видимому, на машине, где я ее смотрел первый раз (не моя), стояла какая-то неполноценная Excel 2003.
Вообще трудно не восхититься, увидев такую формулу – 1386 знаков ! И все работает. Да ее прочитать только, – и то трудно, не то, что отладить. Респект.

Однако в моей рабочей книге предполагается последовательная обработка многих строк со списком элементов через запятую. На каждом шаге будет удаляться какой-то следующий (не по порядку) элемент на основе экстремальности некоторого критерия. Всего исходное число элементов списка – несколько десятков, может быть пару сотен. Не исключено, что потребуется рекуррентная обработка строк в одной ячейке Тогда в каждом месте, где в этой формуле встречается первый аргумент – исходная строка-список элементов (а всего их 36! ), придется вставить еще одну такую же формулу. А это уже полный завал. Увы. Поэтому, скорее всего, поблагодарив Вас за помощь,я склоняюсь к варианту функции на VBA.

To kuklp
Предложенная Вами функция DelNumber не компилировалась у меня днем на машине с, вероятно, некорректно установленной Excel 2003. Сейчас на Excel 2010 она компилируется и запускается без замечаний. Функция (речь идет об исправленной Вами функции) даже правильно обрабатывает экзотические частные случаи, если исходная строка (первый аргумент) это "4," или ",4", а второй (удаляемый элемент) – "4". И лишь если строка это  ",4,", а удалить надо  "4", то в ответе (как и при помощи формулы уважаемого AB1) остается одинокая запятая. Но это все же экзотика. Правильно обрабатывается и пустая исходная строка – на выходе – пустота.

Однако штатный частный случай, если исходная строка состоит из одного элемента (без запятых) и он же задается в качестве удаляемого, то есть, если первый аргумент "4", и второй – тоже "4" Ваша функция не удаляет его, и в ответе та же строка "4". Кроме того, она не совсем удачно обрабатывает другой частный случай – если по какой-то причине второй аргумент – удаляемый элемент – окажется пустым. В этом случае, казалось бы, исходная строка должна остаться без изменений. Но функция DelNumber удаляет первую запятую в строке – между первым и вторым ее элементами и "склеивает их" в один несуществующий номер.
Поэтому, хотя во своему виду Ваша функция мне нравится больше иных предложенных решений, придется использовать другую.

To Sanja
Дополненная Вами функция УДАЛИТЬСИМВОЛ (хотя название, похоже, не соответствует функционалу – удаляется не символ, а элемент списка, в том числе несколько символов) в ходе моей проверки корректно обрабатывает все рабочие и частные случаи. Так что, скорее всего, пака я попробую использовать именно ее.
Однако меня несколько смущает оператор On Error Resume Next. Насколько я понимаю, его смысл примерно таков : "Наплюй на любую ошибку и дуй дальше".
Если эта команда (статус) простирается на всю дальнейшую работу программы, то ошибки могут накапливаться и приводить к непредсказуемым результатам.
Как Вы думаете, нельзя ли обойтись без столь рискованной (на мой взгляд) команды?

P.S. Ко всем:
Друзья, а надо ли спорить, кого ребенок любит больше, маму или папу?
Нужна UDF для удаления одного указываемого элемента из текста (списка элементов)
 
Спасибо всем за участие. Два комментария.

1. Я попал сейчас только на машину, где установлен Excel 2003. Поэтому функция уважаемого kuklp здесь, к сожалению, не компилируется. Посмотрю вечером на Excel 2010.

Формула уважаемого AB1 работает "с трудом" – в первый момент после открытия все делает правильно, а потом улетает. В Excel 2003, очевидно, нет функции листа ЕОШИБКА(;), и она ее заменила на скрытую функцию _xlfn.IFERROR(;), а затем, после малейших действий в других ячейках листа, вместо формулы стала писать #ИМЯ? или "Слишком сложная формула".
Функция уважаемого Sanja работает спокойно.

2. Оба проверенных варианта, однако, не обрабатывают крайний частный случай (который, правда, совсем не упоминался в исходном вопросе) :  если заданная строка-список элементов с разделителем-запятой состоит всего из одного элемента и, поэтому, в ней вообще нет ни одной запятой. А такое, хоть редко, но может быть. И как самый редкий случай – она может оказаться пустой. По-видимому, нужно еще чуть-чуть дописать.

Заранее большое спасибо
Нужна 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, искал везде - безуспешно. Вроде бы, естественная не очень сложная задача, должна ведь где-то быть решена. Но увы.
Надеюсь на помощь знатоков

Спасибо
Приписать к исходной матрице слева столбец из единиц
 
JayBhagavan, Спасибо. Понял.
Нужна функция расчета R^2 множественной линейной регрессии с числом факторов > 16 (как у ЛИНЕЙН), преобразовать имеющуюся формулу в UDF функцию
 
Цитата
Chonard написал: Хотите самописный код в Excel
Да именно НЕ самописный – хотелось бы готовую проверенную функцию.
Нужна функция расчета R^2 множественной линейной регрессии с числом факторов > 16 (как у ЛИНЕЙН), преобразовать имеющуюся формулу в UDF функцию
 
Цитата
Chonard написал:
В случае вашей задачи я бы присмотрелся все же к MatLab
Спасибо за совет. Еще кто-то предложил R. Есть еще SPSS, Statistica и т.д. В общем, по-видимому, придется отходить от Excel.
А жаль...
Изменено: ken54 - 20.11.2015 16:51:31
Нужна функция расчета R^2 множественной линейной регрессии с числом факторов > 16 (как у ЛИНЕЙН), преобразовать имеющуюся формулу в UDF функцию
 
Chonard, да. Специального ПО много. Просто хотелось сделать все "прозрачно" в Excel. Известный минус всех спецПО в том, что большинство расчетов они делают как в черном ящике – никогда точно неизвестно, как именно они там считают. Часто разные ПО дают разные ответы для одних и тех же данных. Простейший пример, если на каждом шаге некоторого алгоритма происходит разветвление в зависимости от минимального или максимального значения в наборе значений, то если экстремальное значение встречается несколько раз, какое именно выбирают для следующего шага, как правило, неизвестно. Даже если пишут "первое встреченное" (или последнее) – то в каком порядке они были для просмотра, неясно. В Excel можно все определить однозначно, конкретно.
Изменено: ken54 - 19.11.2015 21:27:21
Нужна функция расчета R^2 множественной линейной регрессии с числом факторов > 16 (как у ЛИНЕЙН), преобразовать имеющуюся формулу в UDF функцию
 
Цитата
Chonard написал:
А чем не нравится Вам первая формула с суммой из вашего рисунка? Ее проще программировать по-моему.
По-видимому, речь идет о второй формуле. Дело в том, что обе формулы в вычислительном смысле одинаково трудны: в той, что Вам приглянулась ("формула с суммой"), присутствуют расчетные значения зависимой переменной ("y с крышкой"), для вычисления которых (точнее, сначала для определения коэффициентов регрессии) понадобятся те же самые матричные операции. Это я как раз и показал в третьей формуле.  
Нужна функция расчета R^2 множественной линейной регрессии с числом факторов > 16 (как у ЛИНЕЙН), преобразовать имеющуюся формулу в UDF функцию
 
justirus, Спасибо за ссылку, очень близко. Плюс хорошо, когда люди не ленятся всюду в теле программы-функции писать множество комментариев.
Правда авторы, все время подчеркивают, что их функция только для парной регрессии, то есть для регрессии
с одним фактором X. У меня же должны использоваться десятки, а может и сотни факторов.
Формулы для расчета параметров множественной линейной регрессии гораздо более громоздки, чем для парной – это не просто добавить всюду встроенные или объемлющие циклы, а совсем другой расчет.
Попробую разобраться, но вопрос о готовой функции именно для расчета параметров множественной линейной регрессии не снимается.
Изменено: ken54 - 19.11.2015 15:49:19
Нужна функция расчета R^2 множественной линейной регрессии с числом факторов > 16 (как у ЛИНЕЙН), преобразовать имеющуюся формулу в UDF функцию
 
Цитата
Chonard написал:
вы и сами , пользуясь справочником легко составите нужную вам пользовательскую функцию.
То, что в программе можно непосредственно использовать функции листа, это, конечно, здорово. Хотя наверняка есть какие-то особенности. Например, в локализованной версии (русской) Офиса, когда на листе есть функция МОБР, в программе надо писать МОБР(M1) или  MInverse(M1) ?
Но, главное замедление вызывают даже не сами функции – именно по справочнику их и можно найти, а то, что пока у меня не набита рука эффективно писать разные обслуживающие операторы, например, "определения" типа Dim, ReDim, и т.д.
Поэтому хотелось бы найти где-нибудь готовую функцию, чтобы разобрать "по полочкам" и использовать как образец.
Спасибо
Нужна функция расчета R^2 множественной линейной регрессии с числом факторов > 16 (как у ЛИНЕЙН), преобразовать имеющуюся формулу в UDF функцию
 
Цитата
Chonard написал:
исходя из вашей формулы, которая не понятна в смысле определения операции суммирования
Извините, споткнувшись о невозможность представления формулы прямо в сообщении попытался изобразить ее в виде смеси матричной и Excel-ной записи.
Вот, если интересно, выкладываю картинки формулы в двух вариантах записи –  матричной и скалярной. Там верхний штрих означает операцию транспонирования матрицы, прямая черта над переменной – ее среднее значение, а "y с крышкой" – расчетные значения зависимой переменной  y . n – это число строк данных.
Изменено: ken54 - 19.11.2015 16:31:24
Нужна функция расчета 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
Приписать к исходной матрице слева столбец из единиц
 
JayBhagavan, 2-й вопрос, если позволите, по-видимому, вызван недостаточным знакомством с VBA:
Зачем нужен временный массив arr_tmp? Почему нельзя везде, где он используется, сразу поставить массив arr – аргумент функции?

То есть сделать так
Код
Function arr_plus(arr As Range)
Dim arr_new(), i&, j&
    ReDim arr_new(1 To UBound(arr, 1), 1 To UBound(arr, 2) + 1)
    For i = 1 To UBound(arr_new, 1)
        arr_new(i, 1) = 1
        For j = 2 To UBound(arr_new, 2)
            arr_new(i, j) = arr(i, j - 1)
        Next j
    Next i
    arr_plus = arr_new
End Function
Аналогичный вопрос возникает и по поводу массива arr_new, зачем он нужен. Но тут, я подозреваю, дело в том, что Вы не хотите в теле функции "трогать" ее имя, вводя его в программу непосредственно перед выходом. Но что это дает кроме расхода лишней памяти?
Изменено: ken54 - 19.11.2015 21:14:31
Приписать к исходной матрице слева столбец из единиц
 
Если позволите, JayBhagavan, один вопрос по Вашей функции.

Не будет ли лучше (и считать быстрее), если избежать проверки по IF на каждом шаге присвоения (число раз выполнения IF здесь равно числу строк, умноженному на число столбцов новой матрицы), а вынести присвоение единиц из внутреннего цикла непосредственно во внешний, и начать внутренний сразу с 2-х?
То есть, примерно так
Код
Function arr_plus(arr As Range)
Dim arr_tmp, arr_new(), i&, j&
    arr_tmp = arr.Value
    ReDim arr_new(1 To UBound(arr_tmp, 1), 1 To UBound(arr_tmp, 2) + 1)
    For i = 1 To UBound(arr_new, 1)
        arr_new(i, 1) = 1
        For j = 2 To UBound(arr_new, 2)
            arr_new(i, j) = arr_tmp(i, j - 1)
        Next j
    Next i
    arr_plus = arr_new
End Function

Простите, модератор, не знаю, как сделать удобную вкладку.
Изменено: ken54 - 19.11.2015 12:51:49
Приписать к исходной матрице слева столбец из единиц
 
Спасибо,  JayBhagavan,  только вернулся к машине, не сразу ответил.

Боюсь сглазить, но похоже, что это то, что нужно. Хотя и не формула (как было в первоначальном вопросе), а функция, но так, насколько я понимаю, даже лучше – нечаянно испортить на листе сложнее, да и считает быстрее.

Спасибо, за помощь. Буду разбираться.
Приписать к исходной матрице слева столбец из единиц
 
JayBhagavan, Спасибо, что откликнулись

Вопрос же не в том, чтобы получить эти два числа – эти две проверочные формулы я предложил только для того, чтобы убедиться, что основная Нужная формула массива будет работать не только НА ЛИСТЕ, но и будучи введенной как часть более сложной формулы массива В ОДНУ ЯЧЕЙКУ.
(Как я писал ранее, это будут расчеты параметров множественной линейной регрессии. Там эту матрицу придется транспонировать, умножать, инвертировать и т.д.)

Таким образом, в случае Вашей формулы все было бы хорошо, если бы подставив ее в
{=ЧИСЛСТОЛБ(Нужная формула)}
ВМЕСТО слов Нужная формула
то есть введя в ячейку
{=ЧИСЛСТОЛБ(ЕСЛИ(СТОЛБЕЦ(ДВССЫЛ("1:"&ЧИСЛСТОЛБ(Матрица_исходная)+1))=1;1;ИНДЕКС(Матрица_исходная;СТРОКА(ДВССЫЛ("1:"&ЧСТРОК(Матрица_исходная)));СТОЛБЕЦ(ДВССЫЛ("1:"&ЧИСЛСТОЛБ(Матрица_исходная)+1))-1)))}

мы получали бы правильный ответ.
Увы...Представленное выражение дает число 256. Пока, правда, я не разобрался, почему.  
Приписать к исходной матрице слева столбец из единиц
 
JayBhagavan,Спасибо за попытку.
Как формула массива НА ЛИСТЕ Ваша формула вполне работает. Однако если подставить ее в проверочные ячейки
M27 с формулой
{=ЧИСЛСТОЛБ(Нужная формула)}
и в M29 с формулой
{=СУММ(Нужная формула)}
вместо слов Нужная формула,
то ЧИСЛСТОЛБ дает 256,
а СУММ – #Н/Д.
Буду разбираться.
Приписать к исходной матрице слева столбец из единиц
 
Цитата
ken54 написал:
мне уже удалось найти решение приведенной мной частной задачи приписывания единичного столбца слева к заданной матрице и именно в виде формулы массива В ОДНОЙ ЯЧЕЙКЕ
Формула массива простая

{=ВЫБОР({1;2;3;4};1;ИНДЕКС(Матрица_исходная;;1);ИНДЕКС(Матрица_исходная;;2);ИНДЕКС(Матрица_исходная;;3))}

Соответственно в проверочных ячейках следует записать

{=ЧИСЛСТОЛБ(ВЫБОР({1;2;3;4};1;ИНДЕКС(Матрица_исходная;;1);ИНДЕКС(Матрица_исходная;;2);ИНДЕКС(Матрица_исходная;;3)))}    и это даст 4,
{=СУММ(ВЫБОР({1;2;3;4};1;ИНДЕКС(Матрица_исходная;;1);ИНДЕКС(Матрица_исходная;;2);ИНДЕКС(Матрица_исходная;;3)))}              и это даст 2239.49

Основной, и для меня достаточно серьезный, недостаток этого решения в том, что это решение действительно ТОЛЬКО ЧАСТНОЙ ЗАДАЧИ – структура формулы хотя и не содержит ни адреса исходной матрицы, ни числа ее строк, но явным образом использует число столбцов этой матрицы.
Поэтому общее решение, по-видимому, требует текстовой формулы для нужного числа повторений элемента ";ИНДЕКС(Матрица_исходная;;1)" да еще и с изменяемым номером столбца в каждом повторении.
Буду признателен за любые предложения по доработке.
Приписать к исходной матрице слева столбец из единиц
 
Ну что же – этого я и опасался, когда в первоначальном вопросе не сообщал подробностей, для чего это нужно. Народ резко потерял интерес к теме.
Воистину, многие знания – многие скорби и умножающий знание умножает печаль.

Впрочем, мне уже удалось найти решение приведенной мной частной задачи приписывания единичного столбца слева к заданной матрице и именно в виде формулы массива В ОДНОЙ ЯЧЕЙКЕ. Спасибо всем участникам дискуссии.
Но раз это никому более не интересно, что ж ...
Приписать к исходной матрице слева столбец из единиц
 
Цитата
Вы объясните для чего вам столбец из единиц - что вы дальше собираетесь с ним делать?
Если знать конечную задачу, то, возможно есть другие пути ее решения
Да это очевидно: рассчитать параметры множественной линейной регрессии методом наименьших квадратов в прямом матричном представлении.
(Ничего смешного – это действительно очевидно, так как это единственный случай во всех различных разделах высшей математики, который мне встретился, когда применяется этот прием – приписать к исходной матрице слева столбец из единиц).

Дело в том, что встроенные в Excel средства – Пакет анализа и функции типа ЛИНЕЙН – работают не более, чем с 16 факторами-регрессорами (по крайней мере в версиях до Office2007), а у меня как минимум десятки факторов (по максимуму – сотни).

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

Я не писал ранее об этом, так как полагал, что не нужно задуривать людям голову лишними деталями и отвлекать от самого вопроса –
как внутри формулы массива, размещенной в одной ячейке, приписать слева к исходной матрице – ее основному, а скорее всего и единственному аргументу – столбец из единиц.
Если Вы полагаете, что знание этого может помочь ответить на вопрос, извольте.
Изменено: ken54 - 17.11.2015 18:46:10
Приписать к исходной матрице слева столбец из единиц
 
Цитата
Сергей написал: этот бред когда вычисление формулы показывает 3=3 ЛОЖЬ, вобщем я не понимаю вашей логики
Понял, как Вам объяснить логику условия
СТОЛБЕЦ()=МИН(СТОЛБЕЦ())
Введите, пожалуйста, формулу
{=СТОЛБЕЦ()}
в какой-нибудь диапазон, например, A11:D11 (по CSE, разумеется). И увидите строку
1    2    3    4
Теперь введите формулу
{=МИН(СТОЛБЕЦ())}
в диапазон A12:D12 тоже как формулу массива (по CSE, разумеется).  И увидите строку
1    1    1    1
Теперь, введите формулу
{=СТОЛБЕЦ()=МИН(СТОЛБЕЦ())}
в диапазон A13:D13 тоже как формулу массива. И увидите строку
ИСТИНА   ЛОЖЬ   ЛОЖЬ   ЛОЖЬ

Все правильно. Формула МИН(СТОЛБЕЦ()), введенная в диапазон как формула массива, дает номер самого левого столбца этого диапазона, в который она сама введена!
Изменено: ken54 - 03.12.2015 01:40:57
Приписать к исходной матрице слева столбец из единиц
 
Цитата
Сергей написал: бред когда вычисление формулы показывает 3=3 ЛОЖЬ,
Да не показывает "3=3 ЛОЖЬ". Посмотрите предыдущий ответ внимательнее, пожалуйста. В моем файле примера формула
{=ЕСЛИ(СТОЛБЕЦ()=МИН(СТОЛБЕЦ());1;ИНДЕКС(Матрица_исходная;;{0;1;2;3}))}
введена в диапазон P11:S20. При этом ее часть
СТОЛБЕЦ()=МИН(СТОЛБЕЦ())
дает истину только в ячейках P11:P20, так как в них СТОЛБЕЦ()=16  и  МИН(СТОЛБЕЦ())=16.
А в остальных ячейках этого диапазона по-прежнему МИН(СТОЛБЕЦ())=16, а  СТОЛБЕЦ()=17 в ячейках Q11:Q20, СТОЛБЕЦ()=18 в ячейках R11:R20, СТОЛБЕЦ()=19 в ячейках S11:S20.

Таким образом, условие
СТОЛБЕЦ()=МИН(СТОЛБЕЦ())
дает ИСТИНА только в ячейках P11:P20, и туда по функции ЕСЛИ записывается столбец из единиц,
а в остальные ячейки – соответствующие элементы исходной матрица по функции ИНДЕКС.
То есть НА ЛИСТЕ – в диапазоне P11:S20 моего файла-примера – задача решена: к исходной матрице слева приписан столбец из единиц.
А требуется сделать это в тексте формулы массива В ОДНОЙ ЯЧЕЙКЕ, а не в диапазоне, например, в ячейках M27 с формулой
{=ЧИСЛСТОЛБ(Нужная формула)}  
и в M29 с формулой
{=СУММ(Нужная формула)}

То есть вопрос, что нужно написать в них вместо слов Нужная формула, используя только имя(диапазон) исходной матрицы, чтобы получить правильный ответ
(в M27 –   4, в M29 –  2239.49)
Еще раз спасибо за терпение.
Изменено: ken54 - 03.12.2015 01:40:43
Приписать к исходной матрице слева столбец из единиц
 
Цитата
Сергей написал:
ваше столбец()=мин(столбец()) всегда будет истиной это бредовое условие
Не могу согласиться. Если это введено как часть формулы массива НА ЛИСТЕ (в моем файле примера в диапазоне P11:S20 – одной общей формулой массива), то
столбец() дает номер текущего столбца,
а мин(столбец()) дает номер первого столбца диапазона, в который введена эта формула массива.
В данном случае в ячейке, например, P11, столбец() равен 16, и мин(столбец()) равен 16, тогда по функции ЕСЛИ туда записывается 1, а вот в ячейке Q11 столбец() равен 17, а мин(столбец()) равен по-прежнему 16 ! и тогда по функции ЕСЛИ туда записывается первый элемент исходной матрицы ИНДЕКС(Матрица_исходная;;1),
Условие СТОЛБЕЦ()=МИН(СТОЛБЕЦ() совершенно не бредовое. Я, признаюсь, был в восторге, когда его придумал. Это ответ на мой более ранний вопрос, как во внутренних ячейках диапазона, в который введена формула массива, указать левый верхний угол этого самого диапазона, в частности, первый столбец этого диапазона.
Да это очень легко проверить. Введите формулу
{=СТОЛБЕЦ()=МИН(СТОЛБЕЦ())} в какой-нибудь диапазон, например, A11:H14 (по CSE, разумеется). И увидите строки
ИСТИНА ЛОЖЬ ЛОЖЬ ЛОЖЬ
Но увы, это решение не годится для формулы массива, вводимой не в диапазон, а в одну ячейку, как мне нужно сейчас.
Спасибо за терпение и понимание.
Изменено: ken54 - 14.11.2015 22:19:22
Приписать к исходной матрице слева столбец из единиц
 
Цитата
Сергей написал: тогда нужно задать логический отбор что в нем считаем т.е. логический принцип отбора столбцов и строк
Конечно. Я именно так – логический отбор – и сделал в формуле массива на листе
{=ЕСЛИ(СТОЛБЕЦ()=МИН(СТОЛБЕЦ());1;ИНДЕКС(Матрица_исходная;;{0;1;2;3}))} .

Однако будучи введенной в одну ячейку в составе внешней формулы, например
{=ЧИСЛСТОЛБ(ЕСЛИ(СТОЛБЕЦ()=МИН(СТОЛБЕЦ());1;ИНДЕКС(Матрица_исходная;;{0;1;2;3})))}
{=СУММ(ЕСЛИ(СТОЛБЕЦ()=МИН(СТОЛБЕЦ());1;ИНДЕКС(Матрица_исходная;;{0;1;2;3})))}

она не работает.
В этом и прошу помощи.
Приписать к исходной матрице слева столбец из единиц
 
Цитата
Михаил С. написал: ken54, то, что вы хотите получить, в формульном варианте невозможно.
Спасибо. Это очень ценная информация. Позвольте только уточнить, это Ваше утверждение основано на интуиции или на точном знании.
(Понятно, что не хотелось бы впустую потратить много лишнего времени).
Однако иногда бывает, что то, что казалось невозможным, случается. Так недавно на этом форуме мне помогли составить формулу, которая как раз априори казалась почти невозможной.

Даже вот эта формула, приведенная мной выше
{=ЕСЛИ(СТОЛБЕЦ()=МИН(СТОЛБЕЦ());1;ИНДЕКС(Матрица_исходная;;{0;1;2;3}))}
для решения этой же задачи, но НА ЛИСТЕ – то есть с явным созданием рабочей матрицы с приписанным слева к исходной матрице столбцом из единиц – вначале я не представлял, как это можно сделать, однако с помощью знатоков это удалось.

Кстати до сих пор не совсем понимаю, как в ней работает часть
ИНДЕКС(Матрица_исходная;;{0;1;2;3})
Ведь в справке к функции ИНДЕКС написано, что:
Цитата
"Значения аргументов «номер_строки» и «номер_столбца» должны указывать на  ячейку внутри заданного массива; в противном случае функция ИНДЕКС возвращает  значение ошибки #ССЫЛ!.",
а здесь используются четыре разных значения номера столбца {0;1;2;3}, тогда как в заданном массиве – Матрица_исходная – только три столбца. Значит хотя бы один из них выходит за границу заданного массива.

Не нужно каждое предложение отделять пустой строкой [МОДЕРАТОР]
Приписать к исходной матрице слева столбец из единиц
 
Сергей, Спасибо за попытку.

Ваша формула в желтой ячейке, точнее формула в определении переменной "край" не годится хотя бы потому, что результат – сумма всех чисел в желтой ячейке не совпадает с ожидаемым. Там просто просуммированы все числа исходной матрицы БЕЗ добавленного слева столбца из единиц.
Да его – этого столбца из единиц –  я просто и не нашел в Вашей формуле.
Извините.

Может быть, Вы попробуете взглянуть на мою формулу НА ЛИСТЕ, в которой явным образом к исходной матрице приписывается слева столбец из единиц,  
{=ЕСЛИ(СТОЛБЕЦ()=МИН(СТОЛБЕЦ());1;ИНДЕКС(Матрица_исходная;;{0;1;2;3}))}
и подскажете как преобразовать ее в Нужную формулу массива, чтобы ввести ее только В ОДНУ ЯЧЕЙКУ, не получая предварительно выходную матрицу на листе, как в моем файле.

То есть, представьте, что на листе есть ТОЛЬКО исходная матрица и две ячейки с формулами
{=ЧИСЛСТОЛБ(Нужная формула)}
{=СУММ(Нужная формула)}

Что написать вместо (Нужная формула), чтобы получить ожидаемый результат.

Простите за "мудрение".
Изменено: ken54 - 15.11.2015 10:59:54
Приписать к исходной матрице слева столбец из единиц
 
Спасибо всем ответившим. Прошу прощения за, возможно, нечетко сформулированный вопрос.

Речь не о том, чтобы НА ЛИСТЕ приписать к матрице слева столбец из единиц.
Этого нового массива с добавленным слева столбцом из единиц ВООБЩЕ не должно быть НА ЛИСТЕ.
Поэтому, Catboyun, ни о каком протягивании или заполнении по CSE и речи нет.

Выходной массив в файле я привел только для того, чтобы показать, чтО должно образовываться в памяти при вычислении нужной формулы массива, ВВЕДЕННОЙ В ОДНУ ЯЧЕЙКУ.
Он должен образовываться только в формуле, НЕ НА ЛИСТЕ. И использоваться внутри более сложной расчетной формулы массива.
Поэтому у этого выходного массива нет никакого адреса, у него есть только содержимое в том виде, который я показал, то есть число строк – такое же как у исходной матрицы, число столбцов – на один больше, чем у исходной матрицы.

Я привел два простых примера этой "более сложной" расчетной формулы:
{=ЧИСЛСТОЛБ(Нужная формула)}
{=СУММ(Нужная формула)}


Итак, снова вопрос:
Что нужно написать вместо (Нужная формула), ничего не добавляя НА ЛИСТЕ и ссылаясь ТОЛЬКО на исходную матрицу по ее имени, то есть не указывая конкретного адреса.

Спасибо
Изменено: ken54 - 15.11.2015 11:00:10
Приписать к исходной матрице слева столбец из единиц
 
Требуется приписать к исходной матрице слева столбец из единиц.

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

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

Спасибо
Изменено: ken54 - 15.11.2015 10:58:58
Страницы: 1 2 След.
Наверх