Excel 2016-组表
这应该是直截了当的,但就我个人而言,我无法理解 我试图将日期表与Var表结合起来,形成右边的表Excel 2016-组表,excel,vba,dax,powerquery,Excel,Vba,Dax,Powerquery,这应该是直截了当的,但就我个人而言,我无法理解 我试图将日期表与Var表结合起来,形成右边的表 任何方法都可以(Pivot、VBA、m Language、dax)假设我正确理解问题并查看示例结果-您希望将日期表中的每一行与Var表中的所有行连接起来,如果是这种情况,则这是两个表的笛卡尔积,可以使用Pivot表数据模型完成: 从日期创建数据透视表表-重要的是检查将此数据添加到数据模型中 在数据透视表上,当右侧菜单打开时,单击右上角的数据透视表字段 检查表1Date并验证它是否在行部分,对表2Va
任何方法都可以(Pivot、VBA、m Language、dax)假设我正确理解问题并查看示例结果-您希望将日期表中的每一行与Var表中的所有行连接起来,如果是这种情况,则这是两个表的笛卡尔积,可以使用Pivot表数据模型完成:
日期创建数据透视表
表-重要的是检查将此数据添加到数据模型中
数据透视表字段
Date
并验证它是否在行
部分,对表2Var
重复相同的步骤Date
位于行部分的Var
上方Design
-->报表布局
-->以表格形式显示
Design
-->报表布局-->重复所有项目标签
这些步骤将生成一个结果与问题输出中显示的结果相似的表。将两个表作为数组拉入VBA
dateArr = worksheet.Range("dateTable")
varArray = worksheet.Range("varTable")
主回路
dim ct as Integer
ct = 1
For i = 1 To UBound(dateArr)
For j = 1 To UBound(varArr)
final(1, ct) = dateArr(i, 1)
final(2, ct) = varArr(j, 1)
ct = ct + 1
Next j
Next i
来回答前面的问题。。我尝试了很多东西,但这对我来说是最有效的。它是动态的,可以添加和更改,斗争在ct变量中。。一旦解决了这个问题,一切都是下坡路。如果你真的尝试了,谢谢你的帮助 这是一个使用adodb的解决方案
Sub test()
Dim Ws As Worksheet, rstWs As Worksheet
Dim wsName As String
Dim strSQL As String
Set Ws = Sheets(1) 'ActiveSheet ' Sheets("Special Name")
wsName = Ws.Name
Set rstWs = Sheets(2) 'Sheets.Add Result Sheet
strSQL = "Select a.[Date], b.[Var] From "
strSQL = strSQL & "(Select Date FROM [" & wsName & "$]) as a , (Select Var FROM [" & wsName & "$]) as b "
strSQL = strSQL & "Where not isnull(b.Var) "
DoSQL rstWs, strSQL
End Sub
Sub DoSQL(rstWs As Worksheet, strSQL As String)
Dim Rs As Object
Dim strConn As String
Dim i As Integer
strConn = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
"Data Source=" & ThisWorkbook.FullName & ";" & _
"Extended Properties=Excel 12.0;"
Set Rs = CreateObject("ADODB.Recordset")
Rs.Open strSQL, strConn
If Not Rs.EOF Then
With rstWs
.Range("a1").CurrentRegion.ClearContents
For i = 0 To Rs.Fields.Count - 1
.Cells(1, i + 1).Value = Rs.Fields(i).Name
Next
.Range("a" & 2).CopyFromRecordset Rs
End With
End If
Rs.Close
Set Rs = Nothing
End Sub
下面是一个使用Powerquery的解决方案。第一步是将这两列作为表/查询导入Powerquery。我给他们取名为tblDate和tblVar。然后只需添加一个自定义的列并定义它,如屏幕截图所示 然后您只需展开表。这是完整的M代码
let
Source = Excel.CurrentWorkbook(){[Name="tblDate"]}[Content],
#"Changed Type" = Table.TransformColumnTypes(Source,{{"Date", type date}}),
#"Added Custom" = Table.AddColumn(#"Changed Type", "Custom", each tblVar),
#"Expanded Custom" = Table.ExpandTableColumn(#"Added Custom", "Custom", {"Var"}, {"Var"})
in
#"Expanded Custom"
结果是
您是否尝试过自己写东西?如果是这样,请将代码添加到您的帖子中,以便我们对其进行改进。请学习,然后编辑您的问题并提供缺少的详细信息。请注意,vba
integer
数据类型的最大值为2^15-1
。因此,如果生成的行数超过此数,将生成溢出错误。通常最好避免使用Integer
并使用Long
(而且,我已经读过,VBA在内部将整数处理为Long)。