Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 2016-组表_Excel_Vba_Dax_Powerquery - Fatal编程技术网

Excel 2016-组表

Excel 2016-组表,excel,vba,dax,powerquery,Excel,Vba,Dax,Powerquery,这应该是直截了当的,但就我个人而言,我无法理解 我试图将日期表与Var表结合起来,形成右边的表 任何方法都可以(Pivot、VBA、m Language、dax)假设我正确理解问题并查看示例结果-您希望将日期表中的每一行与Var表中的所有行连接起来,如果是这种情况,则这是两个表的笛卡尔积,可以使用Pivot表数据模型完成: 从日期创建数据透视表表-重要的是检查将此数据添加到数据模型中 在数据透视表上,当右侧菜单打开时,单击右上角的数据透视表字段 检查表1Date并验证它是否在行部分,对表2Va

这应该是直截了当的,但就我个人而言,我无法理解

我试图将日期表与Var表结合起来,形成右边的表


任何方法都可以(Pivot、VBA、m Language、dax)

假设我正确理解问题并查看示例结果-您希望将日期表中的每一行与Var表中的所有行连接起来,如果是这种情况,则这是两个表的笛卡尔积,可以使用Pivot表数据模型完成:

  • 日期创建数据透视表
    表-重要的是检查
    将此数据添加到数据模型中
  • 在数据透视表上,当右侧菜单打开时,单击右上角的
    数据透视表字段
  • 检查表1
    Date
    并验证它是否在
    部分,对表2
    Var
    重复相同的步骤
  • 确保
    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)。