Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Помогите сделать график в Excel

482
19 апреля 2005 года
crazytrain
123 / / 19.04.2005
Задача стоит так. Есть пара столбцов ячеек (А,С) они числовые. Они заносятся в массивы, происходят вычисления т.е. создается еще пара массивов ( например первый это сложение А и С, а второй это разность А и С). После этого по данным этих массивов нужно постороить график зависимости одного от другого на новом листе, скажем на 5, он пустой в книге. Сразу еще один вопрос, если строить несколько графиков от одного, как сделать чтобы они были разного цвета. Все это должен сделать макрос. Заранее благодарен.
3.5K
20 апреля 2005 года
Rubins
30 / / 16.06.2003
Цитата:
Originally posted by crazytrain
Задача стоит так. Есть пара столбцов ячеек (А,С) они числовые. Они заносятся в массивы, происходят вычисления т.е. создается еще пара массивов ( например первый это сложение А и С, а второй это разность А и С). После этого по данным этих массивов нужно постороить график зависимости одного от другого на новом листе, скажем на 5, он пустой в книге. Сразу еще один вопрос, если строить несколько графиков от одного, как сделать чтобы они были разного цвета. Все это должен сделать макрос. Заранее благодарен.


Построй график руками (вставка -диаграмма), перед этим запусти Сервис-Макрос Начать запись.
По этим созданным макросам и учись создавать
макросы для автоматического создания графиков.
По ним есть HELP, правда, наанглийском.

482
20 апреля 2005 года
crazytrain
123 / / 19.04.2005
Цитата:
Originally posted by Rubins
Построй график руками (вставка -диаграмма), перед этим запусти Сервис-Макрос Начать запись.
По этим созданным макросам и учись создавать
макросы для автоматического создания графиков.
По ним есть HELP, правда, наанглийском.


Спасибо, за совет буду иметь его ввиду, в будующем. (может я туповат конечно), но как чтобы график строился именно по массиву данных?

3.5K
20 апреля 2005 года
Rubins
30 / / 16.06.2003
Цитата:
Originally posted by crazytrain
Спасибо, за совет буду иметь его ввиду, в будующем. (может я туповат конечно), но как чтобы график строился именно по массиву данных?


При вставке диаграммы у тебя будет запрос на указание диапазона: по х, по y, по каждому ряду и так далее.
Если ты все это сделаешь в режиме записи, то у тебя появится макрос.
Далее корректируй макрос под свои требования,
учись. Неясно - вызывай помощь.

482
20 апреля 2005 года
crazytrain
123 / / 19.04.2005
Цитата:
Originally posted by Rubins
При вставке диаграммы у тебя будет запрос на указание диапазона: по х, по y, по каждому ряду и так далее.
Если ты все это сделаешь в режиме записи, то у тебя появится макрос.
Далее корректируй макрос под свои требования,
учись. Неясно - вызывай помощь.


Да предыдущий вопрос был рановат, согласен. Массивы я кое как туда запихнул, но в строчке
ActiveChart.SetSourceData Source:=Sheets("Лист1").Range("A1:A103,D1:E103"), _
PlotBy:=xlColumns

ума не приложу как сделать чтобы не было этого Range, и было все корректно. Массив сюда приплести у меня не получилось.

3.5K
21 апреля 2005 года
Rubins
30 / / 16.06.2003
Цитата:
Originally posted by crazytrain
Да предыдущий вопрос был рановат, согласен. Массивы я кое как туда запихнул, но в строчке
ActiveChart.SetSourceData Source:=Sheets("Лист1").Range("A1:A103,D1:E103"), _
PlotBy:=xlColumns

ума не приложу как сделать чтобы не было этого Range, и было все корректно. Массив сюда приплести у меня не получилось.


Графики, скорее всего, можно связывать только с диапазоном ячеек (если это не так, см. HELP).
Просто создай еще один лист и присвой в цикле
диапазону ячеек значенияиз массива.

459
21 апреля 2005 года
gacol
273 / / 12.02.2003
Цитата:
Originally posted by crazytrain
Да предыдущий вопрос был рановат, согласен. Массивы я кое как туда запихнул, но в строчке
ActiveChart.SetSourceData Source:=Sheets("Лист1").Range("A1:A103,D1:E103"), _
PlotBy:=xlColumns

ума не приложу как сделать чтобы не было этого Range, и было все корректно. Массив сюда приплести у меня не получилось.

459
21 апреля 2005 года
gacol
273 / / 12.02.2003
Цитата:
Originally posted by crazytrain
Да предыдущий вопрос был рановат, согласен. Массивы я кое как туда запихнул, но в строчке
ActiveChart.SetSourceData Source:=Sheets("Лист1").Range("A1:A103,D1:E103"), _
PlotBy:=xlColumns

ума не приложу как сделать чтобы не было этого Range, и было все корректно. Массив сюда приплести у меня не получилось.


Вот пример построения графика, где данные для него задаются программно. Можно в цикле и элементы массивов использовать.

482
21 апреля 2005 года
crazytrain
123 / / 19.04.2005
Цитата:
Originally posted by gacol
Вот пример построения графика, где данные для него задаются программно. Можно в цикле и элементы массивов использовать.


Неплохой способ, только вот если надо точек скажем 100 или 150 ( а мне может понядобится еще больше 300-400), в xc или yc не помещается больше 256 символов :-) говорит ошибка. т.е. помещается то больше но вот
ActiveChart.SeriesCollection(1).XValues = "={" & Left(xs, Len(xs) - 1) & "}"
ActiveChart.SeriesCollection(1).Values = "={" & Left(ys, Len(ys) - 1) & "}"
в этих строчках он больше 256 не воспринимает

3.5K
21 апреля 2005 года
Rubins
30 / / 16.06.2003
Цитата:
Originally posted by crazytrain
Неплохой способ, только вот если надо точек скажем 100 или 150 ( а мне может понядобится еще больше 300-400), в xc или yc не помещается больше 256 символов :-) говорит ошибка. т.е. помещается то больше но вот
ActiveChart.SeriesCollection(1).XValues = "={" & Left(xs, Len(xs) - 1) & "}"
ActiveChart.SeriesCollection(1).Values = "={" & Left(ys, Len(ys) - 1) & "}"
в этих строчках он больше 256 не воспринимает


А значения можно указывать и в столбцах. Тогда
ограничение увеличивается до 65535

459
22 апреля 2005 года
gacol
273 / / 12.02.2003
Цитата:
Originally posted by crazytrain
Неплохой способ, только вот если надо точек скажем 100 или 150 ( а мне может понядобится еще больше 300-400), в xc или yc не помещается больше 256 символов :-) говорит ошибка. т.е. помещается то больше но вот
ActiveChart.SeriesCollection(1).XValues = "={" & Left(xs, Len(xs) - 1) & "}"
ActiveChart.SeriesCollection(1).Values = "={" & Left(ys, Len(ys) - 1) & "}"
в этих строчках он больше 256 не воспринимает


Можно обойтись и без строк, сразу использовать массив
For i = 1 To 9
x(i) = i
y(i) = i ^ stp
Next i
ActiveChart.SeriesCollection(1).XValues = x
ActiveChart.SeriesCollection(1).Values = y
Но к сожалению число точек так тоже ограничевается - 100 уже не проходит.
А вариант Rubins тебе подойдет или надо без использования листа?

11K
22 апреля 2005 года
homa
2 / / 22.04.2005
Цитата:
Рид Джекобсон. Microsoft Office 2000. Основные приложения. Стр.202, Построение графика математической функции.
...Главное достоинство применения именованных формул массива при построении графиков - в том, что число точек на диаграмме можно при желании увеличить с пяти до 51 ( как на рис.7-22) или даже до 5001 (на графике они просто сольются в сплошную линию), изменив единственное число в ячейке...


Вобщем, там аж на 4 страницах, все перепечатывать ломы - вот тебе результирующий файл, надеюсь разберешься. :)
Если что - [email]sulthoma@mail.ru[/email]

459
22 апреля 2005 года
gacol
273 / / 12.02.2003
Цитата:
Originally posted by homa
Вобщем, там аж на 4 страницах, все перепечатывать ломы - вот тебе результирующий файл, надеюсь разберешься. :)
Если что - [email]sulthoma@mail.ru[/email]


Не знал про такую хорошую штуку в Экселе.
Хотя обычно мне приходится строить график не по функциям, а уже по готовым значениям.
А как этот график вообще построить, я не понял.
Из меню? Проясни. Другим, наверное, тоже интересно.

11K
22 апреля 2005 года
homa
2 / / 22.04.2005
Сорри, господа, там действительно все очень ненаглядно :(

Цитата:

Честно говоря не разобрался, и не увидел в том файле ни строчки кода. И откуда в график приходят значения типа =ГрафикПоФормулеМассива.xls!x
я тоже не понимаю. Если не трудно , можно поподробнее ( а может это не совсем тот файл)



Меню\Вставка\Имя\Присвоить
Там увидишь список имен, заданных в файле.
Несколько стандартных, именующих ячейки - типа "а" это имя ячейки B1.
А два - хитрых, я сам когда прочел - часа два только врубался. А потом полдня восхищался - изящно сделано :).
Короче, два имени в этом файле не имеют ссылок на ячейки - это X и Y.
Вместо ссылок им сразу присваиваются формулы:
Х = (СТРОКА(СМЕЩ(n;0;0;n+1))-СТРОКА(n))/n*(Конец-Начало)+Начало
Y = a*x^3+b*x^2+c_*x+d
Соответственно, все буквы здесь - имена ячеек, они обозначены на листе. Кроме Х, разумеется: Х вычисляется раньше и затем подставляется в формулу расчета Y. А при создании графика ты указываешь в качестве значений Х и Y имена этих
переменных. Вернее, по стандартной терминологии - поименованных формул массива.
Хитрость в том, что:

Цитата:
"Функция СТРОКА() возвращает номер строки для заданной ячейки. Если в качестве ее аргумента использовать многострочный диапазон, функция возвратит массив номеров строк. Например, выражение СТРОКА(А1:А5) возвращает массив {1:2:3:4:5}. Если присвоить ячейке Е3 имя "n" и ввести в нее число 4, выражение СТРОКА(СМЕЩ(n;0;0;n+1)) вернет массив {3:4:5:6:7}. Чтобы получить последовательность, начинающуюся с 0, из элементов массива нужно вычесть номер строки исходной ячейки. Выражение СТРОКА(СМЕЩ(n;0;0;n+1))-СТРОКА(n) возвращает массив {0:1:2:3:4}.
На следующем шаге числа приводятся к нужному масштабу. Разделите их на значение n (чтобы они были заключены в пределах от 0 до 1), а затем умножьте на разницу между начальным и конечным значениями...
... Наконец, последовательность чисел необходимо сдвинуть к начальному значению, прибавив число "Начало"..."



Вот.

P.S. Обратите внимание - в формуле Y имя ячейки "С" задано с символом подчеркивания. Это для того чтобы не путалась под ногами адресация ссылок в стиле "R1C1".

459
22 апреля 2005 года
gacol
273 / / 12.02.2003
Вот теперь Большое человеческое спасибо!
482
22 апреля 2005 года
crazytrain
123 / / 19.04.2005
Чем дальше в лес тем шире партизаны. Круто конечно, еще один хитрый прием, но если график не может задаваться формулой? Я уже отказался от идеи массивов (но все ваши пожелания пригодились:-). Проблема теперь в другом. Макрос в Экселе работает, а когда я делаю отдельный екзешник в VB, то выскакивает ошибка.
в строчке (**),говорит "Нельзя установить свойство Values класса Series", в чем может быть проблема?
Sub sss()

Charts.Add
ActiveChart.ChartType = xlXYScatterSmooth
ActiveChart.SetSourceData Source:=Sheets("Лист5").Range("A1")
ActiveChart.SeriesCollection.NewSeries
ActiveChart.SeriesCollection.NewSeries
ActiveChart.SeriesCollection.NewSeries
ActiveChart.SeriesCollection(1).XValues = "=Лист2!R2C1:R104C1"
(**) ActiveChart.SeriesCollection(1).Values = "=Лист2!R2C4:R104C4"
ActiveChart.SeriesCollection(1).Name = "=""f1"""
ActiveChart.SeriesCollection(2).XValues = "=Лист3!R2C1:R19C1"
ActiveChart.SeriesCollection(2).Values = "=Лист3!R2C4:R19C4"
ActiveChart.SeriesCollection(2).Name = "=""f2"""
ActiveChart.SeriesCollection(3).XValues = "=Лист4!R2C1:R19C1"
ActiveChart.SeriesCollection(3).Values = "=Лист4!R2C4:R19C4"
ActiveChart.SeriesCollection(3).Name = "=""f3"""
ActiveChart.Location Where:=xlLocationAsObject, Name:="Лист5"
With ActiveChart
.HasTitle = True
.ChartTitle.Characters.Text = " F"
.Axes(xlCategory, xlPrimary).HasTitle = True
.Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "номер"
.Axes(xlValue, xlPrimary).HasTitle = True
.Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = " F"
End With
With ActiveChart.Axes(xlCategory)
.HasMajorGridlines = True
.HasMinorGridlines = False
End With
With ActiveChart.Axes(xlValue)
.HasMajorGridlines = True
.HasMinorGridlines = False
End With
ActiveChart.HasLegend = True
ActiveChart.Legend.Select
Selection.Position = xlBottom
End Sub
482
22 апреля 2005 года
crazytrain
123 / / 19.04.2005
Все спасибо разобрался :-)
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог