如何以编程方式在Excel中的图表中使用每个第n个单元格

时间:2014-01-30 14:56:17

标签: excel vba excel-vba

输入文件大约有500,000行。我要做的主要是在整个细胞范围内仅绘制500,000个细胞中的10,000个细胞。有没有办法以编程方式使用图表中的每个第50个单元格?如果没有,是将每个第50个单元复制到新位置的最佳方法,然后绘制?

2 个答案:

答案 0 :(得分:2)

对于相对较小的数据,可以将x和y - 数据设置为单独的单元格列表。

这最好在VBA中以编程方式完成。电子表格重命名为“A'保持数据字符串尽可能小。循环中tostep的值可能会有所不同:

[...]
Dim xS As String
Dim yS As String
xS = "="
yS = "="

For i = 1 To 23000 step 50
    If i > 1 Then
        xS = xS & ","
        yS = yS & ","
    End If
    xS = xS & "A!$A$" & CStr(i)
    yS = yS & "A!$B$" & CStr(i)
Next

ActiveChart.FullSeriesCollection(1).XValues = xS
ActiveChart.FullSeriesCollection(1).Values = yS
[...]

然而,我不确定XValues String的最大长度是多少。首次测试显示至少4032个字符。这将为您带来每个Chart-SeriesCollection大约350到450个值。如果添加大约30个系列集合,这可能是保存10000个值对的解决方案。 如果您的日期发生变化,这有点麻烦,只值得。

如果您打算绘制静态数字列表,最好以编程方式将单元格复制到第二个电子表格,然后绘制它们:

[...]
for i = 1 to 500000 step 50
   destinationSheet.range(1,i/1000).value = sourceSheet.range(1,i).value
next
[...]

答案 1 :(得分:0)

如果您不想沿着VBA路线走下去,可以利用另一张表中的OFFSET功能从指定目标中提取x行并进一步向下复制。您可能需要帮助列才能实现此目的。

例如,我可能会有类似=OFFSET($A$1,B1, 0)的内容,其中B列中的值以50为增量增加...这可能是另一种查看方式。然后,您可以将图表挂钩到此数据。