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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.01.2013, 22:39   #11
Андрэич
Форумчанин
 
Аватар для Андрэич
 
Регистрация: 20.05.2012
Сообщений: 311
По умолчанию

Цитата:
Сообщение от raytek Посмотреть сообщение
Форма ленточная, но тоже самое должно быть и в отчете (протоколе замеров) записей в одной форме или отчете может
А вы данные в эту форму вводите? И потом формируете отчёт?
Функция VBA устроит для решения?
Андрэич вне форума Ответить с цитированием
Старый 25.01.2013, 23:36   #12
Андрэич
Форумчанин
 
Аватар для Андрэич
 
Регистрация: 20.05.2012
Сообщений: 311
По умолчанию

Функция (должна находиться в общем модуле):
Код:
Option Compare Binary
Option Explicit

Public Function CalcRec( _
            ByVal str1 As String, _
            ByVal str2 As String, _
            ByVal str3 As String) As String
Dim i, Dic, arr, iMax, iMin
Set Dic = CreateObject("Scripting.Dictionary")
With Dic
    .Add "1", CInt(str1)
    .Add "2", CInt(str2)
    .Add "3", CInt(str3)
    arr = .Items
    For i = 0 To .Count - 1
        If arr(i) > iMax Then iMax = arr(i)
    Next
    iMin = iMax
    For i = 0 To .Count - 1
        If arr(i) < iMin Then iMin = arr(i)
    Next
End With
'    Debug.Print iMin & " - " & iMax
CalcRec = Abs(CStr(iMax - iMin / iMax * 100)) 'Формула !!!
End Function
Запрос, который к ней обращается:
Код:
SELECT Поле1, Поле2, Поле3, 
CalcRec(Поле1, Поле2, Поле3) AS Выражение
FROM Таблица;
Или я что-то не понял, но по вашей формуле у меня считает неверно...

Последний раз редактировалось Андрэич; 25.01.2013 в 23:40.
Андрэич вне форума Ответить с цитированием
Старый 25.01.2013, 23:46   #13
Андрэич
Форумчанин
 
Аватар для Андрэич
 
Регистрация: 20.05.2012
Сообщений: 311
По умолчанию

Файл вложения
Вложения
Тип файла: zip ПроцентРасхождения.zip (22.3 Кб, 6 просмотров)
Андрэич вне форума Ответить с цитированием
Старый 26.01.2013, 14:12   #14
raytek
Пользователь
 
Регистрация: 07.11.2011
Сообщений: 67
По умолчанию

Цитата:
Сообщение от Андрэич Посмотреть сообщение
А вы данные в эту форму вводите? И потом формируете отчёт?
Функция VBA устроит для решения?
Да, считает неправильно, но дело не в формуле, это элементарная математическая формула, в Excel она работает на ура

Элементарная проверка: 1 и 2 = 100% расхождение

Вопрос: неужели для вычислений в пределах одной записи можно использовать только +-*/

Я нашел у себя ошибки в формуле: (iMax - iMin )/ iMin * 100)

Последний раз редактировалось raytek; 26.01.2013 в 14:52.
raytek вне форума Ответить с цитированием
Старый 26.01.2013, 15:19   #15
raytek
Пользователь
 
Регистрация: 07.11.2011
Сообщений: 67
По умолчанию

Пошел путем через IIf, пришлось вставить 4 промежуточных вычисляемых поля:

Поле4 =IIf([Поле1]>[Поле2];[Поле1];[Поле2])
ПолеMax =IIf([Поле4]>[Поле3];[Поле4];[Поле3])
Поле5 =IIf([Поле1]<[Поле2];[Поле1];[Поле2])
ПолеMin =IIf([Поле5]<[Поле3];[Поле4];[Поле3])
Поле% =(Max-Min)/Min*100


Всем огромное спасибо, Андрэич, ваша версия после исправления моих ошибок в формуле думаю будет работать, но для меня это слишком сложно.

Всем удачи!
raytek вне форума Ответить с цитированием
Старый 26.01.2013, 17:58   #16
Андрэич
Форумчанин
 
Аватар для Андрэич
 
Регистрация: 20.05.2012
Сообщений: 311
По умолчанию

Цитата:
Сообщение от raytek Посмотреть сообщение
Элементарная проверка: 1 и 2 = 100% расхождение

Я нашел у себя ошибки в формуле: (iMax - iMin )/ iMin * 100)
А вы уверены, что эта формула теперь верная? Где вы их вообще берёте?
У меня, например, получилась теперь такая, совершенно не похожа на вашу:
Код:
CalcRec = Format(((iMin - iMax) / iMin * -1), "0,00%")
или
CalcRec = Format(-((iMin - iMax) / iMin), "0,00%")
1 2 3 200%
1 5 4 400%
9 5 3 200%
1 1 2 100%

Правильно работает?
(Я вчера как-то и забыл совсем про Format()... )
Вложения
Тип файла: rar ПроцентРасхождения2.rar (15.4 Кб, 5 просмотров)
Андрэич вне форума Ответить с цитированием
Старый 26.01.2013, 18:08   #17
Андрэич
Форумчанин
 
Аватар для Андрэич
 
Регистрация: 20.05.2012
Сообщений: 311
По умолчанию

Если устраивает, напишите - насколько можно подробней - как у вас всё происходит. Там сложного-то уже ничего не осталось, подделаем...
(А то, что вы там натворили, с полями, - это ужос Причём, грозящий в будущем ошибками, и что всего хуже, что такие всплывающие потом бяки обычно не сразу обнаруживаются - с непредсказуемыми неприятностями...
Андрэич вне форума Ответить с цитированием
Старый 26.01.2013, 18:32   #18
Андрэич
Форумчанин
 
Аватар для Андрэич
 
Регистрация: 20.05.2012
Сообщений: 311
По умолчанию

Цитата:
Сообщение от raytek Посмотреть сообщение
Вопрос: неужели для вычислений в пределах одной записи можно использовать только +-*/
Арифметические операторы (VB)
Список операторов, сгруппированных по функциональному назначению
(Visual Basic)

Операторы VBA
Встроенные функции VBA-Access
Андрэич вне форума Ответить с цитированием
Старый 26.01.2013, 23:08   #19
raytek
Пользователь
 
Регистрация: 07.11.2011
Сообщений: 67
По умолчанию

Андрэич, Модуль скопировал, запрос создал, все работает но проблема с форматом, работает правильно только с целыми числами


1 - 2 100%
1 - 1,5 100% а должно 50%
1 - 1,4 000% а должно 40%


в реальности в основном показания до 2% с точностью 1 знак после запятой
пример: 0,2; 1,6; 2,2
а на целых числах удобно проверять правильность работы формул


В модуле исправил последнюю строку

Цитата:
CalcRec = Format(((iMax - iMin) / iMin), "0,0%")
все работает, но округляет до сотен а надо до одного знака после запятой....

Последний раз редактировалось raytek; 27.01.2013 в 00:02.
raytek вне форума Ответить с цитированием
Старый 27.01.2013, 08:51   #20
Андрэич
Форумчанин
 
Аватар для Андрэич
 
Регистрация: 20.05.2012
Сообщений: 311
Вопрос

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

1 - 2 100%
1 - 1,5 100% а должно 50%
1 - 1,4 000% а должно 40%

пример: 0,2; 1,6; 2,2
на целых числах удобно проверять правильность работы формул
Я вот как знал-как знал!!! что там дробные числа (что даже спросить боялся)
Ну вот, теперь всё пределывать (шутка)


1. Сколько в исходных данных максимально разрядов - целых и десятичных
(то бишь, цифр - слева и справа от разделителя)?

2. Вы уверены, что точности округления в один разряд хватит, ведь там уже операции с дробями?
(Не будет потом так, что один день в программе поработали, и всю жизнь платить набежавшие остатки? )

3. В вычисляемом поле что рисовать - знак процентов?
Андрэич вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
не идет паскаль (функция min and max). Тань"ка Паскаль, Turbo Pascal, PascalABC.NET 4 20.01.2013 20:21
Функция для преобразование символьной ASCIIZ-строки в ASCII-строкy dreamfactor Общие вопросы Delphi 2 21.10.2012 12:35
Функция для ввода строки в Python 2.7 или 3.2 Ibanez Wizard PHP 1 09.11.2011 22:35
определить значения выражения z=max (a,2b)*max(2a-b,b)(алгоритм функция) анжелка Паскаль, Turbo Pascal, PascalABC.NET 2 04.04.2011 08:53
функция нахождения max/min эл-та в массиве Zhenya-Pvl Паскаль, Turbo Pascal, PascalABC.NET 3 20.12.2010 14:31