如何将Excel多行多列数据中的非零值(首行首列为标题)通过函数转换成多行三列,即两列标题,一列数据?


转换成:

要知道 你具体的数据情况 现在是有多少列 是否 原来 A列的数据 每一个标题 都是唯一 如果有固定的列 就可以用公式了 ……
所以 你需要 说说 你的数据 具体情况 你现在列出来的只是部分 不能肯定 你的具体情况……追问

行标题和列标题都是唯一的,但是表格整体的列数是变化的,行数是500(不含标题行)

追答

就是说 每一行不一定有多少列 有数据?每一行 在所有列中 中间有没有 断列的?(就是说 是否中间列有空数据的?

如果你觉得 用公式 麻烦的话 可以使用VBA代码 但是 最好具体说说 你的数据具体情况 这样有利于解决问题……

给你一个附件 里边有代码 和公式 不愿用公式 就删掉那个 sheet1 代码固定把处理完的数据 存放在 sheet3 中了 ……拷贝你的数据到某个表中 然后运行 宏 处理……即可把结果放在sheet3中……

同一行中 如果 各列数据有空的话 结果中自动跳过……

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-11-05

可以用数据透视表的多区域合并,再去除零值。仔细考虑过,要靠公式去零值不太可行。只能用offset函数把包含零值的都写出来,再筛去零值的行,公式网友都写了,就不重复了。我考虑的另外一种写法是一列一列地处理的,根据“题意”好像还是根据行处理更好。



第2个回答  2013-11-04
我帮你先转成三列格式,然后,通过排序,你再把零值手工删除,可以不?告诉我多行多列,是几行几列?追问

行标题和列标题都是唯一的,但是表格整体的列数是变化的,行数是500(不含标题行)

追答

三个公式搞定:(假设是8行5列的原始数据,根据你自己的需要更改这两个数字就可以)

第一列

=OFFSET($A$1,MOD(INT((ROW()-1)/5),8)+1,)

第二列

=OFFSET($A$1,,MOD(ROW()-1,5)+1)

第三列

=OFFSET($A$1,MOD(INT((ROW()-1)/5),8)+1,MOD(ROW()-1,5)+1)

 

 

第3个回答  2013-11-04
函数不好弄,要vb才行追问

能详细些吗?

追答

Sub Macro1()
For i = 2 To Range("a1212").End(xlUp).Row + 3
a = "B" & i
b = "D" & i
Range(a & " :" & b).Select
For Each cc In Selection
If cc > 0 Then
e = Range("e12121").End(xlUp).Row + 1
f = Range("f12121").End(xlUp).Row + 1
g = Range("g12121").End(xlUp).Row + 1
Cells(e, 5) = Cells(i, 1)
Cells(f, 6) = Cells(1, cc.Column)
Cells(g, 7) = cc.Value
End If
Next
Next
End Sub

相似回答