Excel精英培训网

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

[习题] 练习: 时间加减的自定义函数(挑战最简代码)

[复制链接]
发表于 2008-1-21 21:27 | 显示全部楼层 |阅读模式
<p><strong>一个关于时间加减的问题</strong></p><p>r1=444分50秒</p><p>r2=10分40秒 </p><p>r1+r2</p><p>结果应该是455分30秒</p><p>大家来作个自定义函数吧,sjjs=(r1,r2,"+")</p><p>&nbsp;</p><p><font color="#e70808">先不考虑速度.看看最的最简便,代码最少</font></p><p><font color="#e70808">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -----------兰色幻想</font></p>
[此贴子已经被兰色幻想于2008-1-22 15:54:50编辑过]
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2008-1-22 12:51 | 显示全部楼层

<p>试试,只会笨方法。</p><p>Function sjjs(r1 As String, r2 As String, ys As String) As String<br/>&nbsp;&nbsp;&nbsp; Dim f1 As Integer, f2 As Integer, m1 As Integer, m2 As Integer<br/>&nbsp;&nbsp;&nbsp; f1 = Mid(r1, 1, Application.Find("分", r1) - 1)<br/>&nbsp;&nbsp;&nbsp; f2 = Mid(r2, 1, Application.Find("分", r2) - 1)<br/>&nbsp;&nbsp;&nbsp; m1 = Mid(r1, Application.Find("分", r1) + 1, Len(r1) - Application.Find("分", r1) - 1)<br/>&nbsp;&nbsp;&nbsp; m2 = Mid(r2, Application.Find("分", r2) + 1, Len(r2) - Application.Find("分", r2) - 1)<br/>&nbsp;&nbsp;&nbsp; If ys = "+" Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sjjs = f1 + f2 + (m1 + m2) \ 60 &amp; "分" &amp; (m1 + m2) Mod 60 &amp; "秒"<br/>&nbsp;&nbsp;&nbsp; Else<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If ys = "-" Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sjjs = f1 - f2 - 1 + (m1 + 1 - m2) \ 60 &amp; "分" &amp; (m1 + 60 - m2) Mod 60 &amp; "秒"<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Else<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sjjs = ""<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End If<br/>&nbsp;&nbsp;&nbsp; End If<br/>End Function</p>
回复

使用道具 举报

发表于 2008-1-22 15:29 | 显示全部楼层

<p>这个题目的答案我已有了</p><p>答案最后贴出来.</p>
[此贴子已经被作者于2008-1-22 15:55:11编辑过]
回复

使用道具 举报

发表于 2008-1-22 16:04 | 显示全部楼层

做好了发现思路跟楼上的一样的耶,再想想
回复

使用道具 举报

发表于 2008-1-22 16:52 | 显示全部楼层

<p>Function shijian(r1 As String, r2 As String, j As String)<br/>Dim arr1, arr2<br/>arr1 = Split(Mid(r1, 1, Len(r1) - 1), "分")<br/>arr2 = Split(Mid(r2, 1, Len(r2) - 1), "分")<br/>shijian = IIf(j = "+", --arr1(0) + --arr2(0) &amp; "分" &amp; --arr1(1) + --arr2(1) &amp; "秒", arr1(0) - arr2(0) &amp; "分" &amp; arr1(1) - arr2(1) &amp; "秒")<br/>End Function<br/></p><p>我的五行代码*_^</p>
[此贴子已经被作者于2008-1-22 16:52:56编辑过]
回复

使用道具 举报

发表于 2008-1-22 16:57 | 显示全部楼层

<div class="msgheader">QUOTE:</div><div class="msgborder"><b>以下是引用<i>suye1010</i>在2008-1-22 16:52:00的发言:</b><br/><p>Function shijian(r1 As String, r2 As String, j As String)<br/>Dim arr1, arr2<br/>arr1 = Split(Mid(r1, 1, Len(r1) - 1), "分")<br/>arr2 = Split(Mid(r2, 1, Len(r2) - 1), "分")<br/>shijian = IIf(j = "+", --arr1(0) + --arr2(0) &amp; "分" &amp; --arr1(1) + --arr2(1) &amp; "秒", arr1(0) - arr2(0) &amp; "分" &amp; arr1(1) - arr2(1) &amp; "秒")<br/>End Function<br/></p><p>我的五行代码*_^</p><br/></div><p>不符合题义 </p><p>如果第一个时间的秒数比第二个时间的秒数<font color="#f70909">小</font>,那么得出的结果是错误的</p>
回复

使用道具 举报

 楼主| 发表于 2008-1-22 17:57 | 显示全部楼层

我先发上来让大家看看

<p>Function sjjs(r1 As Range, r2 As Range, Optional fh As String = "+")<br/>'44分50秒+10分2秒=54分52秒<br/>Dim ss&amp;<br/>Dim r1s$, r2s$<br/>r1s = Replace(r1, "分", "*60+")<br/>r1s = Replace(r1s, "秒", "")<br/>r2s = Replace(r2, "分", "*60+")<br/>r2s = Replace(r2s, "秒", "")<br/>ss = Evaluate(r1s &amp; fh &amp; r2s)<br/>sjjs = ss \ 60 &amp; "分" &amp; ss Mod 60 &amp; "秒"<br/>End Function</p><p>很高兴能引起兰版的注意,与大家一起学习<br/></p><p>[em01]</p><p>问题VBA中replace为什么不能向函数一样嵌套?</p>
回复

使用道具 举报

发表于 2008-1-22 18:11 | 显示全部楼层

<p>学习了,replace可以嵌套的。</p><p>Function sjjs(r1 As Range, r2 As Range, Optional fh As String = "+")<br/>'44分50秒+10分2秒=54分52秒<br/>Dim ss&amp;<br/>Dim r1s$, r2s$<br/>'r1s = Replace(r1, "分", "*60+")<br/>r1s = Replace(Replace(r1, "分", "*60+"), "秒", "")<br/>'r2s = Replace(r2, "分", "*60+")<br/>r2s = Replace(Replace(r2, "分", "*60+"), "秒", "")<br/>ss = Evaluate(r1s &amp; fh &amp; r2s)<br/>sjjs = ss \ 60 &amp; "分" &amp; ss Mod 60 &amp; "秒"<br/>End Function</p>
回复

使用道具 举报

发表于 2008-1-22 18:15 | 显示全部楼层

<div class="msgheader">QUOTE:</div><div class="msgborder"><b>以下是引用<i>zjxia889</i>在2008-1-22 17:57:00的发言:</b><br/><p>Function sjjs(r1 As Range, r2 As Range, Optional fh As String = "+")<br/>'44分50秒+10分2秒=54分52秒<br/>Dim ss&amp;<br/>Dim r1s$, r2s$<br/>r1s = Replace(r1, "分", "*60+")<br/>r1s = Replace(r1s, "秒", "")<br/>r2s = Replace(r2, "分", "*60+")<br/>r2s = Replace(r2s, "秒", "")<br/>ss = Evaluate(r1s &amp; fh &amp; r2s)<br/>sjjs = ss \ 60 &amp; "分" &amp; ss Mod 60 &amp; "秒"<br/>End Function</p><p>很高兴能引起兰版的注意,与大家一起学习<br/></p><p>[em01]</p><p>问题VBA中replace为什么不能向函数一样嵌套?</p></div><p></p>你的自定义函数是不是不支持<font color="#ee0000">减</font>啊? 我的代码同时支持加和减,而且代码比你少了很多行,呵呵,继续努力
[此贴子已经被作者于2008-1-22 18:15:34编辑过]
回复

使用道具 举报

发表于 2008-1-22 18:18 | 显示全部楼层

<div class="msgheader">QUOTE:</div><div class="msgborder"><b>以下是引用<i>兰色幻想</i>在2008-1-22 16:57:00的发言:</b><br/><div class="msgheader">QUOTE:</div><div class="msgborder"><b>以下是引用<i>suye1010</i>在2008-1-22 16:52:00的发言:</b><br/><p>Function shijian(r1 As String, r2 As String, j As String)<br/>Dim arr1, arr2<br/>arr1 = Split(Mid(r1, 1, Len(r1) - 1), "分")<br/>arr2 = Split(Mid(r2, 1, Len(r2) - 1), "分")<br/>shijian = IIf(j = "+", --arr1(0) + --arr2(0) &amp; "分" &amp; --arr1(1) + --arr2(1) &amp; "秒", arr1(0) - arr2(0) &amp; "分" &amp; arr1(1) - arr2(1) &amp; "秒")<br/>End Function<br/></p><p>我的五行代码*_^</p><br/></div><p>不符合题义 </p><p>如果第一个时间的秒数比第二个时间的秒数<font color="#f70909">小</font>,那么得出的结果是错误的</p></div><p>&nbsp;的确是这样的。Let,s me 想想……<br/></p>
[此贴子已经被作者于2008-1-22 18:23:57编辑过]
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-18 21:46 , Processed in 0.258188 second(s), 3 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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