Office中国论坛/Access中国论坛

标题: 帮忙转换为自定义函数 [打印本页]

作者: wbjjzhu    时间: 2005-1-4 18:49
标题: 帮忙转换为自定义函数
拜读了老鬼版主的行转列组合公式后,

=INDEX($A$1D$5,1+INT((ROW()-1)/4),MOD((ROW()-1),4)+1)

深感兴趣,但发觉这个公式有几不足的地方

1.对于进行转列的区域不能任意选择同,否则结果不正确

2.对于输出结的第一个单元格只能是任意一列的第一个单元格,而无法在任意一列的任意一行中输入公式,否则结果不全。

为此我对公式作了修改

=INDEX($A$1E$5,1+INT((ROW()-ROW($B$6))/COLUMNS($A$1E$5)),MOD((ROW()-1),COLUMNS($A$1:$E$5))+1)

但这个组合公式在指定开始输出单的上方和起出进行转换区域的总行数时会出现错误

于再进行修改,加入条件判断,使出现错误的地方的单无格变为空白单元格。

=IF(OR((ROW()-ROW($B$6))<0,(1+INT((ROW()-ROW($B$6))/COLUMNS($A$1:$E$5)))>COLUMNS($A$1:$E$5)),"",INDEX($A$1:$E$5,1+INT((ROW()-ROW($B$6))/COLUMNS($A$1:$E$5)),MOD((ROW()-ROW($B$6)),COLUMNS($A$1:$E$5))+1))

但这个公式太复杂,想转换为自定义函数,小弟想了很久都无法解决,在此恳请各位版主和高手们帮忙解决。



[attach]8426[/attach]


作者: 老鬼    时间: 2005-1-4 21:02
VBA方法:[attach]8430[/attach]


作者: wbjjzhu    时间: 2005-1-5 00:53
又上了宝贵的一课,谢谢!但还有2点不明白,1、下面代码中i是如何付值的?2、For Each cel In Range(RefEdit1.Value)返回什么结果?版主能否解释一下^-^i = 0

For Each cel In Range(RefEdit1.Value)

    ActiveCell.Offset(i, 0).Value = cel.Value

    i = i + 1

Next[em04][em04]
作者: 老鬼    时间: 2005-1-5 01:56
i = 0

For Each cel In Range(RefEdit1.Value) '返回RANGE对象的单元格实例,并开始循环

    ActiveCell.Offset(i, 0).Value = cel.Value

    i = i + 1 '每循环一次对i累加一次

Next
作者: wbjjzhu    时间: 2005-1-5 03:03
谢谢!在这里还想问一问题:假如我要想要一个函数公式,公式有两个变量,一个是要进行转换的区域,一个是转换后输出的第一个单元格(这两个变量在引用时要变为绝对引用),将所得的引用代入以下公式中计算=IF(OR((ROW()-ROW($B$6))<0,(1+INT((ROW()-ROW($B$6))/COLUMNS($A$1E$5)))>COLUMNS($A$1E$5)),"",INDEX($A$1E$5,1+INT((ROW()-ROW($B$6))/COLUMNS($A$1:$E$5)),MOD((ROW()-ROW($B$6)),COLUMNS($A$1:$E$5))+1))

在单元格中输入公式后得出结果(这个结果只是要转换区域的一个单元格值),这个自定义函数该如何写?我昨天按这个思路做了很长时间都无法解决,还望版主指导。
作者: 老鬼    时间: 2005-1-5 06:11
自定义函数为tr(),有两种使用方法,一种是数组公式法(J列),另一种是普通公式法(K列):[attach]8440[/attach]


作者: zyz218    时间: 2005-1-29 18:53
没想到VBA里面东东真多!!!!得好好学习




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3