Помогите сделать график в Excel
Задача стоит так. Есть пара столбцов ячеек (А,С) они числовые. Они заносятся в массивы, происходят вычисления т.е. создается еще пара массивов ( например первый это сложение А и С, а второй это разность А и С). После этого по данным этих массивов нужно постороить график зависимости одного от другого на новом листе, скажем на 5, он пустой в книге. Сразу еще один вопрос, если строить несколько графиков от одного, как сделать чтобы они были разного цвета. Все это должен сделать макрос. Заранее благодарен.
Построй график руками (вставка -диаграмма), перед этим запусти Сервис-Макрос Начать запись.
По этим созданным макросам и учись создавать
макросы для автоматического создания графиков.
По ним есть HELP, правда, наанглийском.
Построй график руками (вставка -диаграмма), перед этим запусти Сервис-Макрос Начать запись.
По этим созданным макросам и учись создавать
макросы для автоматического создания графиков.
По ним есть HELP, правда, наанглийском.
Спасибо, за совет буду иметь его ввиду, в будующем. (может я туповат конечно), но как чтобы график строился именно по массиву данных?
Спасибо, за совет буду иметь его ввиду, в будующем. (может я туповат конечно), но как чтобы график строился именно по массиву данных?
При вставке диаграммы у тебя будет запрос на указание диапазона: по х, по y, по каждому ряду и так далее.
Если ты все это сделаешь в режиме записи, то у тебя появится макрос.
Далее корректируй макрос под свои требования,
учись. Неясно - вызывай помощь.
При вставке диаграммы у тебя будет запрос на указание диапазона: по х, по y, по каждому ряду и так далее.
Если ты все это сделаешь в режиме записи, то у тебя появится макрос.
Далее корректируй макрос под свои требования,
учись. Неясно - вызывай помощь.
Да предыдущий вопрос был рановат, согласен. Массивы я кое как туда запихнул, но в строчке
ActiveChart.SetSourceData Source:=Sheets("Лист1").Range("A1:A103,D1:E103"), _
PlotBy:=xlColumns
ума не приложу как сделать чтобы не было этого Range, и было все корректно. Массив сюда приплести у меня не получилось.
Да предыдущий вопрос был рановат, согласен. Массивы я кое как туда запихнул, но в строчке
ActiveChart.SetSourceData Source:=Sheets("Лист1").Range("A1:A103,D1:E103"), _
PlotBy:=xlColumns
ума не приложу как сделать чтобы не было этого Range, и было все корректно. Массив сюда приплести у меня не получилось.
Графики, скорее всего, можно связывать только с диапазоном ячеек (если это не так, см. HELP).
Просто создай еще один лист и присвой в цикле
диапазону ячеек значенияиз массива.
Да предыдущий вопрос был рановат, согласен. Массивы я кое как туда запихнул, но в строчке
ActiveChart.SetSourceData Source:=Sheets("Лист1").Range("A1:A103,D1:E103"), _
PlotBy:=xlColumns
ума не приложу как сделать чтобы не было этого Range, и было все корректно. Массив сюда приплести у меня не получилось.
Да предыдущий вопрос был рановат, согласен. Массивы я кое как туда запихнул, но в строчке
ActiveChart.SetSourceData Source:=Sheets("Лист1").Range("A1:A103,D1:E103"), _
PlotBy:=xlColumns
ума не приложу как сделать чтобы не было этого Range, и было все корректно. Массив сюда приплести у меня не получилось.
Вот пример построения графика, где данные для него задаются программно. Можно в цикле и элементы массивов использовать.
Вот пример построения графика, где данные для него задаются программно. Можно в цикле и элементы массивов использовать.
Неплохой способ, только вот если надо точек скажем 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 не воспринимает
Неплохой способ, только вот если надо точек скажем 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
Неплохой способ, только вот если надо точек скажем 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 тебе подойдет или надо без использования листа?
...Главное достоинство применения именованных формул массива при построении графиков - в том, что число точек на диаграмме можно при желании увеличить с пяти до 51 ( как на рис.7-22) или даже до 5001 (на графике они просто сольются в сплошную линию), изменив единственное число в ячейке...
Вобщем, там аж на 4 страницах, все перепечатывать ломы - вот тебе результирующий файл, надеюсь разберешься. :)
Если что - [email]sulthoma@mail.ru[/email]
Вобщем, там аж на 4 страницах, все перепечатывать ломы - вот тебе результирующий файл, надеюсь разберешься. :)
Если что - [email]sulthoma@mail.ru[/email]
Не знал про такую хорошую штуку в Экселе.
Хотя обычно мне приходится строить график не по функциям, а уже по готовым значениям.
А как этот график вообще построить, я не понял.
Из меню? Проясни. Другим, наверное, тоже интересно.
Честно говоря не разобрался, и не увидел в том файле ни строчки кода. И откуда в график приходят значения типа =ГрафикПоФормулеМассива.xls!x
я тоже не понимаю. Если не трудно , можно поподробнее ( а может это не совсем тот файл)
Меню\Вставка\Имя\Присвоить
Там увидишь список имен, заданных в файле.
Несколько стандартных, именующих ячейки - типа "а" это имя ячейки B1.
А два - хитрых, я сам когда прочел - часа два только врубался. А потом полдня восхищался - изящно сделано :).
Короче, два имени в этом файле не имеют ссылок на ячейки - это X и Y.
Вместо ссылок им сразу присваиваются формулы:
Х = (СТРОКА(СМЕЩ(n;0;0;n+1))-СТРОКА(n))/n*(Конец-Начало)+Начало
Y = a*x^3+b*x^2+c_*x+d
Соответственно, все буквы здесь - имена ячеек, они обозначены на листе. Кроме Х, разумеется: Х вычисляется раньше и затем подставляется в формулу расчета Y. А при создании графика ты указываешь в качестве значений Х и Y имена этих
переменных. Вернее, по стандартной терминологии - поименованных формул массива.
Хитрость в том, что:
На следующем шаге числа приводятся к нужному масштабу. Разделите их на значение n (чтобы они были заключены в пределах от 0 до 1), а затем умножьте на разницу между начальным и конечным значениями...
... Наконец, последовательность чисел необходимо сдвинуть к начальному значению, прибавив число "Начало"..."
Вот.
P.S. Обратите внимание - в формуле Y имя ячейки "С" задано с символом подчеркивания. Это для того чтобы не путалась под ногами адресация ссылок в стиле "R1C1".
в строчке (**),говорит "Нельзя установить свойство 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