Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 5316|回复: 13

[已解决]请教,function的参数中可以传递运算符吗?

[复制链接]
发表于 2014-4-14 20:56 | 显示全部楼层 |阅读模式
本帖最后由 KINADD 于 2014-4-14 21:11 编辑

function aGreater()
if 1>2 then
.......
end if
end function

function aEqual()
if 1=2 then
.......
end if
end function

function aLess()
if 1<2 then
.......
end if
end function

请问可否通过参数传递运算符,将三个函数合成一个?

结果类似:
function a(xxx as xxx)
if 1 xxx 2 then
.......
end if
end function

sub test()
是否小于 = a("<")
是否等于 = a("=")
是否大于 = a(">")
end sub


最佳答案
2014-4-14 21:38
用下面自定义函数试试:
  1. Function judge(a, b, Optional k = 0) As Boolean
  2.     Select Case k
  3.         Case 1, ">"
  4.             If a > b Then judge = True
  5.         Case 0, "="
  6.             If a = b Then judge = True
  7.         Case -1, "<"
  8.             If a < b Then judge = True
  9.     End Select
  10. End Function
复制代码
发表于 2014-4-14 21:13 | 显示全部楼层
    If a > 1 Then
     a = 1
    ElseIf a = 1 Then
     a = 0
    Else
     a = -1
    End If
回复

使用道具 举报

 楼主| 发表于 2014-4-14 21:21 | 显示全部楼层
本帖最后由 KINADD 于 2014-4-14 21:23 编辑
我心飞翔410 发表于 2014-4-14 21:13
If a > 1 Then
     a = 1
    ElseIf a = 1 Then

好像不是这个意思。

我现在需要调用的function,目的不确定。比如function(a,b),我有的时候需要判断a>b,有时需要a>=b,或者a<=b之类的,请问有没有方法把>,>=,<=这些运算符作为一个参数,类似function(a,">=",b),而不必在function内用if来判断?

谢谢
回复

使用道具 举报

发表于 2014-4-14 21:38 | 显示全部楼层    本楼为最佳答案   
用下面自定义函数试试:
  1. Function judge(a, b, Optional k = 0) As Boolean
  2.     Select Case k
  3.         Case 1, ">"
  4.             If a > b Then judge = True
  5.         Case 0, "="
  6.             If a = b Then judge = True
  7.         Case -1, "<"
  8.             If a < b Then judge = True
  9.     End Select
  10. End Function
复制代码
Pic.jpg
回复

使用道具 举报

发表于 2014-4-14 21:41 | 显示全部楼层
用第3参数k来指定比较模式。

默认=0时,按"=" 比较。

或者
输入参数=1 或 参数">"时,比较是否a>b
输入参数=0 或 参数"="时,比较是否a=b
输入参数=-1 或 参数"<"时,比较是否a<b

返回判断结果True or False
回复

使用道具 举报

发表于 2014-4-14 21:42 | 显示全部楼层
a 和 b 可以是数值,或字符串。都可作比较。
回复

使用道具 举报

发表于 2014-4-14 21:48 | 显示全部楼层
在VBA代码中使用的例子:

If judge(1, 2, 0) Then……  '因为1<2,所以判断 1=2为False假。


If judge(2, 2, 0) Then……  '当2=2时判断结果为True真。


If judge(2, 3, -1) Then……  '因为2<3所以判断结果为True真。


If judge(2, 3, ">") Then……  '因为2<3所以判断结果为False假。即2不大于3
回复

使用道具 举报

 楼主| 发表于 2014-4-14 21:49 | 显示全部楼层
香川群子 发表于 2014-4-14 21:41
用第3参数k来指定比较模式。

默认=0时,按"=" 比较。

哦,可以这样用啊,太谢谢了。看来没有更简单的方法了。
回复

使用道具 举报

发表于 2014-4-14 21:53 | 显示全部楼层
其实更简单的方法是直接比较。

即: If a > b then……

当然,如果你的比较参数也是由程序计算得到,并非事先可以确定的,
那么用我的自定义函数应该可以解决比较模式成为变量的情形。
回复

使用道具 举报

 楼主| 发表于 2014-4-14 21:54 | 显示全部楼层
香川群子 发表于 2014-4-14 21:38
用下面自定义函数试试:

在我的代码里if的结果 Then judge = True,这一段大概有50多行,除了每一个判断后面都复制一段,请问有没有什么方法可以只写一次judge = True?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-3-29 16:12 , Processed in 0.574850 second(s), 12 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表