使用VBA函数将Excel行区域按索引奇偶拆分遇返回异常问题
额外0的产生原因
- VBA默认数组下标从0开始,你当前代码中
ReDim Y(N / 2)声明的数组下标范围是0 ~ N/2,总共有N/2 + 1个元素。你仅给下标1 ~ N/2的位置赋值,下标为0的位置未手动赋值,默认初始值为0,最终返回的数组就多了这个首位置的0。 - 补充隐性问题:传入的单元格区域的Value属性是二维数组(结构为
(行索引, 列索引)),直接写X(i)取值仅在单行场景下能生效,兼容度较差。
修复后代码
Public Function Even(X As Range) As Variant Dim N As Integer, i As Integer, idx As Integer ' 直接取区域列数,不受空单元格影响,比CountA更符合需求 N = X.Columns.Count ' 强制数组下标从1开始,和Excel单元格索引习惯对齐,避免空的0位 ReDim Y(1 To N / 2) As Variant idx = 1 For i = 1 To N If i Mod 2 = 0 Then ' 明确取第一行第i列的值,逻辑更清晰 Y(idx) = X.Cells(1, i).Value idx = idx + 1 End If Next i Even = Y End Function
使用说明
Excel 2013没有自动溢出功能,选中输出区域(比如示例中的A2:C2)后,输入公式再按Ctrl+Shift+Enter确认,才能正确返回数组结果。
内容的提问来源于stack exchange,提问作者Tomek S
相关产品推荐
相关产品推荐

