2017-06-29 43 views
-1

我想产生像这里(Transpose multiple rows to multiple columns) 讨论基本上Excel中多行多列的不同值

我在Excel或类似如下

ID Desc Day1 Day2 Day3 ... 
London Apr17 12 34 36 
London May17 16 0 29 
London Jun17 17 18 43 
Birm May17 11 0 28 
Birm Jun17 12 18 42 

我MS-访问了数据要产生像无论是在Excel或MS-访问

  --Apr--------- -----May --------- -----------Jun----- 
ID  Desc Day1 Day2 Day3 Day1 Day2 Day3  Day1 Day2 Day3 
London Apr17 12 34 36  ...16 0 29  17 18 43 
Birm       ...11 0 28  12 18 42 

任何想法如何可以做到这一点

对我来说,尝试了转置,间接等 挑战是我得到了10个列保持相同的开始,然后左右约10列保持相同,每天需要约400列与计算列存储。

+0

在Access表中不能有400列,查询限制为255。 – June7

回答

0

每当我需要在Excel中做这样的事情时,我通常会使用公式组合来创建文本单元格引用,然后使用间接函数来获取该值。如果您的数据非常一致,那么为间接函数创建单元格引用的公式非常简单。如果数据不统一,则需要使用匹配函数的组合来创建单元格引用,并且他们会非常快速地获得更多的数据。

例如,如果第一数据集的在A1所示开始,并且所述第二组数据的开始在I1,则公式,例如:

= CHAR(CODE(“J”)+ MATCH( (MATCH($ A2,$ I $ 3:$ I $ 9,0) +2,“#”)

请注意,我必须在J10到R10中创建一组包含相应月份Desc条目的公式。

现在,这个公式为您提供了数据应该到达的单元格引用。问题是,你需要从数据应该到哪里去,到哪里去。所以这是倒退。这是它变得麻烦的地方。您需要嵌套IF中的另一组MATCH函数来获取此:

= IF(NOT(ISNA(MATCH(J11,$ C $ 36:$ C $ 42,0)))),“C”& TEXT(MATCH (J11,$ C $ 36:$ C $ 42,0)+1,“#”),IF(非(ISNA(MATCH(J11,$ D $ 36:$ D $ 42,0))),“D”& TEXT (J11,$ D $ 36:$ D $ 42,0)+2,“#”),IF(非(MATCH(J11,$ E $ 36:$ E $ 42,0)+2,“#”),“I1”)))

当您添加更多Day列时会变得残酷。请注意,我必须创建一个包含J11到R13中的位置文本值的数组,尽管您可以使用ROW和COL函数的组合来代替数组,但需要使用更多的数据。

然后在J3到R9(需要更多数据时扩展),INDIRECT函数用于从第二个IF/MATCH/MATCH函数中选择数据。

您可以消除一些辅助计算单元,例如,将IF/MATCH/MATCH/...函数直接放在INDIRECT函数中,我发现在开发类似这样的东西时可以更容易地创建一堆中间公式单元格,以帮助确定某些东西是不正确的,而且几乎总是某处搞砸了。

在Access中,您可以在另一个查询中使用多个组合在一起的交叉表查询来制作大型多列数据输出。正如其他人指出的那样,它可能会限制输出列的数量,我没有试过看。

祝你好运!