【问题标题】:Looping through cells, building a range in VBA循环遍历单元格,在 VBA 中构建范围
【发布时间】:2014-09-25 02:14:09
【问题描述】:

我希望遍历单元格并为图表构建一个范围。我的主要问题是我无法弄清楚如何将“i”纳入范围。示例:

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

【问题讨论】:

  • 我不明白您为什么要创建一个图表 newChart = Charts.Add,然后在循环中创建 20 个不同的名称 (accName)。你到底想达到什么目的?
  • @AlexP 我认为他想在图表上创建 20 条不同的曲线。
  • 哦,还有,SeriesCollection() 从“0”开始,就像 VB 中的每个数组一样。
  • 你知道如何在范围内使用.Resize().Offset() 来定位单元格吗?

标签: vba excel range


【解决方案1】:
  1. 不要手动增加i
    函数for loop 已经为您完成了。
    所以删除那个i = i + 1

  2. 现在,要使您的Range 工作,您需要它的“”是这样的:Range("E" & i & ":G" & i)。我不太明白您尝试从 6 个不同列中获取数据的目的是什么。有关更多信息,请参阅range

【讨论】:

  • 如果我想每次都将 i 增加 6 怎么办?它的语法是什么?
  • @Guiltyberto 那是For i = 1 To 20 Step 6
【解决方案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+1,但在我的计算机上,这给了我一个包含多个系列的图表。

【讨论】:

    【解决方案3】:

    试试

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

    这会将所有值复制到一个数组中以用于系列集合

    【讨论】:

      【解决方案4】:

      使用Next i 代替Loop;并摆脱那个i = i+1。 另外,使用"E" & i & ":G" & i 而不是"E&i:G&i"

      更进一步,在 vba 中

      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相关联,而ForNext相关联

      【讨论】:

      • o,没有检查最右边..无论如何,就你的问题而言,如果你去“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
      • 如果我想要怎么办:Dim i as Integer Do While Range("C" &amp; i).Value &lt;&gt; "" 'stuff here i = i + 6 Loop
      • 但我需要Do While
      猜你喜欢
      • 2019-06-05
      • 2018-05-11
      • 1970-01-01
      • 1970-01-01
      • 2015-01-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多