|
||
| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны | Справка по форуму | Файлообменник | |
|
![]() |
Поиск в этой теме |
![]() |
#1 | |
VBA Excel - линейная интерполяция
94597
Регистрация: 05.05.2005
Сообщений: 900
|
||
Просмотров: 8894
|
|
||||
Регистрация: 09.12.2008
Сообщений: 4,643
|
http://www.sql.ru/forum/328569/poisk...ogo-znacheniya
Код:
Цитата:
__________________
мой блог по некоторым вопросам Последний раз редактировалось ETCartman, 07.07.2014 в 19:27. |
|||
![]() |
|
||||
Регистрация: 05.05.2005
94597
Сообщений: 900
|
Спасибо, это для общего случая двойной интерполяции.
У меня всего лишь: If Ar <= 2.5, Cd = 2 If Ar = 7, Cd = 1.4 If Ar >= 25, Cd = 2.0 Надо посчитать промежуточные значения. В макросе можно наверное также использовать чисто екселовкую функцию для интерполяции. Кстати Cd это drag coefficient ветровой нагрузки в зависимости от aspect ratio , например, плоской антенны или элемента башни при подсчёте ветровых нагрузок по новому только что вышедшему канадскому снипу по антенным сооружениям.
__________________
Free advice is worth what you pay for it. (Often) |
|||
![]() |
|
||||
Регистрация: 09.12.2008
Сообщений: 4,643
|
Цитата:
Можно без VBA через IF(...) но VBA наглядней канадский снип случайно не открыт для всеобщего доступа? аналог TIA-222? нет ли опечатки в том что вы написали?
__________________
мой блог по некоторым вопросам Последний раз редактировалось ETCartman, 07.07.2014 в 20:19. |
|||
![]() |
|
||||
Регистрация: 05.05.2005
94597
Сообщений: 900
|
Цитата:
Канадский S37-13 почти копия последнего TIA-222. Предыдущая версия, S37-01 (2001г.) имела больше отличий от американцев. ----- добавлено через 12 сек. ----- Спасибо, всё работает отлично. По твоему примеру (из блога в твоей подписи) начал понемногу делать утилиты для эскселя в VBA. Один примитивный вопрос для спеца но сложный для меня ![]() Можно ли написать в ВБА функцию которая возвращала бы два значения в зависимости от значения двух аргументов, но аргументы были бы текстовыми значениями (например "Flat" или "Rond")?
__________________
Free advice is worth what you pay for it. (Often) Последний раз редактировалось Baires, 07.07.2014 в 23:17. |
|||
![]() |
|
||||
Регистрация: 09.12.2008
Сообщений: 4,643
|
Да, можно. Просто введите через запятую переменную типа key_of_shape (текстовую или не важно если вы тип не объявляете - по умолчанию Variant)
и сделайте внутри функции два варианта расчета с использованием IF ...Then If key_of_shape="Flat" Then ...... End If Я в основном стараюсь писать не для VBA а для опен-офис, там есть некоторые преимущества в языке (хотя в принципе все очень похоже если брать математику) а именно - функции массива проще писать. Таким образом можно написать функцию которая сразу возвращает таблицу значений целиком (с заголовками и пр) Есть довольно много статей на эти темы - тут например. Basic вообще очень удобен для простых расчетов (то есть не то чтобы программиста из себя изображать, а просто делать быстро) - особенно в англоязычной среде Снабдил программу комментариями, вот как бы и в репорт можно вставлять.
__________________
мой блог по некоторым вопросам Последний раз редактировалось ETCartman, 07.07.2014 в 23:51. |
|||
![]() |
|
||||
Регистрация: 09.12.2008
Сообщений: 4,643
|
если варианта всего два, то можно if-then писать один раз в принципе. То есть сначала идет вычисление для какого то одного, например Flat, и выводится результат в конце. После этого можно сделать If ...round
и писать уже для круглого и выводить значение функции для круглого. Если первое - то расчет не пойдет дальше if, если второе - то посчитает сначала первое, а потом окончательно пересчитает уже внутри If. Хотя прописывать If для каждого отдельно - методологически вернее и быстрее. Хотя Время счета сейчас как правило роли не играет, в таких вычислениях. ЧТо одна миллисекунда, что две. Для скорости счета там много отдельных рекомендаций - переменные нужно объявлять и так далее. вот есть статья на тему скорости http://myooo.ru/content/view/116/95/ (верная отчасти и для VBA)
__________________
мой блог по некоторым вопросам Последний раз редактировалось ETCartman, 08.07.2014 в 00:48. |
|||
![]() |
|
||||
Регистрация: 09.12.2008
Сообщений: 4,643
|
вы по ошибке заархивировали ярлык - не сам файл
думаю что ошибка может быть в присвоении значения (типа имя напутано или что то в этом роде)
__________________
мой блог по некоторым вопросам |
|||
![]() |
|
||||
Регистрация: 05.05.2005
94597
Сообщений: 900
|
Уже дошло - был временный приступ тупости
![]() В коде функции надо было в конце присвоить значение результата значения функции. Всё равно, посмотрите код если есть пару минут, уверен там можно оптимизировать много чего ![]()
__________________
Free advice is worth what you pay for it. (Often) |
|||
![]() |
|
||||
Регистрация: 09.12.2008
Сообщений: 4,643
|
У вас функция как бы наполовину привязана к конкретному листу
то есть - часть значений вы берете из ячеек. В принципе можно было бы просто записать valCeFunction(Hx1, Cg,Ca ...) и так далее могу пояснить зачем - во первых если вы ее и дальше будете использовать в работе (делать другой видоизмененный расчет) - вам не надо переадресовывать переменные (вы также можете двигать их для дизайна как угодно) Во вторых если вы будете писать какую то другую функцию - вы сможете ссылаться из вашего кода на вашу функцию используя промежуточные результаты как аргументы Например пишете функцию с внутренними усилиями в балке и тут же естественно проверить ее по нормам. А у вас такая проверка есть уже. Таким образом легко совместить все предыдущие наработки с новыми. В третьих если вы захотите написать программу отдельную от Excel вообще - например на вижуал Бэйсик, вам можно будет просто скопировать ваши функции туда. Учитывая что интерфейс рисуется визуально, сделать расчет полностью отдельным от офиса труда большого не составляет Если вам хочется чтобы аргумент был все таки один - можете оформить его как массив и подцеплять с листа выделением диапазона. А потом уже ранжиовать - что значит первый элемент массива, что второй и так далее. Тут много вариантов. Можно генерировать целый многострочный отчет в одной функции которая возвращает многострочную переменную - с выкладками и разными результатами.
__________________
мой блог по некоторым вопросам Последний раз редактировалось ETCartman, 08.07.2014 в 21:01. |
|||
![]() |
|
||||
Регистрация: 05.05.2005
94597
Сообщений: 900
|
Цитата:
__________________
Free advice is worth what you pay for it. (Often) |
|||
![]() |
|
||||
Регистрация: 09.12.2008
Сообщений: 4,643
|
да.
смысл в том что функция может быть использована как в коде бэйсик (для получения промежуточных результатов) так и в рабочей книге как стандартная функция эксель. в этом случае вы приобретаете достоинства модульности своих программ. То есть у вас есть некоторая коллекция функций, которые вы по мере надобности вставляете в шаблоны для расчета и комбинируете как хотите. это проще чем каждый отдельный шаблон по хитрому переделывать.
__________________
мой блог по некоторым вопросам |
|||
![]() |
![]() |
|
Опции темы | Поиск в этой теме |
|
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Сквозная нумерация листов через поля | Sta1917 | Программирование | 6 | 13.11.2012 00:27 |
как скопировать ячейки excel в чертеж AutuCAD | vestes | AutoCAD | 5 | 14.06.2011 00:37 |
Подключение Excel к AutoCad 2008 c помощью базы ODBC | Eddicordo | AutoCAD | 4 | 03.02.2011 17:01 |
Проблема вставки диаграмм в ACAD 2009 из Excel 2007 | ST2 | AutoCAD | 1 | 26.05.2009 01:30 |