2014-08-01 2 views
0

Я ищу, чтобы перебрать ячейки и построить диапазон для графика. Моя основная проблема заключается в том, что я не могу понять, как включить «i» в диапазон. Пример:Цитирование по ячейкам, построение диапазона в VBA

Dim name As String 
Dim newChart as Chart 
Dim i as Integer 
Set newChart = Charts.add  

For i = 1 To 20 

    accName = Range("C" & i).Value   'I understand why this works. 

    With newChart 
     .ChartType = xlColumnClustered 
     .SeriesCollection.NewSeries  
     .SeriesCollection(1).Name = accName 
     .SeriesCollection(1).Values = wb.Worksheets("Summary-Account").Range("E&i:G&i, I&i:K&i, M&i:O&i, Q&i:S&i")   'How can I get this to work? 
     .SeriesCollection(1).XValues = wb.Worksheets("Summary-Account").Range("E3:G3, I3:K3, M3:O3, Q3:S3") 
    End With 

    i = i + 1 

Loop 
+0

Я не понимаю, почему вы создаете отдельную диаграмму 'newChart = Charts.Add' и затем создавая в цикле 20 разных имен ('accName'). Что именно вы пытаетесь достичь? –

+0

@AlexP Я думаю, что он хочет создать 20 различных кривых на графике. – Sifu

+0

О, а также 'SeriesCollection()' начинается с «0», как и каждый массив в VB. – Sifu

ответ

2

Вы, вероятно, нужно иметь:

.SeriesCollection(1).Values = wb.Worksheets("Summary-Account").Range("E" & i & ":G" & i & ", I" & i & ":K" & i & ", M" & i & ":O" & i & ", Q" & i & ":S" & i) 

Не самая ясная линия, но должна дать вам образец. Существуют и другие проблемы, такие как необходимость «Next i» вместо «Loop» и i i i i i 1, но на моем компьютере это дало мне график с несколькими сериями на нем.

3
  1. Вы сделать не приращение вручную i.
    Функция for loop уже делает это за вас.
    So удалить, который i = i + 1.

  2. Теперь, чтобы сделать вашу работу Range, вам понадобится ее «», чтобы быть чем-то вроде этого: Range("E" & i & ":G" & i). Я не совсем понимаю, чего вы пытаетесь достичь, пытаясь взять данные из 6 разных столбцов. См. range для получения дополнительной информации.

+0

Что делать, если я хотел каждый раз увеличивать i на 6? Каков синтаксис для этого? – Guiltyberto

+0

@Guiltyberto Это было бы 'для i = 1 до 20 Шаг 6' – Sifu

0

использование Next i вместо Loop; и избавиться от этого i = i+1. Кроме того, использование "E" & i & ":G" & i вместо "E&i:G&i"

один шаг дальше, в УВА

Dim i as double 
For i = 1 to 100 Step 10 '<= Step 10 means when updating i, i = i + 10, and default value would be 1 
Loop '<=breaks here, compile error is expected. 

это даже не действует в синтаксисе, ключевое слово Loop связано с другим ключевым словом Do и For связан с Next

+1

Это не отвечает на его вопрос, хотя .. – Sifu

+0

o, не проверял крайнюю правую сторону .. в любом случае, с точки зрения проблемы с ур, если u go «E & i: G & i, I & i: K & i, M & i: O & i, Q & i: S & i», vba не узнает число i. то, что он читает, является чем-то вроде Ei: Gi, что недействительно с точки зрения синтаксиса, а не то, что вы пытаетесь сделать (E1: G1 - это то, что вы ищете). он будет рассматривать его как строку i. с учетом сказанного, если вы хотите использовать номера и обновлять их, вы должны были сделать что-то вроде «E» & i & «: G» & i –

+0

Что делать, если бы я хотел: 'Dim i as Integer Do While Range («C» & i).Значение <> "" 'здесь i = i + 6 Loop' – Guiltyberto

0

Попробуйте

.SeriesCollection(1).Values = Range("E1").Resize(20,1).Value 

это скопировать все значения в массив для использования в коллекции серии

Смежные вопросы