VBA - 来自多个工作表的源数据

时间:2017-11-29 15:21:27

标签: excel vba excel-vba charts excel-charts

我正在尝试使用多张工作表中的源数据创建新图表。无论工作表如何,数据都将始终位于同一列中。但是,我想从开头的永久性两张纸张之后的每张纸张中选择Range("F2", Range("F2").End(xlDown))中的数据。

我希望从中提取数据的工作表将用作在添加新工作表时创建和删除的图表的源数据,并且将重复该循环。

因此,例如,我希望从上面指定的范围中从第3到第52页中获取数据,或者从中获取数据,因此它成为一个有凝聚力的来源。我不确定是否有一种很好的方法可以在不使用隐藏工作表的情况下执行此操作。提前谢谢。

Private Sub Locations()
Set Build = Charts.Add(After = Worksheets("Report"))
    With Build
        .SetSourceData
        .ChartType = xlColumnClustered
    End With
End Sub

2 个答案:

答案 0 :(得分:0)

如果你有Excel 2016或更高版本,那么'Get& amp;中的新PowerQuery功能“数据”选项卡的“变换”部分非常适用于此。 (在以前的版本中,PowerQuery可作为Microsoft的免费插件提供,您必须安装)。

请参阅以下链接,了解如何使用它来混搭多个工作表中的数据: excel indirect function to read dates and return dynamic values 从那里开始,一个简单的任务是制作一个数据透视表,然后使用数据透视图,它可以自动引入新的工作表而无需用户进行任何更改。

答案 1 :(得分:0)

我能够通过使用隐藏的工作表来简化这种情况

Private Sub Locations()

Dim ws As Worksheet, rep As Worksheet, LastRow As Double
With ThisWorkbook
    For n = 1 To Sheets.Count
        Set ws = Worksheets(n)
        Set rep = Worksheets("Report")
        LastRow = rep.Range("C1", rep.Range("C1").End(xlDown)).Rows.Count
        If IsNumeric(ws.Name) Then
            If rep.Range("C1") = "" Then
                ws.Range("F2", ws.Range("F2").End(xlDown)).Copy _
                Destination:=rep.Range("C1")
            Else:
                ws.Range("F2", ws.Range("F2").End(xlDown)).Copy _
                Destination:=rep.Range("C" & LastRow)
            End If
        End If
    Next n
End With

End Sub