转换excel中的一些列

时间:2014-09-29 15:06:17

标签: excel excel-formula

我有一个工作表,其中的列类似于下面的

name | id | contact | category | week 1 | week 2 | week 3 | ... |week 52

我需要做的是转换周'列成行,所以我最终得到:

name | id | contact | category | week

将每周的条目作为s / sheet中的一行 - 从而在每行的列数据上创建一个长列表。

示例当前格式:
琼斯| 12345 |西蒙|电子| 100 | 120 | 130 | 110 | .......... 150

所需格式
琼斯| 12345 |西蒙|电子| 100个
琼斯| 12345 |西蒙|电子| 120个
琼斯| 12345 |西蒙|电子| 130个
琼斯| 12345 |西蒙|电子| 110个
...
琼斯| 12345 |西蒙|电子| 150个

我尝试了通常的excel转置(通过粘贴),但无法让前几列保持静态,同时转换周列

理想情况下,我想在excel中实现这一点,但我可以将数据导入到mysql数据库中并使用它,如果解决方案更容易那样

希望这是有道理的

[添加例子]

1 个答案:

答案 0 :(得分:0)

我会在第二张工作表上完成工作,该工作表使用INDIRECT函数为您执行查找:


首先在新工作表上设置一些索引 - 我们将使用这些索引间接查找原始工作表并提取数据。

我会在A列中一次又一次地计算52,从A2中的1开始,并使用下面的公式:

=if(A2=52,1,A2+1)

这是我每人的周数。

在B栏中,我会计算我的人,从B2中的1开始,然后使用这个公式:

=if(A3=1,B2+1,B2)

这为我提供了INDIRECT函数中用于从原始工作表中获取数据的行和列偏移量。


现在有趣的部分 - 将这些行和列偏移与您的实际数据相匹配。

让我们假设您的原始数据位于名为“original”的工作表中。这是我们需要查找数据的地方。

我们会将原始列A映射到新工作表的C列中。因此C2可以保留以下公式:

=indirect("original!R"&($B2+1)&"C1",false)

你正在做的是查看你在B列(上面的公式)中计算的行,并查看该行的第一列(即列A) - 这是存储名称的位置。

同样,“id”,“contact”和“category”列使用该公式的修改映射到新的表格列D,E,F:

  • =indirect("original!R"&($B2+1)&"C2",false)
  • =indirect("original!R"&($B2+1)&"C3",false)
  • =indirect("original!R"&($B2+1)&"C4",false)

在这些更新中只有列偏移量发生了变化。


为了提取每周数据,我们使用类似的公式;不同的是,现在我们开始使用新计算的A列,我们一遍又一遍地从1到52计算。

因此G2变为:

=indirect("original!R"&($B2+1)&"C"&(4+$A2),false)

根据需要将所有内容全部复制,并隐藏A列和B列。