HELP *** Пользовательские функции в Excel ***
А как написать пользовательскую функцию? Я не знаком с VBA, поэтому хотелось бы вживую увидеть хотябы один готовый пример пользовательской функции...
Спасибо всем за помощь
(точнее нужен макрос, который по заданным точкам (=значениям ячеек) смоделирует математическую функцию, т.е. попросту сделает из точек ломаную функцию, соединив их, и сможет выдать значение этой функции для конкретного агрумента.)
При работе с ячейками в Excele можно использовать множество встроенных функций типа МАХ, SUM etc.
А как написать пользовательскую функцию? Я не знаком с VBA, поэтому хотелось бы вживую увидеть хотябы один готовый пример пользовательской функции...
(точнее нужен макрос, который по заданным точкам (=значениям ячеек) смоделирует математическую функцию, т.е. попросту сделает из точек ломаную функцию, соединив их, и сможет выдать значение этой функции для конкретного агрумента.)
функция на примере y=x^2 приведена ниже,
ее надо вставить как модуль.
Выбирается она в Других_функциях - Функцииопределеные пользователем.
c - блок с известными значениями X,Y
x - ячейка с аргументом
Function y(c, x)
n = c.Cells.Count / 2
For i = 0 To n - 1
If c.Cells(i, 1) <= x And x <= c.Cells(i + 1, 1) Then
y = c.Cells(i, 2) + (c.Cells(i + 1, 2) - c.Cells(i, 2)) / _
(c.Cells(i + 1, 1) - c.Cells(i, 1)) * (x - c.Cells(i, 1))
Exit For
End If
Next i
End Function
:D
функция на примере y=x^2 приведена ниже,
ее надо вставить как модуль.
Выбирается она в Других_функциях - Функцииопределеные пользователем.
c - блок с известными значениями X,Y
x - ячейка с аргументом
Function y(c, x)
n = c.Cells.Count / 2
For i = 0 To n - 1
If c.Cells(i, 1) <= x And x <= c.Cells(i + 1, 1) Then
y = c.Cells(i, 2) + (c.Cells(i + 1, 2) - c.Cells(i, 2)) / _
(c.Cells(i + 1, 1) - c.Cells(i, 1)) * (x - c.Cells(i, 1))
Exit For
End If
Next i
End Function
:D
У тебя здесь используется, что диапазон с отсортирован по возрастанию по первому столбцу.
У тебя здесь используется, что диапазон с отсортирован по возрастанию по первому столбцу.
Конечно. Можно и на сортировку написать прг, но
это проще "дружественными" инструментами Excel
Конечно. Можно и на сортировку написать прг, но
это проще "дружественными" инструментами Excel
А можно и всю задачу решить с помощью встроенных функций Excel.
Еще неизвестно, что проще.
Завтра пропробую разобраться :)
А можно и всю задачу решить с помощью встроенных функций Excel.
Еще неизвестно, что проще.
Пожалуй ты прав.
В общем случае этот вариант проще.
Но VB-программисту встроенные функции EXCEL помнить трудновато.P(
Уважаемые программеры помогите чайнику!!!
Нужана простенькая пользовательская функция по типу СУММЕСЛИ(),
но проверка не по одному критерию (диапазона ячеек), как в выше упомянутой,
а по нескольким критериям (хотя бы по двум).
Я представляю такую функцию примерно так:
Function СУММКРИТ(дипазон1, диапазон2, крит1, крит2, диапазон_суммирования)
If диапазон1 = крит1 Then
If диапазон2 = крит2 Then
СУММКРИТ = Application.СУММ(диапазон_суммирования)
End If
End If
End Function
:-?
Уважаемые программеры помогите чайнику!!!
Нужана простенькая пользовательская функция по типу СУММЕСЛИ(),
но проверка не по одному критерию (диапазона ячеек), как в выше упомянутой,
а по нескольким критериям (хотя бы по двум).
Я представляю такую функцию примерно так:
Function СУММКРИТ(дипазон1, диапазон2, крит1, крит2, диапазон_суммирования)
If диапазон1 = крит1 Then
If диапазон2 = крит2 Then
СУММКРИТ = Application.СУММ(диапазон_суммирования)
End If
End If
End Function
:???: EVG, уточни пожалуйста, что означает диапазон1 = крит1
Диапазон содержит значение?
Все ячейки диапазон1 равны крит1 ...
:???: EVG, уточни пожалуйста, что означает диапазон1 = крит1
Диапазон содержит значение?
Все ячейки диапазон1 равны крит1 ...
Выход здесь простой (и на мой взгляд единственный) - делаешь диапазон3= ЕСЛИ(И(ДИАПАЗОН1=КРИТ1;ДИАПАЗОН2=КРИТ2);1;0) а потом СУММЕСЛИ(ДИАПАЗОН3,1,ДИПАЗОН_СУММИРОВАНИЯ).
:-?
Уважаемые программеры помогите чайнику!!!
Нужана простенькая пользовательская функция по типу СУММЕСЛИ(),
но проверка не по одному критерию (диапазона ячеек), как в выше упомянутой,
а по нескольким критериям (хотя бы по двум).
Я представляю такую функцию примерно так:
Function СУММКРИТ(дипазон1, диапазон2, крит1, крит2, диапазон_суммирования)
If диапазон1 = крит1 Then
If диапазон2 = крит2 Then
СУММКРИТ = Application.СУММ(диапазон_суммирования)
End If
End If
End Function
Есть несколько вариантов,
но не все корректно работают с любыми критериями.
Наиболее простой критерий - точное соответствие - см. пример.
Если не получится разобраться - пиши.
для наглядности могу выслать простенький пример задачки:
1) В ячейках E85 & E86 реализована функция СУММЕСЛИ() - работает идеально, проверяется одно условие
2) но вот возникает второе задание, когда нужно реализовать суммирование по двум критериям:
приходится сначала проверять одно условие (в строке) в AE8 и т.д., а затем второе (в столбце) в AE85 & AE86
3) функция ЕСЛИ воще не в жилу - ну вот и отсюда возникает необходимость в новой функции...!???
Доброго времении суток!
для наглядности могу выслать простенький пример задачки:
1) В ячейках E85 & E86 реализована функция СУММЕСЛИ() - работает идеально, проверяется одно условие
2) но вот возникает второе задание, когда нужно реализовать суммирование по двум критериям:
приходится сначала проверять одно условие (в строке) в AE8 и т.д., а затем второе (в столбце) в AE85 & AE86
3) функция ЕСЛИ воще не в жилу - ну вот и отсюда возникает необходимость в новой функции...!???
Я чего-то ничего не понял в твоем файле.
Напиши конкретно, что тебе нужно посчитать.
(Типа "Нужно посчитать сумму таких чисел из A10:B20, что в соответствующей строке в столбце C стоит "х", а в соответствующей строке в столбце D стоит "з"). А то не понятно.
Доброго времении суток!
для наглядности могу выслать простенький пример задачки:
...
Мне тоже не очень понятно.
Если это возможно, убери из примера все лишнее (то, с чем у тебя нет вопросов) и укажи цель (что нужно сделать). Тогда, возожно, удастся найти приемлимое решение.
P.S. Когда нехватает возможностей встроенных функций Excel'я, стоит попробывать использовать функции массива (однако, они не всегда, по-моему, корректно работают) и/или возможности VBA.
Доброго времении суток!
для наглядности могу выслать простенький пример задачки:
1) В ячейках E85 & E86 реализована функция СУММЕСЛИ() - работает идеально, проверяется одно условие
2) но вот возникает второе задание, когда нужно реализовать суммирование по двум критериям:
приходится сначала проверять одно условие (в строке) в AE8 и т.д., а затем второе (в столбце) в AE85 & AE86
3) функция ЕСЛИ воще не в жилу - ну вот и отсюда возникает необходимость в новой функции...!???
Как я понял заказано было создать пользовательскую функцию a la "СУММЕСЛИ".
Поробуй этот примерчик.
Диапазоны можно не выравнивать, если поправить OFFSET()
Задание звучит примерно так: "Нужно просуммировать числа из диапазона D8:D82 (в примере, но может быть и другой диапазон)
1) если в соответствующей сторке столбца А стоит "х" и в соответствующей сторке столбца АС стоит "б" - результат получить в ячейке D91;
2) в ячейке D92 - получить сумму из диапазона D8:D82 если в соответствующей сторке столбца А стоит "б" и в соответствующей сторке столбца АС стоит "б";
т.е. в общем случае попытаюсь сформулировать так:
функция должа считать выборочную функцию из диапазона ячеек в столбце "X" если соблюдается условие совпадения сответствующих значений в строке столбца "Y" критерию1 и одновременно значений в строке столбца "Z" критерию2.
P.S. количетво критериев собственно может быть и больше чем 2...
Поправляюсь...
...
т.е. в общем случае попытаюсь сформулировать так:
функция должа считать выборочную функцию из диапазона ячеек в столбце "X" если соблюдается условие совпадения сответствующих значений в строке столбца "Y" критерию1 и одновременно значений в строке столбца "Z" критерию2.
P.S. количетво критериев собственно может быть и больше чем 2...
Обрати внимание на файл СУММЕСЛИ.zip от 7.03.03
В нем в ячейке A26 записана функция массива, которая в зависимости от выбранных критериев (ячейки B24 и C24) "виртуально" формирует из массива A2:A21 некий диапазон и суммирует его.
В этот "виртуальный" диапазон входят значения диапазона A2:A21 (если в соответствующей строке диапазона B2:B21 находится значение критерия 1 ИЛИ диапазона C2:C21 находится значение критерия 2) и пустые значения (в противном случае).
Изменить количество критериев, изменить условие их применения не представляет большого труда.
Если возникнет трудность - спрашивай.
Поправляюсь...
Задание звучит примерно так: "Нужно просуммировать числа из диапазона D8:D82 (в примере, но может быть и другой диапазон)
1) если в соответствующей сторке столбца А стоит "х" и в соответствующей сторке столбца АС стоит "б" - результат получить в ячейке D91;
2) в ячейке D92 - получить сумму из диапазона D8:D82 если в соответствующей сторке столбца А стоит "б" и в соответствующей сторке столбца АС стоит "б";
т.е. в общем случае попытаюсь сформулировать так:
функция должа считать выборочную функцию из диапазона ячеек в столбце "X" если соблюдается условие совпадения сответствующих значений в строке столбца "Y" критерию1 и одновременно значений в строке столбца "Z" критерию2.
P.S. количетво критериев собственно может быть и больше чем 2...
Глянь-ка этот файл. (попробуй.xls)
Вариант СУММЕСЛИ с 2-мя диапазонами
СУММЕСЛИ(B8:B82,"бб",D8:d82) и т.п.
Помогите пожалуйста в написании функции по типу СЧЁТЕСЛИ(), только необходимо проводить счет по нескольким критериям(условиям). Если точнее то необходимо произвести поиск по условию ">0", "П", "Пт" и т.д. минимум 5 условий.
Если Вам нужны примеры таких формул, то для начала опубликуйте фрагмент Вашей таблицы.
1 2 3 4 5 6 7 8 9 10 11
В 700 700 ПТ ПТ П П В В 700 700
и т.д. до 31 и мне надо выбрать сколько было П, ПТ, 700 и получить число в данном случае 8 :confused:
{=СУММ((A2:K2="П")+(A2:K2="ПТ")+(A2:K2=700))}
=СЧЁТЕСЛИ(C1:AG1;">0")+СЧЁТЕСЛИ(C1:AG1;"П")+СЧЁТЕСЛИ(C1:AG1;"ПТ"), а мне надо что бы считало так
=myСЧЁТЕСЛИ(C1:AG1;">0";"П";"ПТ")
Разницу чувствуешь или как?:mad: