我是新来的,虽然我以前曾多次浏览博客。
我想知道是否有某种方式(如果需要也使用VBA)来创建在MS Excel 2016中显示两个不同数据集的堆积柱形图。
环顾四周,我看到同样的问题在使用谷歌图表时得到了肯定的答案(这里是主题stacked column chart for two data sets - Google Charts)
基本上,我有两个表格,每个国家/地区有两个不同年份的月度数据。样品:
我想要的输出是在水平轴上显示年份,并且在一个堆叠列中显示一个国家/地区,其中堆积了另一个国家/地区列的的月度数据(如图表所示)使用Google图表制作,如the thread linked above。
中所述解决方案应该看样本:
我没有找到这个问题的答案,请你提供一些帮助吗?
请注意我在VBA中有非常基本的技能,即我在阅读时可以或多或少地理解代码,但我自己无法编写代码。
非常感谢大家
答案 0 :(得分:1)
我看到你链接了一个stackoverflow问题,他们使用javascript来创建一个带有谷歌图表的图表。我认为这种语言是创建像你这样的复杂图表的最佳方式。
你提到你的编码技巧在vba中并不好,我不知道javascript是否相同,但我会尽力描述我的代码。
以下是我为您编写的工作代码:
https://www.funfun.io/1/#/edit/5a73067991f44418b7b84218
您可能已经看到,为了制作此示例,我使用了带有嵌入电子表格的在线编辑器。我在其中输入数据并使用JSON文件使用我的代码访问它,它是设置下面的short
文件:
{
"data": "=A1:D27"
}
在我获得对数据的访问权限后,我将其存储在本地变量中,您可以在script.js
文件中看到它。我写了一些评论,所以你知道哪个变量是什么。我用$internal.data
抛出我的数据,这是电子表格中的数据从A列存储到D,第1行到第27行:
for (var i = 0; i < $internal.data.length; i++) // $internal.data.length = 27 in this example
{
if (i == 0 || i == 14) {
country.push($internal.data[i][0]);
continue;
}
if (i > 0 && i < 13) {
months.push($internal.data[i][0]); // months
dataA.push(
[
parseInt($internal.data[i][1]), // value 2015 countryA
parseInt($internal.data[i][2]), // value 2016 countryA
parseInt($internal.data[i][3]) // value 2017 countryA
]);
}
if (i > 13 && i < 27) {
dataB.push(
[
parseInt($internal.data[i][1]), // value 2015 countryB
parseInt($internal.data[i][2]), // value 2016 countryB
parseInt($internal.data[i][3]) // value 2017 countryB
]);
}
}
正确存储数据后,我可以使用javascript库创建我的图表,我使用的是Highcharts(非常类似于谷歌图表),它有一个很好的documentation,有很多examples。
我将所有数据和一些选项放在一个使用highcharts格式的系列变量中,如下所示:
var series = [];
// We enter the data we need in series
for(var i = 0; i < months.length; i++) {
series.push({
name: months[i] + " " + country[0],
type: 'column',
color: Highcharts.getOptions().colors[i+7],
data: dataA[i],
stack: country[0] // country A
});
series.push({
name: months[i] + " " + country[1],
type: 'column',
color: Highcharts.getOptions().colors[i+7],
data: dataB[i],
stack: country[1] //country B
});
}
...
// we enter series in the highchart chart
series: series
我通过在stack
中添加不同的值来区分这两个国家/地区。此变量允许我创建一个堆叠条形图,其中多个条形图具有相同的轴标签。
完成此操作后,您将获得如下图表:
如果您不想显示所有月份,您可以点击您不想要的月份标签,它会消失,如下所示:
构建图表后,可以使用excel add-in called Funfun将其加载到Excel中。您只需将加载项中的在线编辑器的URL粘贴即可。以下是我的示例:
然后,您可以点击图表的右上角以不同的格式保存图表:
我希望这有帮助,如果我在我的解释中不清楚,请毫不犹豫地发表评论:)
披露:我是Funfun的开发者。
答案 1 :(得分:1)