Şartlı olarak balon grafiğine resim ekleme? [kapalı]


1

Her tablonun anonimleştirilmiş eş grubu verilerini gösterdiği, ancak ilgilendikleri grubu takım logosu ile vurgulayan çok sayıda eş grup için kabarcık grafiği üretmem gerekiyor. Bunu VBA ile otomatikleştirmek isterdim, ancak her çizelgedeki ilgi balonuna koşullu olarak resim eklemenin mümkün olup olmadığını merak ediyorum. Şu anda bu manuel bir işlem ve oldukça fazla zaman alıyor.

Örneğin, grafik 1'de, A Takımı ilgilenen takımdır ve geri kalan kabarcıklar aynı düz renkte iken logolarında kabarcıkları bulunur. Grafik 2'de, B Takımı ilgi alanı olan takım vb.


Makroyu el ile yaparken yakalamaya çalışın. Bunu kaydedebiliyorsanız ve koşulları açıkça tanımlayabiliyorsanız, VBA ile yapmanız kesinlikle mümkündür.
Máté Juhász

Teşekkürler dostum. Bunu denedim, ama beni asan logonun uygulanacağı ilgi balonunu seçiyor. Makrodan, baloncuklara bir numara atanmış gibi görünüyor, ancak VBA'daki sayıları zorla kodlasam bile, yeni ve değişen verileri hesaba katmak için her ay yeniden yapmam gerekiyordu.
smac

Makroyu ve bazı örnek verileri gönderin; belki düzeltmemize yardımcı olabiliriz.
Máté Juhász

Yanıtlar:


0

Yorum gönderemiyorum. Ancak konunun bir parçası, her seferinde verileri ve grafikleri yeniden üretiyor olmanızdır. Yani kullanılacak çözüm genellikle "dolaylı" dır. Daha basit bir problemi çöz.

Üzerinde tüm logoların bulunduğu gizli bir sayfa alabilir miydin? Logoların yanında, bu logoya karşılık gelen numara (logo veya logonun adı).

Ardından, bu sayılar doğruysa, istediğiniz logoyu doğru şekilde atayan bir makro yazın (yani, yalnızca o sayfayı güncelleyin ve bu sayfayı VBA'daki diziniz olarak kullanın).

Son olarak, sayfayı gönderdiğinizde, yalnızca bir ONE logosunu güncellerseniz, o zaman dosya adının bir kısmını (ve bir formülde kullanırsınız) yapar veya daha görünür bir hücreye koyardım. O zaman bağlantın bitti. O hücrede bir değişiklik, makroyu vur ve gitmen iyi olur.

Çalıştığınız kodun biraz daha fazlasını görmeden. Daha fazla yardım edemiyorum.


Bunun için teşekkürler, @captainkirk! Nereye gittiğini görüyorum ve deneyeceksin. VBA'yı henüz başlatmadım, ancak bu haftaya kadar plan yapıyorum ve sonra da takip edeceğim.
smac

0

Anladım. Verilerimi, tanımlanmış iki dizi ile kurmaya ihtiyaç duymaya başladı; burada, bir seri ilgilenilen grup ve ikincisi de eş gruplar ve ardından koşullu olarak hücreleri benim veri tabanımdaki gruba dayanarak doldurmak zorunda kaldı. Kurulum, aşağıdaki talimatlarda anlaşılması ve ayrıntılı görünmesi için çok zaman aldı, ancak aslında o kadar da kötü değil.

Snapshot of table setup

Maviyle vurgulanan her şey bir formül, bu yüzden nasıl yaptım:

  1. B sütununda, hangi dizinin hangisi olduğunu tanımlamak için bir formül kullandım: = IF (A5 & A; 1 $, "Eşler", "Grup")
  2. X ve Y değerlerimi girdim (C ve D sütunları).
  3. Kabarcık ölçümü (E sütunu) seriye göre otomatik olarak ayarlamak için ayarlayın: = IF (A5 = A
  4. Ondalık basamakları kesmek için F ve G sütunları kullanılır.
  5. H'den L'ye kadar olan sütunlar, grubun bir eş veya ilgilenilen grup olmasına bağlı olarak gerçek veri dizisi kurulumunu yansıtır.
  6. X'ler her zaman aynı kalacak, H sütununu orijinal X ekseni değerine bağladım: = C5
  7. Sütun bir eş grubu ise uygun Y değerini alır: = IF ($ B5 = $ I3, $ D5, NA ())
  8. J sütunu, akran grubu kabarcık boyutunu ayarlar: = IF (ISNA ($ I5), NA (), $ E5)
  9. K sütunu ilgilenen gruptaysa uygun Y değerini çeker: = IF ($ B5 = $ K $ 3, $ D5, NA ())
  10. L sütunu ilgilenilen kabarcık büyüklüğünün grubunu belirler: = IF (ISNA ($ K5), NA (), $ E5)
  11. M sütunu tüm kabarcık boyutlarını eşit olarak ayarlar ve tüm grupların ve logolarının birlikte gösterildiği son grafik oluşturma için kullanılır.
  12. Hücreler O4 (= VLOOKUP (A1, Logolar! A: B, 2, FALSE)) ve P4 (= IF (O4 = 1, "grup 1", IF (0 = 2, "grup2", IF (0 = 3, ") grup3 ", IF (O4 = 4," grup4 ")))))) ilgilenilen grup seçildiğinde doğru logoyu tanımlayın ve çekin.

Daha sonra tüm logolarımı / görüntülerimi ayrı bir sekmede ("Logolar") ayarlamak ve bağlamak zorunda kaldım. Oz du Soleil'in "Hücre değerine göre bir resim seç" konulu YouTube videosu, bunun başarılmasında son derece yardımcı oldu. Doğrudan bağlantıyı gönderecek kadar itibarım yok.

Baloncuk çizelgelerimi yarattım ve formatladım, sonra H (X ekseni), I / K (Y ekseni) ve J / L (kabarcık boyutu için Z ekseni) sütunlarını kullanarak her seri için gereken verileri seçtim.

Grup logomun tamamı için sadece bir seriye ihtiyacım vardı çünkü bütün baloncuklar aynı büyüklükte olacaktı. X, Y ve Z eksenleri için sırasıyla C, D ve M sütunlarını kullandım. Daha sonra her grup logosunu kendi baloncuklarına uyguladım.

Kodun kendisi kurulumdan sonra oldukça açık bir şekilde sona erdi:

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

Grafikte etiketleri kullanmamaya karar verdim, çünkü dinamik olarak konumlandırmalarını sağlamak çabaya değmezdi. Bunun yerine grafiğin altında bağlantılı metin kutuları oluşturmaya gittim.

Umarım bu başkalarına biraz yardım eder; kesinlikle manuel güncellemelerden büyük bir zaman tasarrufu.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.