使用基于 table 输入的公式调整 table 的大小
Resize a table with formulas based on table input
我想根据源table“源Table”上的输入调整table“ProductList”sheet“Final”的大小工作sheet“输入”(源自源table的字段有助于公式)。
例如:首先,我想刷新源 table,然后我想调整 Table“ProductList”的大小,其范围 F1:J4 位于 [=23] =] “最终”根据来源table 工作sheet “输入”具有当前范围 A1:D7 仅通过添加行每月增长。
将不胜感激。
调整 Excel Table
- 这会将源 table 的行数调整为目标 table 的行数。
- 如果目标 table 的行数比源 table 多的行将被删除。
- 如果目标 table 包含公式并且行数少于源 table,新添加的单元格将相应更新。
Option Explicit
Sub SizeTable()
Dim wb As Workbook: Set wb = ThisWorkbook ' workbook containing this code
Dim sws As Worksheet: Set sws = wb.Worksheets("Input")
Dim stbl As ListObject: Set stbl = sws.ListObjects("Input")
Dim srCount As Long: srCount = stbl.Range.Rows.Count
Dim dws As Worksheet: Set dws = wb.Worksheets("Final")
Dim dtbl As ListObject: Set dtbl = dws.ListObjects("ProductList")
Dim drCount As Long: drCount = dtbl.Range.Rows.Count
If drCount > srCount Then
dtbl.Range.Resize(drCount - srCount).Offset(srCount).Delete
End If
dtbl.Resize dtbl.Range.Resize(srCount)
End Sub
OP(见评论)正在使用 PowerQuery 从 SQL 源中提取 table。通过 VBA re-sizing table 的替代方法是简单地修改原始 PowerQuery 代码以包含额外的 Id 列。然后 re-sizing 将在查询刷新时自动发生。
在 PowerQuery 编辑器中,您可以添加包含公式的自定义列。
你可以看到等式是:
=[CoCd] & "_" & Number.ToText([LSCH]) & "_" & Number.ToText([Material]) & "_" & Number.ToText([Month])
字符串连接运算符“&”仅适用于字符串,因此由于我的示例数据包含数字,因此我使用 Number.ToText()
进行转换。根据 SQL 源中的确切数据类型,这可能不是必需的。
接下来,在编辑器中,将新创建的 'Id' 列从右向左拖动。这将在 'Applied Steps' 列表中生成一个 'Reordered Columns' 行。
最后,'Close & Load' 从主菜单,你应该在你的 sheet 中得到这个输出:
如果您只想在名为 ProductList 的 table 中使用 SourceTable 查询的一个子集,那么您可以在工作簿内部设置 PowerQuery 以从源 table,然后刷新它(你可以设置对 SourceTable 的依赖,这样它会先被刷新)。
我想根据源table“源Table”上的输入调整table“ProductList”sheet“Final”的大小工作sheet“输入”(源自源table的字段有助于公式)。
例如:首先,我想刷新源 table,然后我想调整 Table“ProductList”的大小,其范围 F1:J4 位于 [=23] =] “最终”根据来源table 工作sheet “输入”具有当前范围 A1:D7 仅通过添加行每月增长。
将不胜感激。
调整 Excel Table
- 这会将源 table 的行数调整为目标 table 的行数。
- 如果目标 table 的行数比源 table 多的行将被删除。
- 如果目标 table 包含公式并且行数少于源 table,新添加的单元格将相应更新。
Option Explicit
Sub SizeTable()
Dim wb As Workbook: Set wb = ThisWorkbook ' workbook containing this code
Dim sws As Worksheet: Set sws = wb.Worksheets("Input")
Dim stbl As ListObject: Set stbl = sws.ListObjects("Input")
Dim srCount As Long: srCount = stbl.Range.Rows.Count
Dim dws As Worksheet: Set dws = wb.Worksheets("Final")
Dim dtbl As ListObject: Set dtbl = dws.ListObjects("ProductList")
Dim drCount As Long: drCount = dtbl.Range.Rows.Count
If drCount > srCount Then
dtbl.Range.Resize(drCount - srCount).Offset(srCount).Delete
End If
dtbl.Resize dtbl.Range.Resize(srCount)
End Sub
OP(见评论)正在使用 PowerQuery 从 SQL 源中提取 table。通过 VBA re-sizing table 的替代方法是简单地修改原始 PowerQuery 代码以包含额外的 Id 列。然后 re-sizing 将在查询刷新时自动发生。
在 PowerQuery 编辑器中,您可以添加包含公式的自定义列。
你可以看到等式是:
=[CoCd] & "_" & Number.ToText([LSCH]) & "_" & Number.ToText([Material]) & "_" & Number.ToText([Month])
字符串连接运算符“&”仅适用于字符串,因此由于我的示例数据包含数字,因此我使用 Number.ToText()
进行转换。根据 SQL 源中的确切数据类型,这可能不是必需的。
接下来,在编辑器中,将新创建的 'Id' 列从右向左拖动。这将在 'Applied Steps' 列表中生成一个 'Reordered Columns' 行。
最后,'Close & Load' 从主菜单,你应该在你的 sheet 中得到这个输出:
如果您只想在名为 ProductList 的 table 中使用 SourceTable 查询的一个子集,那么您可以在工作簿内部设置 PowerQuery 以从源 table,然后刷新它(你可以设置对 SourceTable 的依赖,这样它会先被刷新)。