Excel如何利用宏将多行多列转置成多行一列? 增经看到你的回答,请教下列问题!

2024-11-22 07:02:52
推荐回答(3个)
回答1:

问题出在CHAR函数的转换上。
INDIRECT("Sheet1!A:"&CHAR(64+COUNTA(Sheet1!$1:$1)),4)作为INDEX的索引区域。这里利用了CHAR函数取得将65-90的数字转换为字母A-Z,所以COUNTA(Sheet1!$1:$1)如果不超过26,公式成立。
如果超过数据超过26列,就会出错——要么得到一个不存在的区域,要么转换得到一个错误的区域(如果列数是33-58的范围,会转换为小写字母a-z)。因为实际上EXCEL表的列号字母是从A-Z,AA-AZ,BB-BZ这样循环编号的,并不能用CHAR函数完全表示。假如数组在A:FJ区域,那么CHAR(64+COUNTA(Sheet1!$1:$1))=CHAR(64+166)得到的是一个特殊字符,也就是说这个列号不存在,就会给出REF错误。
要解决这个问题,可以用ADDRESS函数来取得真实的列号字母(不局限在A-Z范围)。

补充:也不是说这个公式就是错误的。任何公式都会有应用的局限,如果数据不超过26列,这样是可以的。

回答2:

看了半天,终于看明白公式的意思了,也不用这样复杂,假设数据在A1:Z10中,AA1或其它任意空单元格中输入
=INDEX($A$1:$Z$10,ROW(A26)/26,MOD(ROW(A26),26)+1)
下拉,就可以了。
再举个例子,便于你找到规律,假设数据在A1:AN10中,公式变为
=INDEX($A$1:$AN$10,ROW(A40)/40,MOD(ROW(A40),40)+1)

回答3:

选择需转置顶文本区域,然后选择性粘贴,其中就有转置这项,若要看vba代码,可以按此方法录制一个宏,看系统自动生成的代码即可。