Excel自定义函数求助:实现反向TRANSPOSE功能输出异常
解决Excel自定义反向转置函数返回0的问题
我明白你想要实现的是把横向区域转置后反向排列的需求——把A1:C1的内容转置后倒过来放到A2:A4,让A1去A4、B1去A3、C1去A2。现在你的自定义函数返回全0,大概率是因为函数没正确处理数组输入或者返回格式不对,咱们直接来搞定这个问题:
第一步:替换成正确的Reverse自定义函数
先打开VBA编辑器(按Alt+F11),找到你原来的Reverse函数,把它替换成下面这段代码:
Function Reverse(inputArr As Variant) As Variant Dim reversedArr As Variant Dim i As Integer, arrLength As Integer ' 兼容直接传入单元格区域的情况 If TypeName(inputArr) = "Range" Then inputArr = inputArr.Value End If ' 处理数组输入 If IsArray(inputArr) Then arrLength = UBound(inputArr) - LBound(inputArr) + 1 ReDim reversedArr(LBound(inputArr) To UBound(inputArr)) ' 反向遍历填充数组 For i = LBound(inputArr) To UBound(inputArr) reversedArr(i) = inputArr(UBound(inputArr) - i + LBound(inputArr)) Next i Reverse = reversedArr Else ' 如果输入不是数组,直接返回原内容 Reverse = inputArr End If End Function
这段代码专门处理数组输入,能正确接收TRANSPOSE返回的纵向数组,然后把元素倒序排列后返回。
第二步:正确调用函数
选中A2:A4这个目标区域,输入公式:
=Reverse(TRANSPOSE(A1:C1))
- 如果你用的是Excel 365/2021及以后版本:直接按回车就行,Excel会自动识别为动态数组公式。
- 如果你用的是旧版Excel:输入完公式后要按
Ctrl+Shift+Enter来确认数组公式,此时公式外面会自动加上大括号{}(注意不要手动输入大括号)。
这样操作后,A2就会显示C1的内容,A3显示B1,A4显示A1,完全符合你的需求。
为什么之前的函数返回全0?
大概率是这两个原因之一:
- 原函数没处理数组输入:
TRANSPOSE返回的是一个数组,而如果你的函数只是简单赋值、没有遍历数组元素,Excel就无法正确解析结果,只能返回默认值0。 - 返回格式不对:如果函数没有把结果存进数组再返回,Excel无法识别为数组输出,也会填充0。
额外小技巧:一步实现反向转置(不用嵌套TRANSPOSE)
如果你想更省事,可以直接写一个专门处理横向区域、返回反向纵向数组的函数,这样不用嵌套TRANSPOSE:
Function ReverseTranspose(rng As Range) As Variant Dim reversedArr As Variant Dim i As Integer, colCount As Integer colCount = rng.Columns.Count ReDim reversedArr(1 To colCount, 1 To 1) ' 生成纵向数组 ' 从右到左遍历原区域,填充到纵向数组 For i = 1 To colCount reversedArr(i, 1) = rng.Cells(1, colCount - i + 1).Value Next i ReverseTranspose = reversedArr End Function
调用的时候更简单,选中A2:A4输入:
=ReverseTranspose(A1:C1)
同样按对应版本的方式确认公式即可。
内容的提问来源于stack exchange,提问作者I hate VBA
相关产品推荐
相关产品推荐

