Excel - VBA
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Excel - VBA

Excel - VBA

Закрытая тема
Поиск в этой теме
Непрочитано 22.05.2008, 19:59 #1
Excel - VBA
Leizar
 
Регистрация: 22.05.2008
Сообщений: 1

Очень прошу помочь со следующими вопросамии в VBA, связаными со следующими задачами:
1)Два отрезка на плоскости заданы координатами своих концов. Определить, имеют ли эти отрезки общие точки.
Примечание:Необходимо рассмотреть различные случаи взаимной ориентации отрезков: на одной прямой, на паралельных прямых или пересекающихся.

2)в массиве T(k) найтипервый и последний нулевые элементы.
3) От каждого из заданых m чисел x1, x2,…,xm отнять их среднее арифметическое: xi = xi – xср ,
xср = 1/m∑_(i=1)^m xi, i=1,2,…,m.
И что бы результаты были не месте исходных данных!
Просмотров: 10948
 
Непрочитано 14.11.2010, 05:21
#2
Дрюха

Инженер-конструктор
 
Регистрация: 20.07.2007
Москва
Сообщений: 2,936


Подниму данную тему (да будут милостливы модераторы), дабы не знаю, как в случае создания новой обозвать ее.
Господа, который час уже ломаю голову над созданием макроса в Excel (знания нулевые) Необходимо вот что:
допустим, есть три числа a,b,c (b=const,c=const). Как мне сделать макрос, чтобы он подбирал значение a, чтобы удовлетворялось условие a*b=c. полагаю ,что это должен быть какой-то цикл (идет подбор числа a с каким-то определенным шагом, типа: если ai*b<c, то aj=ai+delta, где дельта -определенный шаг и далее по кругу. Ну и все почти что то же самое, если значение ai*b>c), но все, что пытался сделать, насмарку.
Буду чрезвычайно рад помощи!!
Заранее спасибо
Дрюха вне форума  
 
Непрочитано 14.11.2010, 06:39
#3
ETCartman


 
Регистрация: 09.12.2008
Сообщений: 4,643


a=c/b
ETCartman вне форума  
 
Непрочитано 14.11.2010, 13:08
#4
Олег (jr.)

специалист по околачиванию грушевых деревьев
 
Регистрация: 14.09.2004
Pietari, Venäjä
Сообщений: 811


Цитата:
Сообщение от Дрюха Посмотреть сообщение
Подниму данную тему (да будут милостливы модераторы), дабы не знаю, как в случае создания новой обозвать ее.
Господа, который час уже ломаю голову над созданием макроса в Excel (знания нулевые) Необходимо вот что:
допустим, есть три числа a,b,c (b=const,c=const). Как мне сделать макрос, чтобы он подбирал значение a, чтобы удовлетворялось условие a*b=c. полагаю ,что это должен быть какой-то цикл (идет подбор числа a с каким-то определенным шагом, типа: если ai*b<c, то aj=ai+delta, где дельта -определенный шаг и далее по кругу. Ну и все почти что то же самое, если значение ai*b>c), но все, что пытался сделать, насмарку.
Буду чрезвычайно рад помощи!!
Заранее спасибо
Пробуй
Код:
[Выделить все]
Option Explicit

Const b As Double = 1.2345
Const c As Double = 5.4321
Sub testiteration()
Dim a As Double
Dim condition As Boolean

Dim step As Double
step = 0.000125
Dim start As Double
start = 0.1
Dim epsilon As Double
epsilon = 0.0001

Dim i As Long
i = 0
a = start
Do
condition = ((a * b) < (c - epsilon))
a = a + step

If condition = False Then
Exit Do
End If
Loop Until condition = False
With ThisWorkbook.ActiveSheet
.Range("A1:B7").Clear
.Range("A1:A7").NumberFormat = "@"
.Range("B2:B7").NumberFormat = "0.0000"
.Range("A1") = "Исходные данные"
.Range("A2") = "B="
.Range("A3") = "C="
.Range("A4") = "Точность="
.Range("A5") = "Приращение="
.Range("A6") = "Математически А= C/B="
.Range("A7") = "Расчетное А="
.Range("B2") = b
.Range("B3") = c
.Range("B4") = step
.Range("B5") = epsilon
.Range("B6") = c / b
.Range("B7") = a
.Range("A:B").Columns.AutoFit
.Range("B7").Select

End With
MsgBox "Done"
End Sub

Sub numb()
MsgBox ThisWorkbook.ActiveSheet.Range("B1").NumberFormat
End Sub
Олег (jr.) вне форума  
 
Непрочитано 14.11.2010, 15:46
#5
Дрюха

Инженер-конструктор
 
Регистрация: 20.07.2007
Москва
Сообщений: 2,936


Цитата:
Сообщение от ETCartman Посмотреть сообщение
a=c/b
Я знал, что кто-то это напишет Не смог я правильно разьяснить смысл проблемы в пол-шестого утра) а так обязательно порпобую Ваш вариант, уж больно он привлекателен!!!
Цитата:
Сообщение от Олег (jr.) Посмотреть сообщение
Пробуй
Немного уточню (по крайней мере, постараюсь). Есть в реальной задаче число a (ячейка A2), которое входит в выражение X(там действительно будет выражение, просто в данный момент эта ячейка численно равна ячейке A2), находящееся в ячейке F5. Так вот, нужно подобрать перебором такое значение A2, чтобы произведение выражения X (ячейка F5) на число b (ячейка G5) было равно числу C (ячейка H5)

Пробую редактировать Ваш код под себя, но не выходит. прикладываю файл, гляньте и ,по возможности, дайте рецензию, что я не сделал не так (ибо макрос не хочет считаться).
Вложения
Тип файла: rar На форум.rar (10.0 Кб, 85 просмотров)

Последний раз редактировалось Дрюха, 15.11.2010 в 02:26. Причина: отоспался
Дрюха вне форума  
 
Непрочитано 14.11.2010, 21:07
#6
Олег (jr.)

специалист по околачиванию грушевых деревьев
 
Регистрация: 14.09.2004
Pietari, Venäjä
Сообщений: 811


Цитата:
Сообщение от Дрюха Посмотреть сообщение
да я походу вообще не выспался
Когда выспишься объясни все заново, поскольку:
в ячейке А1 нет вообще никакого числа так же как нет никакой фрмулы в ячейке В1, а гадать - где что я не буду
Олег (jr.) вне форума  
 
Непрочитано 14.11.2010, 23:59
#7
Дрюха

Инженер-конструктор
 
Регистрация: 20.07.2007
Москва
Сообщений: 2,936


Вроде отредактировал
Дрюха вне форума  
 
Непрочитано 15.11.2010, 00:43
#8
BetoN

Инженер-проектировщик
 
Регистрация: 01.10.2008
Минск
Сообщений: 13


2Дрюха
Excel 2007, Данные - Работа с данными - Анализ "что-если" - Подбор параметра
BetoN вне форума  
 
Непрочитано 15.11.2010, 00:55
#9
Олег (jr.)

специалист по околачиванию грушевых деревьев
 
Регистрация: 14.09.2004
Pietari, Venäjä
Сообщений: 811


Цитата:
Сообщение от Дрюха Посмотреть сообщение
Вроде отредактировал
Завтра постараюсь
Олег (jr.) вне форума  
 
Непрочитано 15.11.2010, 02:28
#10
Дрюха

Инженер-конструктор
 
Регистрация: 20.07.2007
Москва
Сообщений: 2,936


Надеюсь на Вашу помощь!
BetoN, нужен именно макрос. но все равно спасибо
Дрюха вне форума  
 
Непрочитано 15.11.2010, 12:38
#11
Олег (jr.)

специалист по околачиванию грушевых деревьев
 
Регистрация: 14.09.2004
Pietari, Venäjä
Сообщений: 811


Попробуй еще раз
Код:
[Выделить все]
Option Explicit


Sub testiteration()
Application.Volatile True
Dim a As Double
Dim b As Double
Dim c As Double
Dim condition As Boolean

b = CDbl(Worksheets("1").Range("g5"))
c = Worksheets("1").Range("h5")
Dim step As Double
step = 0.00000001
Dim start As Double
start = 0.00000001
Dim epsilon As Double
epsilon = 0.00000001

Dim i As Long
i = 0
a = start
Do
a = a + step
condition = ((a * b) < (c - epsilon))
If condition = False Then
Exit Do
End If
Loop Until condition = False
With Sheets("1")
.Range("a8") = a '<--поменяй адрес ячейки
End With


''/*======= Только для проверки(удалить строчки)
With Sheets("1")

.Range("a9") = .[a8] * .[g5]
.Range("a10") = .[a9] < .[h5] + epsilon
End With ==========='/*

MsgBox "Done"
End Sub
Олег (jr.) вне форума  
 
Непрочитано 15.11.2010, 19:38
#12
Дрюха

Инженер-конструктор
 
Регистрация: 20.07.2007
Москва
Сообщений: 2,936


Все отлично. Спасибо , Олег (jr.), буду теперь использовать ваш макрос. ибо это только вершина айсберга
Дрюха вне форума  
 
Непрочитано 17.12.2010, 23:07
#13
Cfytrr

Балка на балку, кирпич на кирпич...
 
Регистрация: 09.10.2007
Питер
Сообщений: 4,898
Отправить сообщение для Cfytrr с помощью Skype™


Знающие люди помогите написать макрос
Есть исходные данные A, B и C есть решение D
как сделать так, что бы решение D было найдено в каждой из строк исходных данных
Нажмите на изображение для увеличения
Название: tab.JPG
Просмотров: 159
Размер:	48.6 Кб
ID:	50229
з.ы. В задаче, решение D занимает два листа сплошных формул.
__________________
...переменная FILEDIA создана для привлечения пользователей к форумам.
Cfytrr вне форума  
 
Непрочитано 17.12.2010, 23:24
#14
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404


Вариантов два. Первый - писать все внутри ячейки (т.е. =бла-бла-бла). Вариант второй: написать пользовательскую функцию, принимающую в качестве параметра несколько ячеек и вычисления выполнять уже в ней. По скорости быстродействия второй (особенно для длинных вычислений) практически гарантированно проиграет.
Для представленной формулы можешь посмотреть такой файлец...
Вложения
Тип файла: rar Книга1.rar (8.5 Кб, 110 просмотров)
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 18.12.2010, 00:04
#15
Cfytrr

Балка на балку, кирпич на кирпич...
 
Регистрация: 09.10.2007
Питер
Сообщений: 4,898
Отправить сообщение для Cfytrr с помощью Skype™


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
написать пользовательскую функцию, принимающую в качестве параметра несколько ячеек и вычисления выполнять уже в ней
Я правильно понимаю, что в одной ячейке придется описать все действия с исходными данными (полный алгоритм решения)? Если то так то такой вариант не подойдет, так как в реальном расчете решение D сложнее чем в примере и с A, B и С производятся не только арифметические , но и логические действия
__________________
...переменная FILEDIA создана для привлечения пользователей к форумам.
Cfytrr вне форума  
 
Непрочитано 18.12.2010, 00:16
#16
KronSerg

Вода - моя работа
 
Регистрация: 10.11.2009
Санкт-Петербург
Сообщений: 3,638


Логические действия тоже возможно прописать в формуле, но на мой взгляд, проще сделать по варианту два из №14
есть ещё третий вариант, расписать в дополнительных колонках промежуточные результаты вычислений зависящие друг от друга чтобы не городить очень длинную формулу в одной ячейке, потом промежуточные результаты можно просто скрыть.
__________________
Нерешаемых проблем не бывает.
KronSerg вне форума  
 
Непрочитано 18.12.2010, 00:20
#17
Cfytrr

Балка на балку, кирпич на кирпич...
 
Регистрация: 09.10.2007
Питер
Сообщений: 4,898
Отправить сообщение для Cfytrr с помощью Skype™


Кулик Алексей aka kpblc, KronSerg, Спасибо, буду пробовать.
__________________
...переменная FILEDIA создана для привлечения пользователей к форумам.
Cfytrr вне форума  
 
Непрочитано 18.12.2010, 19:47
#18
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404


При очень (подчеркиваю - очень!) больших вычислениях фактически выбор между пользовательской формулой и #16. Основной вопрос в скорости быстродействия: как правило, пользовательская формула работает чрезвычайно медленно, и, если есть возможность, от нее надо отказаться. То есть вычисления производить в отдельных ячейках (кстати, иногда все вычисления "прячутся" на отдельном скрытом листе, с именованием ячеек и т.д. )
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 19.12.2010, 02:25
#19
Brain Murder

Инженер
 
Регистрация: 11.06.2010
Москва
Сообщений: 1,446


Весь интернет обшарил не могу найти как привязать элемент ActiveX к ячейке. Мне нужно чтобы скрытый комбобокс появлялся при нажатии на ячейку принадлежащую определенному диапазону. Через "именованные диапазоны" способ меня не устраивает, мне нужен быстрый поиск элемента по первым буквам. Как запустить что-либо по нажатию на ячейку понятно. Классика...
Код:
[Выделить все]
    Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Cells.Count > 1 Then Exit Sub
    If Not Intersect(Target, Range("b2:b1000")) Is Nothing Then
и пошло поехало...
но возникают вопросы:
1. Как указать диапазон всего столбца? Не Range("b2:b1000") а от b2 и пока таблица не кончится.
2. Как координаты комбобокса задать чтоб он точно рядом с поюзаной ячейкой появлялся?
И кстати, чем элементы ActiveX отличаются от Элементов управления?
__________________
YouTube Titan solidhat@ya.ru

Последний раз редактировалось Brain Murder, 19.12.2010 в 02:39.
Brain Murder вне форума  
 
Непрочитано 19.12.2010, 10:09
#20
T-Yoke

Артиллерист - вертолётчик. Дипломированный инженер-механик. Technologist
 
Регистрация: 29.11.2004
Где-то около Москвы
Сообщений: 16,748
Отправить сообщение для T-Yoke с помощью Skype™


Цитата:
Сообщение от Brain Murder Посмотреть сообщение
Весь интернет обшарил не могу найти как привязать элемент ActiveX к ячейке. Мне нужно чтобы скрытый комбобокс появлялся при нажатии на ячейку принадлежащую определенному диапазону....
Посмотри здесь думаю должно устроить. Описаны четыре варианта.
__________________
«Артиллерия не токмо грохот, но и наука!» Пётр I
T-Yoke вне форума  
Закрытая тема
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Excel - VBA



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Пароль к VBA karp_b Программирование 24 29.08.2013 12:43
Why VBA interpol function doesn't work in this excel file... romkeris Программирование 5 13.05.2008 12:03
VBA + Autocad+Excel gizmo_zx Программирование 11 18.01.2008 00:13
Перебор ячеек в Excel из VBA AutoCAD SVitaliy Программирование 6 10.10.2007 23:45
Как перенести информацию из табл. в Автокаде в Excel Margarinchik AutoCAD 9 29.11.2006 19:17