我看到你链接了一个 stackoverflow 问题,他们使用 javascript 创建一个带有谷歌图表的图表。我认为这种语言是创建像您这样的复杂图表的最佳方式。
您提到您的编码技能在vba中不好,我不知道是否与javascript相同,但我会尽力描述我的代码。
这是我为您编写的工作代码:
https://www.funfun.io/1/#/edit/5a73067991f44418b7b84218
如您所见,为了制作这个示例,我使用了带有嵌入式电子表格的在线编辑器。我在其中输入我的数据,然后使用 JSON 文件使用我的代码访问它,它是 Settings 下的 short 文件:
{
"data": "=A1:D27"
}
在我访问我的数据后,我将其存储在局部变量中,您可以在 script.js 文件中看到它。我写了一些 cmets,所以你知道哪个变量是什么。我用$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(非常类似于 google 图表),它有一个很好的 documentation 和很多 examples。
我将所有数据和一些选项放在一个使用高图表格式的系列变量中,如下所示:
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 的开发者。