Adicionar imagens ao gráfico de bolhas condicionalmente? [fechadas]

1

Eu preciso produzir em massa gráficos de bolhas para um grande conjunto de grupos de pares, onde cada gráfico mostra dados de grupos de pares anônimos, mas destaca o grupo de interesse com o logotipo de sua equipe. Eu gostaria de automatizar isso com o VBA, mas estou querendo saber se é possível adicionar uma imagem condicionalmente à bolha de interesse em cada gráfico? No momento, é um processo manual e leva bastante tempo.

Por exemplo, no gráfico 1, a Equipe A é a equipe de interesse e tem seu logotipo em sua bolha, enquanto as bolhas restantes são da mesma cor sólida. No gráfico 2, o Time B é a equipe de interesse, etc.

    
por smac 19.08.2016 / 22:53

2 respostas

0

Não posso postar um comentário. Mas parte do problema é que você está regenerando os dados e gráficos todas as vezes. Portanto, a solução a ser usada é geralmente "indireta". Resolva um problema mais simples.

Você poderia ter uma planilha oculta que tenha todos os logotipos nela. Ao lado dos logotipos está o número que corresponde a esse logotipo (seja o logotipo ou o nome do arquivo do logotipo).

Em seguida, escreva uma macro que, se esses números estiverem corretos, atribui o logotipo desejado adequadamente (ou seja, você apenas atualiza essa folha e usa essa folha como sua matriz no VBA).

Finalmente, se quando você enviar a planilha, você só atualiza um logotipo, então eu faria isso parte do nome do arquivo (e usá-lo em uma fórmula) ou colocá-lo em uma célula mais visível. Então sua ligação está feita. Uma mudança nessa célula, acertar a macro e você está pronto para ir.

Sem ver um pouco mais do código com o qual você está trabalhando. Eu não posso dar mais ajuda.

    
por 22.08.2016 / 05:46
0

Eu descobri isso. Tudo começou com a necessidade de configurar meus dados com duas séries definidas, em que uma série é o grupo de interesse e a segunda é os grupos de peers e, em seguida, preenche condicionalmente células na minha tabela de dados com base no grupo. O set-up levou muito tempo para descobrir e parece exaustivo nas instruções abaixo, mas na verdade não é tão ruim assim.

Tudodestacadoemazuléumafórmula,entãoaquiestácomoeufiz:

  1. NacolunaB,useiumafórmulaparaidentificarquaissériessão:=IF(A5<>A$1,"Pares", "Grupo")
  2. Insirai meus valores X e Y (colunas C e D).
  3. Defina o tamanho da minha bolha (coluna E) para ajustar automaticamente com base na série: = SE (A5 = A $ 1,1000,250)
  4. Utilizou as colunas F e G para aparar casas decimais.
  5. As colunas H a L refletem a configuração real da série de dados com base no fato de o grupo ser um par ou o grupo de interesse.
  6. Os Xs sempre permanecerão os mesmos, então eu vinculei a coluna H ao valor do eixo X original: = C5
  7. Coluna Eu puxo o valor Y apropriado se for um grupo de pares: = SE ($ B5 = $ I3, $ D5, NA ())
  8. A coluna J define o tamanho da bolha do grupo de pares: = SE (ISNA ($ I5), NA (), $ E5)
  9. A coluna K puxa o valor Y apropriado se for o grupo de interesse: = IF ($ B5 = $ K $ 3, $ D5, NA ())
  10. A coluna L define o tamanho do grupo de interesse: = SE (ISNA ($ K5), NA (), $ E5)
  11. A coluna M define todos os tamanhos de bolha como iguais e é usada para a criação do gráfico final, em que todos os grupos e seus logotipos são exibidos juntos.
  12. Células O4 (= VLOOKUP (A1, Logos! A: B, 2, FALSE)) e P4 (= IF (O4 = 1, "grupo1", IF (O4 = 2, "grupo2", IF (O4 = 3, "group3", IF (O4 = 4, "group4"))))) identifique e puxe o logotipo correto quando o grupo de interesse for selecionado.

Eu então tive que configurar e vincular todos os meus logotipos / imagens em uma guia separada ("Logos"). O vídeo do YouTube de Oz du Soleil sobre "Selecione uma imagem baseada em um valor de célula" foi imensamente útil para fazer isso. Eu não tenho reputação suficiente para postar o link direto.

Eu criei e formatei meus gráficos de bolha e selecionei os dados conforme necessário para cada série usando as colunas H (eixo X), I / K (eixo Y) e J / L (eixo Z para tamanho de bolha).

Para o gráfico do meu logotipo completo do grupo, eu precisava de apenas uma série porque todas as bolhas seriam do mesmo tamanho. Eu usei as colunas C, D e M para os eixos X, Y e Z, respectivamente. Em seguida, apliquei o logo de cada grupo às suas respectivas bolhas.

O próprio código acabou sendo bem direto após a configuração:

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

Optei contra o uso de rótulos no gráfico porque tentar posicioná-los dinamicamente não parecia valer o esforço. Em vez disso, fui criar caixas de texto vinculadas abaixo do gráfico.

Espero que isso seja de alguma ajuda para os outros; é certamente uma grande economia de tempo de atualizações manuais.

    
por 25.08.2016 / 18:34