VBA - 来自多个工作表的源数据
VBA - Source data from multiple sheets
我正在尝试使用来自多个 sheet 的源数据创建一个新图表。无论 sheet,数据将始终位于同一列中。但是,我想 select 从 Range("F2", Range("F2").End(xlDown))
开始的永久性两个 sheet 之后的每个 sheet 中的数据。
我想要从中提取数据的 sheets 将用作图表的源数据,该图表将在添加新 sheets 时创建和删除,并重复循环.
因此,例如,我希望它从上面指定的范围内获取 sheets 3 到 52 的数据,或者不管有多少,因此它成为一个有凝聚力的来源。我不确定是否有不使用隐藏 sheet 的好方法来做到这一点。提前致谢。
Private Sub Locations()
Set Build = Charts.Add(After = Worksheets("Report"))
With Build
.SetSourceData
.ChartType = xlColumnClustered
End With
End Sub
我有代码可以从 Sheet3 开始循环并将 B 列(不包括 header)中的所有数据添加到一个数组,然后您可以使用该数组将值绘制到图表中?
Sub foo()
Dim wb As Workbook
Dim ws As Worksheet
Dim Myarray() As Variant
y = 0
For Each ws In ThisWorkbook.Worksheets
If ws.Name <> "Sheet1" Then
If ws.Name <> "Sheet2" Then
LastRow = ws.Cells(ws.Rows.Count, "B").End(xlUp).Row
Counter = Counter + LastRow
ReDim Preserve Myarray(Counter)
For Each cell In ws.Range("B2:B" & LastRow)
Myarray(y) = cell.Value
y = y + 1
Next cell
End If
End If
Next ws
如果你想将数组的内容写入一个助手sheet:
Worksheets.Add(After:=Worksheets(Worksheets.Count)).Name = "Temp"
For p = 1 To UBound(Myarray)
Sheets("Temp").Cells(p, 1).Value = Myarray(p - 1)
Next p
然后找到最后一行并将范围获取到 SetSourceData 以更新图表。
如果您有 Excel 2016 或更高版本,那么数据选项卡 'Get & Transform' 部分下的新 PowerQuery 功能非常适合此操作。 (在以前的版本中,PowerQuery 是 Microsoft 提供的免费插件,您必须安装它)。
请参阅以下 link 示例,了解如何使用它来混合来自多个工作表的数据:
excel indirect function to read dates and return dynamic values
从那里开始,制作数据透视表然后从中制作数据透视图是一项简单的任务,它可以自动引入新的工作表,而无需用户进行任何更改。
我可以通过使用隐藏 sheet
来简化情况
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
我正在尝试使用来自多个 sheet 的源数据创建一个新图表。无论 sheet,数据将始终位于同一列中。但是,我想 select 从 Range("F2", Range("F2").End(xlDown))
开始的永久性两个 sheet 之后的每个 sheet 中的数据。
我想要从中提取数据的 sheets 将用作图表的源数据,该图表将在添加新 sheets 时创建和删除,并重复循环.
因此,例如,我希望它从上面指定的范围内获取 sheets 3 到 52 的数据,或者不管有多少,因此它成为一个有凝聚力的来源。我不确定是否有不使用隐藏 sheet 的好方法来做到这一点。提前致谢。
Private Sub Locations()
Set Build = Charts.Add(After = Worksheets("Report"))
With Build
.SetSourceData
.ChartType = xlColumnClustered
End With
End Sub
我有代码可以从 Sheet3 开始循环并将 B 列(不包括 header)中的所有数据添加到一个数组,然后您可以使用该数组将值绘制到图表中?
Sub foo()
Dim wb As Workbook
Dim ws As Worksheet
Dim Myarray() As Variant
y = 0
For Each ws In ThisWorkbook.Worksheets
If ws.Name <> "Sheet1" Then
If ws.Name <> "Sheet2" Then
LastRow = ws.Cells(ws.Rows.Count, "B").End(xlUp).Row
Counter = Counter + LastRow
ReDim Preserve Myarray(Counter)
For Each cell In ws.Range("B2:B" & LastRow)
Myarray(y) = cell.Value
y = y + 1
Next cell
End If
End If
Next ws
如果你想将数组的内容写入一个助手sheet:
Worksheets.Add(After:=Worksheets(Worksheets.Count)).Name = "Temp"
For p = 1 To UBound(Myarray)
Sheets("Temp").Cells(p, 1).Value = Myarray(p - 1)
Next p
然后找到最后一行并将范围获取到 SetSourceData 以更新图表。
如果您有 Excel 2016 或更高版本,那么数据选项卡 'Get & Transform' 部分下的新 PowerQuery 功能非常适合此操作。 (在以前的版本中,PowerQuery 是 Microsoft 提供的免费插件,您必须安装它)。
请参阅以下 link 示例,了解如何使用它来混合来自多个工作表的数据: excel indirect function to read dates and return dynamic values 从那里开始,制作数据透视表然后从中制作数据透视图是一项简单的任务,它可以自动引入新的工作表,而无需用户进行任何更改。
我可以通过使用隐藏 sheet
来简化情况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