用VB语言在EXCEL中编写通过出生年月日判断星座 急求!

急求!题目如下:按照区域H1:J13中给出的关系,编写一个用户定义函数HOROSCOPE(xAsDate)AsString,根据一个人的出生日期计算其星座。然后使用该函数... 急求!题目如下:按照区域H1:J13中给出的关系,编写一个用户定义函数HOROSCOPE(x As Date) As String,根据一个人的出生日期计算其星座。然后使用该函数在区域D2:D31中计算每人的星座。
表格如图
展开
 我来答
lunch_bean
2013-11-01 · 超过25用户采纳过TA的回答
知道答主
回答量:64
采纳率:0%
帮助的人:50.6万
展开全部
其实最简单的思路应该是将生日(比如在A1)中的年份信息去掉(全部统一为1900年,用函数date(0,month(A1),day(A1)),再与星座分割日(比如水瓶座1月20日为20,双鱼座2月19日为49等)做大小比对。以前网上很多一句语句查星座的都是这个思路。
但这个方法有个隐蔽的bug:闰年。闰年里面的星座分割日在3月份之后要加1。隐蔽的bug是大忌!如果别人调用了你的函数,却总是有无规律的错误发生,有时绞尽脑汁找不出问题的所在,往往就是因为你函数中这种隐蔽的bug了。
为了绕过闰年的bug,我编写了下面的函数,直接仿造人肉查询月、日的过程。

当然,里面有可以优化的地方,比如月份的数组由于维数和内容一样,可以直接优化掉;比如最后的if语句结构可以用一个iif语句代替。但这些都是细枝末节,为了更好地体现编程思路,就不做这些“匠心”的优化了。

Function HOROSCOPE(x As Date) As String
Dim XZ(12) As String
Dim Yue(12) As Long
Dim Ri(12) As Long

XZ(0) = "摩羯座"
XZ(1) = "水瓶座"
XZ(2) = "双鱼座"
XZ(3) = "白羊座"
XZ(4) = "金牛座"
XZ(5) = "双子座"
XZ(6) = "巨蟹座"
XZ(7) = "狮子座"
XZ(8) = "处女座"
XZ(9) = "天秤座"
XZ(10) = "天蝎座"
XZ(11) = "射手座"
XZ(12) = "摩羯座"

Yue(1) = 1
Yue(2) = 2
Yue(3) = 3
Yue(4) = 4
Yue(5) = 5
Yue(6) = 6
Yue(7) = 7
Yue(8) = 8
Yue(9) = 9
Yue(10) = 10
Yue(11) = 11
Yue(12) = 12

Ri(1) = 20
Ri(2) = 19
Ri(3) = 21
Ri(4) = 20
Ri(5) = 21
Ri(6) = 22
Ri(7) = 23
Ri(8) = 23
Ri(9) = 23
Ri(10) = 24
Ri(11) = 23
Ri(12) = 22

m = Month(x)
d = Day(x)

If d < Ri(Yue(m)) Then
HOROSCOPE = XZ(Yue(m) - 1)
Else
HOROSCOPE = XZ(Yue(m))
End If

End Function
cslizh
2013-11-01 · 超过42用户采纳过TA的回答
知道小有建树答主
回答量:99
采纳率:0%
帮助的人:95万
展开全部
这个太简单了,我先将12星座分别编号为1至12。很明显出生的月份跟星座有很大关系,以10月出生为例,只可能是天秤座或是天蝎座,星座编号为9或10,再看出生的日,如果大于22即为天蝎座,小于等于22的则为天秤座。将E、F列用公式算出月、日,=IF(F1>22,E1,E1-1)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式