Excel将品牌/型号/年份范围转换为单独的年份/品牌/型号行

时间:2019-06-11 19:31:25

标签: excel vba powerpivot

我正在尝试将“品牌/型号/年份范围”组合表扩展为单独的年份行。我曾尝试寻找解决方案,但似乎没有一个适合我的用例,而且我不了解VBA的第一件事,因此需要在这里稍加掌握。

我正在使用Excel Office 365,我曾尝试通过PowerPivot找出一些问题并合并查询,但没有一个能够满足我的需要。

这是我正在处理的数据(A:D列)

Make    Model      From    To
ACURA   MDX       2001     2009
ACURA   RDX       2008     2009
ACURA   SLX       1996     1998
ACURA   TL        1999     2008
ACURA   TSX       2008     2009

所需的输出将是:

Year    Make    Model
2001    ACURA   MDX
2002    ACURA   MDX
2003    ACURA   MDX
2004    ACURA   MDX
2005    ACURA   MDX
2006    ACURA   MDX
2007    ACURA   MDX
2008    ACURA   MDX
2009    ACURA   MDX
2008    ACURA   RDX
2009    ACURA   RDX
1996    ACURA   SLX
1997    ACURA   SLX
1998    ACURA   SLX

...等等。

2 个答案:

答案 0 :(得分:1)

使用Microsoft Query和具有两个命名范围MAKES和YEARS的源Excel文件(第二个是跨越期望范围的单列年份)

查询:

SELECT MAKES.Make, MAKES.Model, YEARS.Year
FROM `C:\Users\userName\Desktop\Test.xlsx`.MAKES MAKES, 
     `C:\Users\userName\Desktop\Test.xlsx`.YEARS YEARS
WHERE MAKES.`From` <= YEARS.Year AND MAKES.To >= YEARS.Year

答案 1 :(得分:1)

您可以使用Power Query执行此操作。将源数据(A:D)格式化为表格,然后类似:

let
    Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
    #"Added Year List" = Table.AddColumn(Source, "Year", each List.Numbers([From],[To]-[From]+1)),
    #"Expanded Years To Rows" = Table.ExpandListColumn(#"Added Year List", "Year"),
    #"Removed Other Columns" = Table.SelectColumns(#"Expanded Years To Rows",{"Year", "Make", "Model"}),
    #"Changed Type" = Table.TransformColumnTypes(#"Removed Other Columns",{{"Year", Int64.Type}, {"Make", type text}, {"Model", type text}})
in
    #"Changed Type"