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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.08.2015, 14:27   #1
annetetet
 
Аватар для annetetet
 
Регистрация: 21.08.2015
Сообщений: 7
Вопрос поиск приблизительного значения в ячейке таблицы

Доброго времени суток. В моем маленьком коде есть момент, когда макрос ищет значение u в таблице на втором листе "лист 1". Мне нужно, чтобы он находил и приблизительные значения. то есть, например, если я введу 0,5 он нашел в табличке 0,4935. Подскажите, как это сделать, пожалуйста)
Изображения
Тип файла: jpg Безымянный.jpg (110.1 Кб, 134 просмотров)
Тип файла: jpg Безымянный1.jpg (95.0 Кб, 128 просмотров)
annetetet вне форума Ответить с цитированием
Старый 21.08.2015, 15:14   #2
27102014
Форумчанин
 
Регистрация: 27.10.2014
Сообщений: 248
По умолчанию

В следующий раз выкладывайте код, а не картинки, форум программистов, а не художников

нужно округлить значение ячейки с помощью формулы ОКРУГЛ
Код:
t1 = ROUND (cells (i+1,j+1), 1)
27102014 вне форума Ответить с цитированием
Старый 21.08.2015, 15:55   #3
annetetet
 
Аватар для annetetet
 
Регистрация: 21.08.2015
Сообщений: 7
По умолчанию

Спасибо. Загрузить на сайт файл .xlsm не удалось, а скриншоты мне было сделать проще, чем архив. В след. раз буду делать архив. Правда такое решение не совсем правильное. По условию пользователь может ввести любое u. а значение в таблице нужно найти максимально приближенное. Поэтому если пользоваться оператором ROUND не понятно, до какого разряда округлять. Вставила Ваше решение в код - программа вообще не сработала.

Последний раз редактировалось annetetet; 21.08.2015 в 16:00.
annetetet вне форума Ответить с цитированием
Старый 24.08.2015, 15:33   #4
annetetet
 
Аватар для annetetet
 
Регистрация: 21.08.2015
Сообщений: 7
По умолчанию

вопрос остается открытым
annetetet вне форума Ответить с цитированием
Старый 26.08.2015, 03:58   #5
ShAM66
Форумчанин
 
Регистрация: 24.02.2012
Сообщений: 160
По умолчанию

Цитата:
Сообщение от annetetet Посмотреть сообщение
вопрос остается открытым
Замечание по файлу тоже.
ShAM66 вне форума Ответить с цитированием
Старый 26.08.2015, 08:29   #6
Akeloya
Форумчанин
 
Регистрация: 27.01.2014
Сообщений: 115
По умолчанию

Цитата:
Сообщение от annetetet Посмотреть сообщение
вопрос остается открытым
Если подумать головой, то вам необходимо найти минимальную разницу сверху или снизу от числа (в зависимости от того, как ставится задача).

Формально, если представить значения на листе множеством A{x}, вам необходимо для поиска нужного вам числа s (близкого к заданному m) получить новое множество B{x,y} пар ключей где x - число из исходного множества A, а y - это результат разницы для поиска числа s сверху (x-m) и снизу (m-x). В итоге задача сведется к поиску минимального y в множестве B.

При этом такую постановку задачи по поиску можно будет считать полной, если дополнить ее точностью поиска эпсилон. Это нужно в тех случаях, если мы имеем погрешность вычислений, тогда все разницы y, попавшие в погрешность отражают искомые значения s.

Последний раз редактировалось Akeloya; 26.08.2015 в 08:32. Причина: формулировка:)
Akeloya вне форума Ответить с цитированием
Старый 26.08.2015, 16:05   #7
annetetet
 
Аватар для annetetet
 
Регистрация: 21.08.2015
Сообщений: 7
По умолчанию

Цитата:
Сообщение от Akeloya Посмотреть сообщение
Если подумать головой, то вам необходимо найти минимальную разницу сверху или снизу от числа (в зависимости от того, как ставится задача).

Формально, если представить значения на листе множеством A{x}, вам необходимо для поиска нужного вам числа s (близкого к заданному m) получить новое множество B{x,y} пар ключей где x - число из исходного множества A, а y - это результат разницы для поиска числа s сверху (x-m) и снизу (m-x). В итоге задача сведется к поиску минимального y в множестве B.

При этом такую постановку задачи по поиску можно будет считать полной, если дополнить ее точностью поиска эпсилон. Это нужно в тех случаях, если мы имеем погрешность вычислений, тогда все разницы y, попавшие в погрешность отражают искомые значения s.
как раз сегодня додумала до такой идеи, только y нужно искать не просто минимальное, а минимальное по модулю, поскольку разница может быть отрицательной, а значение нам нужно найти ближайшее. застопорилась теперь на том, как именно найти минимальный модуль значений в новой таблице.
*далеко мне еще до звания аса в этом деле
annetetet вне форума Ответить с цитированием
Старый 26.08.2015, 16:12   #8
annetetet
 
Аватар для annetetet
 
Регистрация: 21.08.2015
Сообщений: 7
По умолчанию

Цитата:
Сообщение от ShAM66 Посмотреть сообщение
Замечание по файлу тоже.
спешал фо ю файл, в первоначальном виде
Вложения
Тип файла: zip таблица 1.zip (23.4 Кб, 8 просмотров)
annetetet вне форума Ответить с цитированием
Старый 26.08.2015, 16:32   #9
who
Пользователь
 
Регистрация: 11.09.2014
Сообщений: 44
По умолчанию

а зачем вы пытаетесь взять значение из ячейки

Код:
Cells(a + 2, 3)
если ранее получаете "а" в дробном виде?

и нужно предупреждать, что значение "k" меньше единицы, как в принципе и "u"

Последний раз редактировалось who; 26.08.2015 в 17:01.
who вне форума Ответить с цитированием
Старый 26.08.2015, 19:34   #10
Akeloya
Форумчанин
 
Регистрация: 27.01.2014
Сообщений: 115
По умолчанию

Цитата:
Сообщение от annetetet Посмотреть сообщение
как раз сегодня додумала до такой идеи, только y нужно искать не просто минимальное, а минимальное по модулю, поскольку разница может быть отрицательной, а значение нам нужно найти ближайшее. застопорилась теперь на том, как именно найти минимальный модуль значений в новой таблице.
*далеко мне еще до звания аса в этом деле
В моем ответе у меня маленькая неточность - я не указал что нужно искать неотрицательные числа. Я вам предложил общий вариант решения задачи, модуль - это уже частное, так как в вашем случае вы не ищите с которой стороны вы подошли к числу, но это не значит что такое не понадобится

Модуль - функция abs(x). Т.е., вам необходимо брать модуль от разницы abs(u - cells[i,j]), тогда вы просто ищите число близкое к нулю.

Даю подсказку - вы можете не просто писать код, но и воспользоваться листами экселя вбивая в ячейки формулы. Вообще, если таблица значений у вас не меняется, вам вбс код нафиг не нужен - вы на отдельном листе отводите две ячейки под значения u и k, формируете таблицу разниц исходной и u, поскольку изначально u = 0, то она будет совпадать.
Затем в третьей ячейки вы выкидываете поиск минимального значения в таблице разниц, ну и несколько ячеек с формулами, высчитывающие rad, a, sin.
В итоге макрос сводится к тому, чтобы ввести данные в нужную ячейку и вывести данные меседж боксом на экран, так как всё остальное выполнит за вас эксель.
Одна единственная формула min и рукотворная таблица (растягиванием за крестик) заменят вам рукописный цикл

В вашем случае уменьшение кода - уменьшение ошибок в решении
Akeloya вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Примечание в ячейке при изменении значения в ячейке другого листа FoxRiver Microsoft Office Excel 4 12.07.2013 08:46
Данные из таблицы в список, если в ячейке таблицы стоит количество oleg_sh Microsoft Office Excel 4 08.10.2012 14:52
Присвоение ячейке пустого значения ogololobov2009 Microsoft Office Excel 1 05.03.2011 16:37
Как осуществить поиск заданного значения в столбце таблицы? Dux БД в Delphi 6 04.01.2011 23:36
Автоматическое изменение значения в ячейке TStalin Microsoft Office Excel 7 07.09.2010 18:19