excel用函数实现:多行多列按顺序转换为多行一列
有一excel表格(多列,每列的个数不一定一样,具体的列数在每行的A1位置,最大可为300列,最小为1列;多行:达200行):转换成(一列):可以参考:=OFFSET(B...
有一excel表格(多列,每列的个数不一定一样,具体的列数在每行的A1位置,最大可为300列,最小为1列;多行:达200行):
转换成(一列):
可以参考:=OFFSET(B$2,(ROW(1:1)-1)/5,(MOD(ROW(1:1)-1,5))),但该函数仅限定为固定列数,即函数中的5列(更适合矩阵式的数据)。导致结果是:不够5列的都填充了"0",不符合我的要求。请高手帮忙破解! 展开
转换成(一列):
可以参考:=OFFSET(B$2,(ROW(1:1)-1)/5,(MOD(ROW(1:1)-1,5))),但该函数仅限定为固定列数,即函数中的5列(更适合矩阵式的数据)。导致结果是:不够5列的都填充了"0",不符合我的要求。请高手帮忙破解! 展开
4个回答
展开全部
更多追问追答
追问
非常感谢。能做些解释吗,看不大懂。
这是A,B,C最大三列,1,2,3,4最多四行。要是最大100列,200行呢,需要修改哪些东西!
追答
1、把$A$1:$C$4这些改为你相应的单元格就行了;
2、工式有点复杂,你最好手动在表里面一步步运行下;
IF($A$1:$C$4="",4^8,(ROW($1:$4)*10+COLUMN($A:$C)))
如果等于空,就为65535 ,等会要用的,如果不会空就为所对应的行*10+列数;这样出来就把数字由小到大排序了;
SALL这里是把数字从小到大出出来;
TEXT是把数字值设置为ROCO格式;
&"" 是为了不返回0,公式本来是会返回0的,连接一个空,就会返回空;
展开全部
用公式很纠结。宏比较容易:
Sub test()
Dim arr()
ReDim arr(1 To 1)
brr = Selection
k = 1
For i = 1 To UBound(brr)
For j = 1 To UBound(brr, 2)
If brr(i, j) = "" Then Exit For
arr(k) = brr(i, j)
k = k + 1
ReDim Preserve arr(1 To k)
Next
Next
Sheets(2).[A1].Resize(k - 1, 1) = Application.Transpose(arr)
End Sub
选中要转换的数据区域,运行宏test,结果在sheet2
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
令A1=0,可用以下公式转换
=OFFSET(A$1,LOOKUP(ROW(A1)-1,MMULT(--(ROW($1:$200)>=COLUMN(INDIRECT("C1:C200",0))),A$1:A$200),ROW($1:$200)),IF(ROW(A1)<=A$2,ROW(A1),MOD(ROW(A1)-1,LOOKUP(ROW(A1)-1,MMULT(--(ROW($1:$200)>=COLUMN(INDIRECT("C1:C200",0))),A$1:A$200)))+1))下拉填充
=OFFSET(A$1,LOOKUP(ROW(A1)-1,MMULT(--(ROW($1:$200)>=COLUMN(INDIRECT("C1:C200",0))),A$1:A$200),ROW($1:$200)),IF(ROW(A1)<=A$2,ROW(A1),MOD(ROW(A1)-1,LOOKUP(ROW(A1)-1,MMULT(--(ROW($1:$200)>=COLUMN(INDIRECT("C1:C200",0))),A$1:A$200)))+1))下拉填充
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
选种所有数据区域,然后复制——选择性贴粘——贴粘为数据(并选择转置)
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询