Условно добавить изображения в пузырьковую диаграмму?

376
smac

Мне нужно массово производить пузырьковые диаграммы для большого набора групп пиров, где каждая диаграмма показывает анонимные данные группы пиров, но выделяет интересующую группу с логотипом своей команды. Я хотел бы автоматизировать это с VBA, но мне интересно, можно ли вообще условно добавить картинку к пузырю интереса на каждом графике? Прямо сейчас это ручной процесс и занимает довольно много времени.

Например, на диаграмме 1 команда A является интересующей командой и имеет свой логотип на своем пузыре, в то время как остальные пузыри имеют одинаковый сплошной цвет. На диаграмме 2 команда B - это команда интересов и т. Д.

1
попробуйте захватить макрос, пока вы делаете это вручную. Если вы можете записать это, а также можете четко определить условия, то, безусловно, возможно сделать это с VBA. Máté Juhász 7 лет назад 0
Спасибо друг. Я пробовал это, но он выбирает интересный пузырь, чтобы нанести логотип, который меня вешает. Из макроса пузырьки выглядят так, как будто им присваивается номер, но даже если бы я жестко закодировал числа в VBA, мне пришлось бы каждый месяц повторять его, чтобы учесть новые и изменяющиеся данные. smac 7 лет назад 0
опубликовать макрос и некоторые примеры данных, и, возможно, мы сможем помочь исправить это. Máté Juhász 7 лет назад 0

2 ответа на вопрос

0
Captain Kirk

Я не могу оставить комментарий. Но отчасти проблема в том, что вы каждый раз регенерируете данные и графики. Таким образом, решение для использования обычно является «косвенным». Решите более простую проблему.

Не могли бы вы иметь скрытый лист, на котором есть все логотипы. Рядом с логотипами находится номер, соответствующий этому логотипу (логотип или имя файла логотипа).

Затем напишите макрос, который, если эти числа верны, правильно присваивает нужный логотип (т. Е. Вы просто обновляете этот лист и используете этот лист в качестве массива в VBA).

Наконец, если вы отправляете лист, вы обновляете только ОДИН логотип, то я бы включил это либо в часть имени файла (и использовал бы его в формуле), либо поместил бы его в более заметную ячейку. Тогда ваша связь сделана. Одно изменение в этой ячейке, нажмите макрос и все готово.

Не видя немного больше кода, с которым вы работаете. Я не могу дать больше помощи.

Спасибо за это, @captainkirk! Я вижу, куда ты идешь с этим и попробую. Я еще не начал VBA, но планирую на этой неделе и буду следить за этим. smac 7 лет назад 0
0
smac

Я понял это. Началось с того, что мне нужно было настроить мои данные с двумя определенными рядами, где один ряд представляет интересующую группу, а второй - группы пиров, а затем условно заполнить ячейки в моей таблице данных на основе группы. Настройка потребовала много времени, чтобы разобраться и выглядит исчерпывающей в инструкциях ниже, но на самом деле это не так уж плохо.

Snapshot of table setup

Все, выделенное синим цветом, является формулой, поэтому вот как я это сделал:

  1. В столбце B я использовал формулу, чтобы определить, какой ряд какой: = IF (A5 <> A $ 1, «Peers», «Group»)
  2. Введены мои значения X и Y (столбцы C и D).
  3. Установите мой размер пузырька (столбец E) для автоматической настройки в зависимости от серии: = IF (A5 = A 1 000 250 долл. США)
  4. Используются столбцы F и G для обрезки десятичных разрядов.
  5. Столбцы с H по L отражают фактическую серию данных, основанную на том, является ли группа равноправной или интересующей группой.
  6. X всегда будут оставаться одинаковыми, поэтому я связал столбец H с исходным значением оси X: = C5
  7. Столбец I получает соответствующее значение Y, если это группа пиров: = IF ($ B5 = $ I3, $ D5, NA ())
  8. Столбец J устанавливает размер пузыря в группе равных: = IF (ISNA ($ I5), NA (), $ E5)
  9. Столбец K выводит соответствующее значение Y, если это интересующая группа: = IF ($ B5 = $ K $ 3, $ D5, NA ())
  10. В столбце L задается размер пузырька группы интересов: = IF (ISNA ($ K5), NA (), $ E5)
  11. Столбец M устанавливает все размеры пузырьков и используется для окончательного создания диаграммы, где все группы и их логотипы отображаются вместе.
  12. Ячейки O4 (= VLOOKUP (A1, логотипы! A: B, 2, FALSE)) и P4 (= IF (O4 = 1, «group1», IF (O4 = 2, «group2», IF (O4 = 3, « group3 ", IF (O4 = 4," group4 "))))) определить и вытащить правильный логотип при выборе группы интересов.

Затем мне пришлось настроить и связать все свои логотипы / изображения на отдельной вкладке («Логотипы»). YouTube Оз Дю Солей на YouTube «Выберите изображение на основе значения ячейки» был очень полезен для достижения этой цели. У меня недостаточно репутации, чтобы разместить прямую ссылку.

Я создал и отформатировал свои пузырьковые диаграммы, а затем выбрал необходимые данные для каждой серии, используя столбцы H (ось X), I / K (ось Y) и J / L (ось Z для размера пузырьков).

Для моей полной диаграммы логотипа группы мне понадобилась только одна серия, потому что все пузырьки были бы одинакового размера. Я использовал столбцы C, D и M для осей X, Y и Z соответственно. Затем я применил логотип каждой группы к соответствующим пузырькам.

Сам код оказался довольно простым после установки:

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 

Populated bubble chart

Я решил не использовать метки на графике, потому что попытка их динамического позиционирования не стоила усилий. Вместо этого я начал создавать связанные текстовые поля под диаграммой.

Надеюсь, это поможет другим; это, безусловно, экономит время благодаря ручным обновлениям.

Похожие вопросы