Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.02.2010, 08:18   #11
Dophin
Форумчанин
 
Аватар для Dophin
 
Регистрация: 13.01.2010
Сообщений: 410
По умолчанию

пока писал - понял что написал глупость) вот Ваша формула
=МИН(ЕСЛИ(ABS(C3-A1:A4)=МИН(ABS(C3-A1:A4));A1:A4))

также - формула массива



вычислите формулу пошагово - все поймете.

1. находим минимум из все разниц между искомым числом и числами массива.
2. потом разницу между каждым числом массива и искомым сравниваем с минимумом, если совпало - то возвращаем число.
3. находим минимум из получившегося массива значений (нужно чтобы из массива {ложь;ложь;3;ложь} вернуть 3.
Dophin вне форума Ответить с цитированием
Старый 12.02.2010, 12:36   #12
KASTCHEI
Пользователь
 
Регистрация: 11.02.2010
Сообщений: 17
По умолчанию

Цитата:
Сообщение от Teslenko_EA Посмотреть сообщение
Поместите в модуль подобный код:
Код:
Public Function besideArr(vArr As Range, vVal) As Double
Dim j#
besideArr = 1000000000
For Each v In vArr
    j = v.Value
    If Abs(vVal - j) < Abs(besideArr) Then
        besideArr = vVal - j
    End If
Next
besideArr = vVal - besideArr
End Function
Поясните, пожалуйста, куда необходимо поместить это выражение? Что такое модуль?
KASTCHEI вне форума Ответить с цитированием
Старый 12.02.2010, 12:55   #13
KASTCHEI
Пользователь
 
Регистрация: 11.02.2010
Сообщений: 17
По умолчанию

Цитата:
Сообщение от Dophin Посмотреть сообщение
пока писал - понял что написал глупость) вот Ваша формула
=МИН(ЕСЛИ(ABS(C3-A1:A4)=МИН(ABS(C3-A1:A4));A1:A4))

также - формула массива
Но предыдущая формула работает как надо.


Цитата:
Сообщение от Dophin Посмотреть сообщение

1. находим минимум из все разниц между искомым числом и числами массива.
2. потом разницу между каждым числом массива и искомым сравниваем с минимумом, если совпало - то возвращаем число.
3. находим минимум из получившегося массива значений (нужно чтобы из массива {ложь;ложь;3;ложь} вернуть 3.
KASTCHEI вне форума Ответить с цитированием
Старый 12.02.2010, 13:28   #14
Dophin
Форумчанин
 
Аватар для Dophin
 
Регистрация: 13.01.2010
Сообщений: 410
По умолчанию

значит эта тоже. та избыточна, следовательно медленее работает
Dophin вне форума Ответить с цитированием
Старый 12.02.2010, 13:28   #15
KASTCHEI
Пользователь
 
Регистрация: 11.02.2010
Сообщений: 17
По умолчанию

Цитата:
Сообщение от KASTCHEI Посмотреть сообщение
Но предыдущая формула работает как надо.
Всё-таки пардон: старая формула работает с ошибкой.

Спасибо за настойчивость.
За то - мои благодарности:
http://ihero2012.com/hero-1339502463-20100212.html
(было бы фото - вышло б круче).
KASTCHEI вне форума Ответить с цитированием
Старый 12.02.2010, 13:45   #16
Dophin
Форумчанин
 
Аватар для Dophin
 
Регистрация: 13.01.2010
Сообщений: 410
По умолчанию

что за ошибка?) и вообще лечить по фотографии - плохая методика) давно бы файл выложили
Dophin вне форума Ответить с цитированием
Старый 13.02.2010, 21:10   #17
KASTCHEI
Пользователь
 
Регистрация: 11.02.2010
Сообщений: 17
По умолчанию

Цитата:
Сообщение от Dophin Посмотреть сообщение
что за ошибка?) и вообще лечить по фотографии - плохая методика) давно бы файл выложили
Так я же выложил (на первой странице) ту часть таблицы, которая отвечает за расчёт.
Могу выложить и полный файл, но там много полей, которые носят вспомогательный характер и к рассматриваемому вопросу не относятся (только сбивать с толку будут).

Первая формула выбирала стандартный показатель из списка, но не ближайший. Конечный вариант выполняет эту функцию правильно.
KASTCHEI вне форума Ответить с цитированием
Старый 13.02.2010, 21:43   #18
Dophin
Форумчанин
 
Аватар для Dophin
 
Регистрация: 13.01.2010
Сообщений: 410
По умолчанию

у меня обе формулы корректно считают, впрочем как и должны)
Вложения
Тип файла: rar Расчёт.rar (4.2 Кб, 8 просмотров)
Dophin вне форума Ответить с цитированием
Старый 13.02.2010, 21:49   #19
Teslenko_EA
Участник клуба
 
Регистрация: 10.08.2009
Сообщений: 1,796
По умолчанию

Здравствуйте KASTCHEI.
"Что такое модуль?.." - я надеялся Вы знаете что в документе Excel может присутствовать программный код выполняемый интегрированным в Excel Visual Basic for Application (в простонародии VBA).
Редактор VBA можно открыть клавишами Alt + F11, далее комбинация клавиш Alt + I открывает меню а нажатие клавиши M (латинской) создает модуль, в него и помещается код функции.
После этих действий, в списке функций Excel, в категории Определенные пользователем Вы увидите вновь созданную функцию: besideArr. Со способом её применение (=besideArr(B1:B20;C5) ) надеюсь Вы разберетесь.
Евгений.
Teslenko_EA вне форума Ответить с цитированием
Старый 14.02.2010, 21:23   #20
KASTCHEI
Пользователь
 
Регистрация: 11.02.2010
Сообщений: 17
По умолчанию

Цитата:
Сообщение от Dophin Посмотреть сообщение
у меня обе формулы корректно считают, впрочем как и должны)
А вот у меня упрощённый вариант проверки формул и они дают разный вариант. Думал, что допустил ошибку в формуле (переопределял диапазон), но вроде бы всё нормально.
Вложения
Тип файла: rar Расчёт3.rar (3.6 Кб, 5 просмотров)
KASTCHEI вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вывод ко-ва элементов массива меньших заданного числа в C++ xnise Помощь студентам 2 30.11.2009 19:25
Создание подпрограм.Передача массива как параметра процедуре AbrahamLincoln Помощь студентам 5 20.09.2009 19:39
Выбор строки из заданного параметра Antoha21 Microsoft Office Excel 3 24.07.2009 12:21
EXSEL (VBA) найти элемент наиболее близкий к среднему значению элементов массива Lady_Deluxe Помощь студентам 0 16.06.2009 13:45