Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

HELP *** Пользовательские функции в Excel ***

3.3K
12 февраля 2003 года
daniil
2 / / 12.02.2003
При работе с ячейками в Excele можно использовать множество встроенных функций типа МАХ, SUM etc.
А как написать пользовательскую функцию? Я не знаком с VBA, поэтому хотелось бы вживую увидеть хотябы один готовый пример пользовательской функции...

Спасибо всем за помощь

(точнее нужен макрос, который по заданным точкам (=значениям ячеек) смоделирует математическую функцию, т.е. попросту сделает из точек ломаную функцию, соединив их, и сможет выдать значение этой функции для конкретного агрумента.)
459
12 февраля 2003 года
gacol
273 / / 12.02.2003
Цитата:
Originally posted by daniil
При работе с ячейками в 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

267
12 февраля 2003 года
Cutty Sark
1.2K / / 17.10.2002
Цитата:
Originally posted by gacol



функция на примере 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



У тебя здесь используется, что диапазон с отсортирован по возрастанию по первому столбцу.

459
12 февраля 2003 года
gacol
273 / / 12.02.2003
Цитата:
Originally posted by Cutty Sark


У тебя здесь используется, что диапазон с отсортирован по возрастанию по первому столбцу.



Конечно. Можно и на сортировку написать прг, но
это проще "дружественными" инструментами Excel

1.3K
12 февраля 2003 года
IKor
116 / / 04.12.2002
Цитата:
Originally posted by gacol


Конечно. Можно и на сортировку написать прг, но
это проще "дружественными" инструментами Excel



А можно и всю задачу решить с помощью встроенных функций Excel.

Еще неизвестно, что проще.

3.3K
12 февраля 2003 года
daniil
2 / / 12.02.2003
Большое спасибо Gacor и Ikor за помощь.
Завтра пропробую разобраться :)
459
13 февраля 2003 года
gacol
273 / / 12.02.2003
Цитата:
Originally posted by IKor


А можно и всю задачу решить с помощью встроенных функций Excel.

Еще неизвестно, что проще.




Пожалуй ты прав.
В общем случае этот вариант проще.
Но VB-программисту встроенные функции EXCEL помнить трудновато.P(

3.5K
07 марта 2003 года
evgeny1
5 / / 01.03.2003
:-?
Уважаемые программеры помогите чайнику!!!
Нужана простенькая пользовательская функция по типу СУММЕСЛИ(),
но проверка не по одному критерию (диапазона ячеек), как в выше упомянутой,
а по нескольким критериям (хотя бы по двум).
Я представляю такую функцию примерно так:
Function СУММКРИТ(дипазон1, диапазон2, крит1, крит2, диапазон_суммирования)
If диапазон1 = крит1 Then
If диапазон2 = крит2 Then
СУММКРИТ = Application.СУММ(диапазон_суммирования)
End If
End If
End Function
459
07 марта 2003 года
gacol
273 / / 12.02.2003
Цитата:
Originally posted by evgeny1
:-?
Уважаемые программеры помогите чайнику!!!
Нужана простенькая пользовательская функция по типу СУММЕСЛИ(),
но проверка не по одному критерию (диапазона ячеек), как в выше упомянутой,
а по нескольким критериям (хотя бы по двум).
Я представляю такую функцию примерно так:
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 ...

267
07 марта 2003 года
Cutty Sark
1.2K / / 17.10.2002
Цитата:
Originally posted by gacol



:???: EVG, уточни пожалуйста, что означает диапазон1 = крит1
Диапазон содержит значение?
Все ячейки диапазон1 равны крит1 ...



Выход здесь простой (и на мой взгляд единственный) - делаешь диапазон3= ЕСЛИ(И(ДИАПАЗОН1=КРИТ1;ДИАПАЗОН2=КРИТ2);1;0) а потом СУММЕСЛИ(ДИАПАЗОН3,1,ДИПАЗОН_СУММИРОВАНИЯ).

1.3K
07 марта 2003 года
IKor
116 / / 04.12.2002
Цитата:
Originally posted by evgeny1
:-?
Уважаемые программеры помогите чайнику!!!
Нужана простенькая пользовательская функция по типу СУММЕСЛИ(),
но проверка не по одному критерию (диапазона ячеек), как в выше упомянутой,
а по нескольким критериям (хотя бы по двум).
Я представляю такую функцию примерно так:
Function СУММКРИТ(дипазон1, диапазон2, крит1, крит2, диапазон_суммирования)
If диапазон1 = крит1 Then
If диапазон2 = крит2 Then
СУММКРИТ = Application.СУММ(диапазон_суммирования)
End If
End If
End Function



Есть несколько вариантов,
но не все корректно работают с любыми критериями.
Наиболее простой критерий - точное соответствие - см. пример.
Если не получится разобраться - пиши.

3.5K
10 марта 2003 года
evgeny1
5 / / 01.03.2003
Доброго времении суток!
для наглядности могу выслать простенький пример задачки:
1) В ячейках E85 & E86 реализована функция СУММЕСЛИ() - работает идеально, проверяется одно условие
2) но вот возникает второе задание, когда нужно реализовать суммирование по двум критериям:
приходится сначала проверять одно условие (в строке) в AE8 и т.д., а затем второе (в столбце) в AE85 & AE86
3) функция ЕСЛИ воще не в жилу - ну вот и отсюда возникает необходимость в новой функции...!???
267
10 марта 2003 года
Cutty Sark
1.2K / / 17.10.2002
Цитата:
Originally posted by evgeny1
Доброго времении суток!
для наглядности могу выслать простенький пример задачки:
1) В ячейках E85 & E86 реализована функция СУММЕСЛИ() - работает идеально, проверяется одно условие
2) но вот возникает второе задание, когда нужно реализовать суммирование по двум критериям:
приходится сначала проверять одно условие (в строке) в AE8 и т.д., а затем второе (в столбце) в AE85 & AE86
3) функция ЕСЛИ воще не в жилу - ну вот и отсюда возникает необходимость в новой функции...!???



Я чего-то ничего не понял в твоем файле.
Напиши конкретно, что тебе нужно посчитать.
(Типа "Нужно посчитать сумму таких чисел из A10:B20, что в соответствующей строке в столбце C стоит "х", а в соответствующей строке в столбце D стоит "з"). А то не понятно.

1.3K
11 марта 2003 года
IKor
116 / / 04.12.2002
Цитата:
Originally posted by evgeny1
Доброго времении суток!
для наглядности могу выслать простенький пример задачки:
...



Мне тоже не очень понятно.
Если это возможно, убери из примера все лишнее (то, с чем у тебя нет вопросов) и укажи цель (что нужно сделать). Тогда, возожно, удастся найти приемлимое решение.

P.S. Когда нехватает возможностей встроенных функций Excel'я, стоит попробывать использовать функции массива (однако, они не всегда, по-моему, корректно работают) и/или возможности VBA.

459
12 марта 2003 года
gacol
273 / / 12.02.2003
Цитата:
Originally posted by evgeny1
Доброго времении суток!
для наглядности могу выслать простенький пример задачки:
1) В ячейках E85 & E86 реализована функция СУММЕСЛИ() - работает идеально, проверяется одно условие
2) но вот возникает второе задание, когда нужно реализовать суммирование по двум критериям:
приходится сначала проверять одно условие (в строке) в AE8 и т.д., а затем второе (в столбце) в AE85 & AE86
3) функция ЕСЛИ воще не в жилу - ну вот и отсюда возникает необходимость в новой функции...!???



Как я понял заказано было создать пользовательскую функцию a la "СУММЕСЛИ".
Поробуй этот примерчик.
Диапазоны можно не выравнивать, если поправить OFFSET()

3.5K
13 марта 2003 года
evgeny1
5 / / 01.03.2003
Поправляюсь...
Задание звучит примерно так: "Нужно просуммировать числа из диапазона D8:D82 (в примере, но может быть и другой диапазон)
1) если в соответствующей сторке столбца А стоит "х" и в соответствующей сторке столбца АС стоит "б" - результат получить в ячейке D91;
2) в ячейке D92 - получить сумму из диапазона D8:D82 если в соответствующей сторке столбца А стоит "б" и в соответствующей сторке столбца АС стоит "б";
т.е. в общем случае попытаюсь сформулировать так:
функция должа считать выборочную функцию из диапазона ячеек в столбце "X" если соблюдается условие совпадения сответствующих значений в строке столбца "Y" критерию1 и одновременно значений в строке столбца "Z" критерию2.

P.S. количетво критериев собственно может быть и больше чем 2...
1.3K
13 марта 2003 года
IKor
116 / / 04.12.2002
Цитата:
Originally posted by evgeny1
Поправляюсь...
...
т.е. в общем случае попытаюсь сформулировать так:
функция должа считать выборочную функцию из диапазона ячеек в столбце "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) и пустые значения (в противном случае).

Изменить количество критериев, изменить условие их применения не представляет большого труда.

Если возникнет трудность - спрашивай.

459
13 марта 2003 года
gacol
273 / / 12.02.2003
Цитата:
Originally posted by evgeny1
Поправляюсь...
Задание звучит примерно так: "Нужно просуммировать числа из диапазона D8:D82 (в примере, но может быть и другой диапазон)
1) если в соответствующей сторке столбца А стоит "х" и в соответствующей сторке столбца АС стоит "б" - результат получить в ячейке D91;
2) в ячейке D92 - получить сумму из диапазона D8:D82 если в соответствующей сторке столбца А стоит "б" и в соответствующей сторке столбца АС стоит "б";
т.е. в общем случае попытаюсь сформулировать так:
функция должа считать выборочную функцию из диапазона ячеек в столбце "X" если соблюдается условие совпадения сответствующих значений в строке столбца "Y" критерию1 и одновременно значений в строке столбца "Z" критерию2.

P.S. количетво критериев собственно может быть и больше чем 2...





Глянь-ка этот файл. (попробуй.xls)
Вариант СУММЕСЛИ с 2-мя диапазонами

267
13 марта 2003 года
Cutty Sark
1.2K / / 17.10.2002
А зачем такие напряги? Возьми в стороночке столбец, скажем BB, заполни его формулами вида "=A8&AC8" и делай обычные Экселевские СУММЕСЛИ(B8:B82,"xб",D8:d82),
СУММЕСЛИ(B8:B82,"бб",D8:d82) и т.п.
3.5K
13 марта 2003 года
evgeny1
5 / / 01.03.2003
Всем огромное спасибо за помощь!!!
19K
10 июля 2006 года
Big_Repa
4 / / 09.07.2006
Доброго времени суток!
Помогите пожалуйста в написании функции по типу СЧЁТЕСЛИ(), только необходимо проводить счет по нескольким критериям(условиям). Если точнее то необходимо произвести поиск по условию ">0", "П", "Пт" и т.д. минимум 5 условий.
275
10 июля 2006 года
pashulka
985 / / 19.09.2004
Не надо никаких пользовательских функций, так как для решения подобной задачи, достаточно использовать функцию баз данных =БСЧЁТА() или другие многочисленные формулы (в большинстве своём являющиеся формулами массива)

Если Вам нужны примеры таких формул, то для начала опубликуйте фрагмент Вашей таблицы.
19K
10 июля 2006 года
Big_Repa
4 / / 09.07.2006
Извините, но БСЧЁТА мне неподходит, так как мне нужно производить выборку по табелю выходов. А таблица пожалуйста.
1 2 3 4 5 6 7 8 9 10 11
В 700 700 ПТ ПТ П П В В 700 700
и т.д. до 31 и мне надо выбрать сколько было П, ПТ, 700 и получить число в данном случае 8 :confused:
275
10 июля 2006 года
pashulka
985 / / 19.09.2004
В таком случае хотя бы так :

{=СУММ((A2:K2="П")+(A2:K2="ПТ")+(A2:K2=700))}
19K
11 июля 2006 года
Big_Repa
4 / / 09.07.2006
Извини конечно, но мне тогда проще сложить 3 СЧЁТЕСЛИ()
=СЧЁТЕСЛИ(C1:AG1;">0")+СЧЁТЕСЛИ(C1:AG1;"П")+СЧЁТЕСЛИ(C1:AG1;"ПТ"), а мне надо что бы считало так

=myСЧЁТЕСЛИ(C1:AG1;">0";"П";"ПТ")

Разницу чувствуешь или как?:mad:
275
11 июля 2006 года
pashulka
985 / / 19.09.2004
Если внимательно прочитать Ваше предыдущее сообщение, то даже невооружённым взглядом видно, что представленная формула решает поставленную задачу. Что касается разницы, то здесь нечего сравнивать, за неимением пользовательской функции.
19K
11 июля 2006 года
Big_Repa
4 / / 09.07.2006
Да видать придеться самому ломать голову. Все продвинутые в делах мирских.:rolleyes:
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог