Ich habe es herausgefunden. Es begann damit, dass ich meine Daten mit zwei definierten Reihen einrichten musste, wobei eine Reihe die interessierende Gruppe und die zweite die Peergruppen ist. Anschließend sollten die Zellen in meiner Datentabelle abhängig von der Gruppe bedingt gefüllt werden. Das Setup hat viel Zeit in Anspruch genommen und ist in der folgenden Anleitung erschöpfend, aber eigentlich ist es nicht so schlimm.
Alles, was blau hervorgehoben ist, ist eine Formel, also habe ich es so gemacht:
- In Spalte B habe ich anhand einer Formel ermittelt, welche Serie welche ist: = IF (A5 <> A $ 1, "Peers", "Group")
- Ich habe meine X- und Y-Werte eingegeben (Spalten C und D).
- Stellen Sie meine Blasengröße (Spalte E) so ein, dass sie anhand der Serie automatisch angepasst wird: = IF (A5 = A $ 1,1000,250)
- In den Spalten F und G werden Dezimalstellen getrimmt.
- Die Spalten H bis L spiegeln den tatsächlichen Aufbau der Datenreihe wider, je nachdem, ob es sich bei der Gruppe um einen Peer oder um die interessierende Gruppe handelt.
- Die X-Werte bleiben immer gleich, sodass die Spalte H mit dem ursprünglichen Wert der X-Achse verknüpft wurde: = C5
- Spalte I zieht den entsprechenden Y-Wert, wenn es sich um eine Vergleichsgruppe handelt: = IF ($ B5 = $ I3, $ D5, NA ())
- Spalte J legt die Größe der Vergleichsgruppenblase fest: = IF (ISNA ($ I5), NA (), $ E5)
- Spalte K zieht den entsprechenden Y-Wert, wenn es sich um die interessierende Gruppe handelt: = IF ($ B5 = $ K $ 3, $ D5, NA ())
- Spalte L gibt die Gruppe der Interessenblasengröße an: = IF (ISNA ($ K5), NA (), $ E5)
- Spalte M setzt alle Blasengrößen gleich und wird für die endgültige Diagrammerstellung verwendet, in der alle Gruppen und ihre Logos zusammen angezeigt werden.
- Zellen O4 (= VLOOKUP (A1, Logos! A: B, 2, FALSE)) und P4 (= IF (O4 = 1, "group1", IF (O4 = 2, "group2", IF (O4 = 3, " group3 ", IF (O4 = 4," group4 "))))) identifizieren und ziehen Sie das richtige Logo ein, wenn die interessierende Gruppe ausgewählt ist.
Ich musste dann alle meine Logos / Bilder auf einer separaten Registerkarte ("Logos") einrichten und verlinken. Das YouTube-Video von Oz du Soleil über "Wählen Sie ein Bild basierend auf einem Zellenwert" war immens hilfreich, um dies zu erreichen. Ich habe nicht genug Ruf, um den direkten Link zu posten.
Ich erstellte und formatierte meine Blasendiagramme und wählte die Daten nach Bedarf für jede Serie aus, wobei die Spalten H (X-Achse), I / K (Y-Achse) und J / L (Z-Achse für die Blasengröße) verwendet wurden.
Für mein vollständiges Gruppenlogo brauchte ich nur eine Serie, da alle Blasen dieselbe Größe hätten. Ich habe die Spalten C, D und M für die X-, Y- und Z-Achse verwendet. Ich habe dann jedes Gruppenlogo auf die jeweiligen Blasen angewendet.
Der Code selbst war nach dem Setup ziemlich unkompliziert:
Dim i As Long Dim iLastRow As Long Dim Cells As Range 'This section looks up each group name on the tab and cycles through the loop Application.ScreenUpdating = False With ActiveSheet iLastRow = .Cells(.Rows.Count, "A").End(xlUp).Row For i = 4 To iLastRow - 1 'Group names start in A5 'Selects, copies, and pastes the next group name in the list Sheets("Groups").Select ActiveSheet.Cells(i + 1, 1).Copy Range("A1").Select Selection.PasteSpecial paste:=xlPasteValues 'Selects, copies, and pastes the group logo onto the bubble ActiveSheet.Shapes.Range(Array("Picture 7")).Select Selection.CopyPicture xlScreen, xlPicture ActiveSheet.ChartObjects("Chart 6").Activate ActiveChart.FullSeriesCollection(2).Select Selection.paste 'Variables needed for directory and file names GroupName = Sheets("Groups").Range("A1") yearmo = Sheets("Groups").Range("A2") 'Will create a new folder for the final images if it doesn't already exist If Len(Dir("DirPath\" & yearmo, vbDirectory)) = 0 Then MkDir "DirPath\" & yearmo End If 'Set up image file names Dim NewFileName As String NewFileName = "\" & yearmo & " - " & GroupName & " - X_Y.jpg" 'Selects and saves the bubble chart as a JPG ActiveChart.ChartArea.Select ActiveChart.Export "DirPath\" & yearmo & NewFileName Next i End With 'After all individual bubble have been created, need to 'set up state file name to generate image with all logos for the state Dim StateFileName As String StateFileName = "\" & yearmo & " - STATE - X_Y.jpg" 'Selects and saves the state bubble chart as a JPG ActiveSheet.ChartObjects("Chart 4").Activate ActiveChart.Export "DirPath\" & yearmo & StateFileName
Ich habe mich gegen die Verwendung von Labels im Diagramm entschieden, weil der Versuch, sie dynamisch zu positionieren, den Aufwand nicht wert war. Ich habe stattdessen mit der Erstellung verknüpfter Textfelder unterhalb des Diagramms begonnen.
Hoffentlich hilft dies anderen; Es ist sicherlich eine enorme Zeitersparnis durch manuelle Updates.