Высокие статистические технологии

Форум сайта семьи Орловых

Текущее время: Чт мар 28, 2024 6:36 pm

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 4 ] 
Автор Сообщение
 Заголовок сообщения: Диаграммы на VBA
СообщениеДобавлено: Чт дек 21, 2006 5:51 pm 
Не в сети

Зарегистрирован: Чт дек 21, 2006 5:36 pm
Сообщений: 2
Подскажите пожалуйста, имеется задача, в которой необходимо протабулировать функцию. Начальные и конечные значения а также шаг вводятся с формы. Параметры a и b также вводимые в форме, не имеют значения при рассмотрении моего вопроса. Макрос должен результаты табулирования вывести в виде таблицы на лист рабочей книги, в столбец A - значения х, в столбец В - значения функции от х. И потом по столбцу B необходимо построить линейную диаграмму. Вопрос заключается в следующем: я написал все, кроме задания диапазона, по которому должен строиться график. Диапазон должен быть от ячейки B2 до ячейки столбца В с номером строки содержащимся в переменной row. Подскажите пожалуйста, что необходимо вставить на место "Rem вставить источник данных здесь", чтобы макрос работал.
Код:
Private Sub CommandButton1_Click()
Dim xn As Single, xk As Single, dx As Single
Dim a As Single, b As Single, x As Single
Dim row As Integer, str_range As Variant

If (xn_input.Text <> "") And (xk_input.Text <> "") And (dx_input <> "") And (a_input <> "") And (b_input <> "") Then
  xn = xn_input: xk = xk_input: dx = dx_input
  a = a_input: b = b_input
  If (xn < xk) And (dx > 0) And (xn + dx < xk) Then
   x = xn: row = 2
   Лист1.Range("A2:B9999").Select
   Selection.Clear
   Лист1.Range("A2").Select
   Do
   Лист1.Cells(row, 1) = x
   Лист1.Cells(row, 2) = (Exp(a * x) + b) / (1 + Cos(x) ^ 2)
   x = x + dx: row = row + 1
   Loop While x <= xk
   row = row - 1
   Charts.Add
   ActiveChart.ChartType = xlLine
   ActiveChart.HasTitle = True
   ActiveChart.ChartTitle.Text = "y=f(x)"
   [b]Rem вставить источник данных здесь[/b]
   ActiveChart.HasLegend = False
   resh4.Hide
  Else
   MsgBox ("Некорректные данные интервала табуляции или шага")
  End If
Else
  MsgBox ("Не заполнены все необходимые поля")
End If
End Sub



Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт дек 21, 2006 9:04 pm 
Не в сети

Зарегистрирован: Пн дек 19, 2005 10:45 am
Сообщений: 19
Например, так :

Код:
Dim iRow As Long

iRow = 125
With Charts.Add
     .ChartType = xlLine
     .SetSourceData Source:=Лист1.Range("B2:B" & iRow)
     .HasTitle = True
     .ChartTitle.Text = "y=f(x)"
     .HasLegend = False
End With


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт дек 26, 2006 10:39 pm 
Не в сети

Зарегистрирован: Чт дек 21, 2006 5:36 pm
Сообщений: 2
Спасибо, все работает, только одна небольшая поправка в связи с тем что данные расположены в столбцах, необходимо это указать иначе бред какой-то строится
Код:
With Charts.Add
     .ChartType = xlLine
     tmp = .SetSourceData(Лист1.Range("B2:B" & (row - 1)), xlColumns)
     .HasTitle = True
     .ChartTitle.Text = "y=f(x)"
     .HasLegend = False
   End With


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср дек 27, 2006 10:47 am 
Не в сети

Зарегистрирован: Пн дек 19, 2005 10:45 am
Сообщений: 19
Именованный аргумент PlotBy является необязательным, а его значение определяется программой при указании диапазона. Т.е. при выборе диапазона "B2:B125" - значение аргумента PlotBy будет автоматически установлено как xlColumns (т.к. кол-во строк превышает кол-во столбцов), при выборе же диапазона "B2:K10" - значение будет автоматически установлено как xlRows (т.к. в этом случае кол-во столбцов превышает кол-во строк)

Всё вышесказанное не является вымыслом :P (т.к. было проверено временем и ещё раз только что), поэтому, термин "необходимо" считаю некорректным, ибо в моём примере использование аргумента PlotBy не является необходимым (хотя его использование и делает код более читабельным и понятным)

Добавлено : некорректное построение диаграммы, по всей видимости, связано с предварительным выделением диапазона, т.е. если при создании диаграммы выделен диапазон, где Rows.Count >= Columns.Count, то в этом случае, использование необязательного именованного аргумента PlotBy будет действительно необходимо, в противном случае, нет.


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 4 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 31


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB