我有一个工作表,其中的列类似于下面的
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数据库中并使用它,如果解决方案更容易那样
希望这是有道理的
[添加例子]
答案 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列。