返回目录:excel表格制作
举例说明。
例如要做一个单元格求抄和的自定义函数袭,比sum函数增加一个条件,就是如果单元格有删除线标记,则不计入该百单元格的数值。如图:
第一步:在度visual basic模式下插入模问块,并创建自定义函答数。代码如下:
Public Function mysum(qu As Range)
Dim s As Double
Dim b
mysum = 0
For Each b In qu
If b.Font.Strikethrough = False Then
mysum = mysum + b.Value
End If
Next
End Function
第二步:在c15单元格输入公式:=mysum(C4:C14)。结果如图:
比如A列
=lookup(1,0/(a1:a100<>""),row(1:100))
返回A1:A100最后一个复不为空的单制元格所在百的行号
---
如果是返回值度,则公式改成:
=lookup(1,0/(a1:a100<>""),a1:a100)
Excel有虽然有自带函数库,并不是很够用,不能满足所有可能出现的情况,有时候就需要使用自定义函数。
1、打开Excel程序,点击“工具”中的“宏”,选择“Visual Basic编辑器”选项。(按“Alt+F11”快捷键也可以实现)。
2、会跳出“Visual Basic编辑器-Book1”窗口。在“Visual Basic编辑器-Book1”窗口中,点击“插入”中的“模块”项。
3、会跳出命令窗口。在“Book1-模块1(代码)”窗口里输入你需要自定义的函数:
(举个例子)这里求三角形面积
自定义函数是用function命令开始的,在这个命令后面给它指定一个名字和参数
输入内容如下:
Function S(a, h)
S = a* h / 2
End Function
这段代码非常简单只有三行,第e5a48de588b6e799bee5baa6364一行,其中S是自己取的函数名字,括号中的是参数,也就是变量,a表示“底边长”,h表示“高”,两个参数用逗号隔开。
第二行,这是计算过程,将a*h/2这个公式赋值给S,即自定义函数的名字。
第三行,它是与第一行成对出现的,当你手工输入第一行的时候,第三行的end function就会自动出现,表示自定义函数的结束。
4、输入完毕,关闭窗口,自定义的函数就完成了。【你需要有一定的VB基础知识】
5、然后就是自定义函数实际的运用了,运用前可以做个简单的检验,看看是不是准确,一般来是不会错的。
有时候自定义复杂函数,需要基本的数学知识和VBA基础,这需要自身的日积月累了。
【注意事项】
自定义的函数虽然可以像内置函数一样使用,不过却并不是真正的内置函数,只能用于当前工作簿。
公式要分怎么写,总有解决办法的。7a64e58685e5aeb9337
试试这个:
=SUMPRODUCT(--TEXT(SUBSTITUTE(RIGHT(A1:F1,5),"-",)-SUBSTITUTE(LEFT(A1:F1,5),"-",),"h"))
=======================
【跟进回答】:
根据你在评论里提出来的需求,对公式作了优化。
=SUM(IFERROR((SUBSTITUTE(RIGHT(A1:F1,5),"-",)-SUBSTITUTE(LEFT(A1:F1,5),"-",))*24,))
注意:此公式是数组公式,必须按 SHIFT+CTRL+回车 三键退出单元格。
这个图,是又进一步优化,对小数位数作了限制,四舍五入保留1位小数。
=ROUND(SUM(IFERROR((SUBSTITUTE(RIGHT(A1:F1,5),"-",)-SUBSTITUTE(LEFT(A1:F1,5),"-",))*24,)),1)
注意:此公式还是需要三键结束。
=============
另外说说开始的那个公式中的两个负号,因为TEXT函数得出的数字是文本类型的,无法进行求和,所以加两个负号,目的是让文本类型的数字参与运算,就会自动转化为数值类型的数字,就可以求和了。