5 votes

graphique à colonnes empilées pour deux ensembles de données - Excel

Je suis nouveau ici, bien que j'aie déjà parcouru le blog à plusieurs reprises.

Je me demande s'il existe un moyen (en utilisant également VBA, si nécessaire) de créer un graphique à colonnes empilées affichant deux ensembles de données différents dans MS Excel 2016.

En cherchant un peu, j'ai vu que la même question avait reçu une réponse positive en travaillant avec Google Charts (voir le fil de discussion). graphique à colonnes empilées pour deux ensembles de données - Google Charts )

En gros, j'ai deux tableaux concernant deux pays avec des données mensuelles pour différentes années. Un échantillon :

Excel sheet sample

Le résultat que je veux est de montrer les années sur l'axe horizontal et d'avoir un pays représenté dans une colonne empilée qui empile les données mensuelles. sur le côté de la colonne de l'autre pays (comme le graphique réalisé à l'aide de Google Charts, comme expliqué dans la rubrique le fil lié ci-dessus .

La solution devrait ressembler à cet échantillon :

wanted solution

Je n'ai pas trouvé de réponse à cette question, pouvez-vous m'aider ?

Veuillez également noter que j'ai des compétences très basiques en VBA, c'est-à-dire que je peux plus ou moins comprendre un code lorsque je le lis, mais je ne suis pas capable d'en écrire un moi-même.

Merci beaucoup à tous

1voto

nicolas dejean Points 331

Je vois que vous avez lié une question de stackoverflow où ils utilisent javascript pour créer un graphique avec google charts. Je pense que ce langage est le meilleur moyen de créer des graphiques complexes comme le vôtre.

Vous avez mentionné que vos compétences en codage n'étaient pas bonnes en vba, je ne sais pas si c'est la même chose avec javascript mais je vais essayer de décrire mon code du mieux que je peux.

Voici un code fonctionnel que j'ai écrit pour vous :

https://www.funfun.io/1/#/edit/5a73067991f44418b7b84218

Comme vous pouvez le constater, pour réaliser cet exemple, j'ai utilisé un éditeur en ligne avec une feuille de calcul intégrée. J'y entre mes données et j'y accède avec mon code en utilisant un fichier JSON, il s'agit du fichier short sous le fichier Paramètres :

{
    "data": "=A1:D27"
}

Après avoir obtenu l'accès à mes données, je les stocke dans des variables locales, vous pouvez le voir dans le fichier script.js fichier. J'ai écrit quelques commentaires pour que vous sachiez quelle variable est quoi. Je lance mes données avec $internal.data C'est l'endroit où les données de la feuille de calcul sont stockées de la colonne A à D, ligne 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
      ]);
  }
}

Après avoir stocké mes données correctement, je peux faire mon graphique avec une bibliothèque javascript, j'ai utilisé Highcharts (assez similaire à google charts), il a une bonne documentation avec beaucoup de exemples .

Je mets toutes les données et quelques options dans une variable de série qui utilise le format de highcharts, comme ceci :

 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

Je différencie les deux pays en mettant une valeur différente dans le champ stack . Cette variable me permet de créer un graphique à barres empilées avec plusieurs barres ayant la même étiquette d'axe.

Une fois que c'est fait, vous obtenez un graphique comme celui-ci :

all labels

Si vous ne voulez pas afficher tous les mois, vous pouvez cliquer sur les étiquettes des mois que vous ne voulez pas et elles disparaîtront, comme ceci :

few labels

Une fois que vous avez construit votre diagramme, vous pouvez le charger dans Excel en utilisant une commande un module complémentaire pour Excel appelé Funfun Il suffit de coller l'URL de l'éditeur en ligne dans l'add-in. Voici à quoi cela ressemble avec mon exemple :

final

Vous pouvez ensuite enregistrer le graphique dans un autre format en cliquant sur le bouton en haut à droite du graphique :

save chart

J'espère que cela vous aidera, si je n'ai pas été clair dans mon explication, n'hésitez pas à commenter :)

Divulgation : Je suis un développeur de Funfun.

1voto

Dan Points 18107

Utilisez simplement le graphique à barres empilées normal. Si vous souhaitez regrouper les piles, laissez des colonnes vides dans votre tableau :

enter image description here

Avec un peu de formatage, vous pouvez obtenir presque exactement ce que vous avez. La seule partie qui serait un défi est d'obtenir les étiquettes d'année comme axe horizontal secondaire. Pour ce faire, j'ai simplement créé une autre série de 0 avec les années comme étiquettes et je l'ai ajoutée comme axe secondaire (ajoutez également un axe horizontal secondaire), puis sur l'axe vertical secondaire, choisissez de le faire " traverser l'axe " à la valeur 0. Après une petite mise en forme, vous pouvez obtenir exactement ce que vous voulez :

enter image description here

Pas besoin de VBA et encore moins de JavaScript !

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X