繁体   English   中英

Excel 不同值的多行到多列

[英]Excel Multiple rows to multiple columns for different values

我正在尝试制作类似于此处讨论的内容(将多行转换为多列)基本上

我在 Excel 或 MS-Access 中获得了如下数据

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

我想在 Excel 或 MS-Access 中生成类似的东西

          --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 列并存储计算的列。

每当我需要在 Excel 中做这样的事情时,我通常使用公式组合来创建文本单元格引用,然后使用间接函数来获取值。 如果您的数据相当统一,那么为间接函数创建单元格引用的公式就相当简单。 如果数据不统一,则需要组合匹配函数来创建单元格引用,并且您拥有的数据越多,它们就会变得相当笨拙。

例如,如果显示的第一组数据从 A1 开始,第二组数据从 I1 开始,则公式如:

=CHAR(CODE("J")+MATCH($B2,$J$10:$R$10,0)+MATCH(C$1,$J$2:$R$2,0)-2)&TEXT(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(NOT(ISNA(MATCH(J11,$D$36:$D$42,0))),"D"&TEXT(MATCH(J11,$D$36:$D$42,0)+2,"#") ,IF(NOT(ISNA(MATCH(J11,$E$36:$E$42,0))),"E"&TEXT(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 中,您可以在另一个查询中组合使用多个交叉表查询来生成大型多列数据输出。 正如其他人指出的那样,输出列的数量可能有限制,我还没有尝试查看。

祝你好运!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM