Как сделать сравнительную диаграмму для отображения данных из двух книг на каждом листе с одинаковым именем - PullRequest
0 голосов
/ 01 августа 2020

У меня трудная задача. Я не уверен, что кто-нибудь может мне помочь.

Прочтите, пожалуйста, мои опасения:

# 1 У меня "2" имя книги: Unemployment_Rate GDP_Annual_Growth_Rate_% # 2 в книге "Unemployment_Rate". У меня есть «1» мастер-лист и «181» рабочий лист, название которого происходит от страны. Пример листа №1 «Афганистан»; Лист №2 «Албания»; Лист № 3 «Алжир» и так далее ...

# 3 В книге «GDP_Annual_Growth_Rate_%». У меня есть «1» рабочий лист навигации, «1» мастер-лист и «185 рабочий лист с названием страны. Пример листа № 1« Афганистан »; лист № 2« Албания »; лист № 3« Алжир »и так далее .. .

Моя проблема заключается в следующем:

a) Как я могу создать диаграмму с помощью VBA, чтобы автоматически получать данные для каждой страны из рабочей книги «Unemployment_Rate» и «GDP_Annual_Growth_Rate_%»? B ) Как я могу получить данные из столбца «B» (который является столбцом даты) и столбца «E» (который является столбцом значений) во всех рабочих листах страны в книге Unemployment_Rate »? И c) Как я могу получить данные из столбца «B» (который является столбцом даты) и столбца «E» (который является столбцом значений) во всей рабочей таблице страны в книге GDP_Annual_Growth_Rate_%? См. Примерную фотографию отображения диаграммы:

Unemployment-and-GDP

My Other Problem:

How can I paste each chart into each country worksheet in "Unemployment_Rate" workbook automatically using a VBA?

With lack of knowledge for excel. I don't know if this request can be accomplish. To me it sounds difficult. I am opened for a better outcome, once available.

Below you can view other supported images and excel files that relates with this project.

How can you all help me?

Thanks in advance

https://drive.google.com/file/d/1mmsL54lWBSVNsrP0INleJe-uW8U-2VVD/view https://drive.google.com/file/d/1hbxg2eJEq0E6hBwMputV2lvOzeuNPkYu/view

Example#1 Example#2 Пример # 3

1 Ответ

0 голосов
/ 01 августа 2020

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

Sub Macro1()

Dim rs As Worksheet

For Each rs In ThisWorkbook.Worksheets
rs.Select
   
   If rs.Name <> "Unemployment" Then
        Columns("B:D").Select
        Range("B5").Activate
        ActiveSheet.Shapes.AddChart2(227, xlLine).Select
        ActiveChart.SetSourceData Source:=Range(rs.Name & "!$B:$D")
        ActiveChart.ChartType = xlColumnClustered
        ActiveChart.FullSeriesCollection(1).ChartType = xlColumnClustered
        ActiveChart.FullSeriesCollection(1).AxisGroup = 1
        ActiveChart.FullSeriesCollection(2).ChartType = xlLine
        ActiveChart.FullSeriesCollection(2).AxisGroup = 1
        ActiveChart.FullSeriesCollection(1).AxisGroup = 2
        ActiveChart.FullSeriesCollection(1).ChartType = xlLine
   End If

Next rs

End Sub

Обратите внимание, я пропускаю первый лист с названием «Безработица», потому что этот лист отличается от всех остальных. Кроме того, код между If ... End If - это просто записанный макрос. Если он не делает именно то, что вы хотите, запишите макрос, чтобы сделать то, что вы хотите, и скопируйте / вставьте этот код между If ... End If.

Дайте мне знать, если у вас есть какие-либо вопросы.

Основываясь на вашем последнем вопросе, вот мои выводы.

# 1) В книге под названием «GDP_Annual_Growth_Rate» у вас фактически есть место после вкладки «GDP Annual%», поэтому Фактическое название - «Годовой ВВП в%». Я не думаю, что вы этого хотите!

# 2) Вы должны были закрыть свой Sub с помощью 'End Sub'. Вам ВСЕГДА нужен «End Sub» в конце.

# 3) Когда вы начинаете l oop листать, вы начинаете выбирать диаграммы и вносить изменения в эти диаграммы, например: 'ActiveSheet .ChartObjects ("Диаграмма 1"). Активировать '. Но что, если у вас нет диаграммы на одном листе, вы не можете выбрать диаграмму, если она не существует.

# 4) Наконец, rs звучит как записи, установленные в MS Access; это мой взгляд на это. Почему бы не объявить рабочий лист как ws: 'Dim ws As Worksheet'

Вот рабочий код, с которого можно начать.

Sub DeleteallCharts()
Dim chtObj As ChartObject
Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets
ws.Select
    For Each chtObj In ActiveSheet.ChartObjects
    chtObj.Delete
    Next
Next ws
End Sub


Sub BuildAllCharts()

Dim ws As Worksheet

For Each ws In ThisWorkbook.Worksheets
ws.Select
   
    If ws.Name <> "GDP Annual %" And ws.Name <> "Navigation" Then

        Range("A:A,E:E").Select
        Range("" & ws.Name & "[[#Headers],[12 Mth Rolling Avg.]]").Activate
        ActiveSheet.Shapes.AddChart2(227, xlColumnClustered).Select
        ActiveChart.SetSourceData Source:=Range("" & ws.Name & "!$A:$A," & ws.Name & "!$E:$E")
        ActiveChart.FullSeriesCollection(1).Select
        With Selection.Format.Fill
            .Visible = msoTrue
            .ForeColor.RGB = RGB(255, 0, 0)
            .Transparency = 0
            .Solid
        End With
        Range("" & ws.Name & "[[#Headers],[Country]]").Select

    End If

Next ws

End Sub

Примечание: первый макрос удаляет все диаграммы, а второй макрос строит все графики. Единственное, что может немного сбивать с толку, - это '& ws.Name &', но оно вам нужно, когда вы l oop просматриваете все листы, поэтому вы получаете динамические c ссылки на каждый относительный набор данных на каждом листе. Запишите макрос самостоятельно, и вы увидите, что он привязан к одному конкретному листу c.

Наконец ... если вы хотите создать вторичную ось, выполните следующие действия.

Select a chart to open Chart Tools.

Select Design > Change Chart Type.

Select Combo > Cluster Column - Line on Secondary Axis.

Select Secondary Axis for the data series you want to show.

Select the drop-down arrow and choose Line.

Select OK.

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

enter image description here

Here is a link for some really, really, really cool charting ideas.

https://peltiertech.com/Excel/Charts/ChartIndex.html

...