自定义函数备案
zipall吧
全部回复
仅看楼主
level 14
zipall 楼主
本贴搜集整理一些比较有用的自定义函数
2014年05月19日 09点05分 1
level 14
zipall 楼主
Function eva(Rng As Range) '带备注公式变计算结果 [长]1*[宽]2*[高]3
Set x = CreateObject("MSScriptControl.ScriptControl")
x.Language = "vbscript"
With CreateObject("VBSCRIPT.REGEXP")
.Global = True
.Pattern = "\[.*?\]|{(.*?)}|[^0-9.+-/^*()]"
eva = x.Eval(.Replace(Rng.Text, "$1"))
End With
End Function
2014年05月19日 09点05分 2
用法示例 =eva(a1)
2014年05月19日 09点05分
@zipall 看不懂 能不能举例说明
2016年01月08日 01点01分
@林木木818 按住alt依次按f11,i,m 粘贴代码后回到excel中就可以用eva函数了.
2016年01月08日 01点01分
2016年01月08日 01点01分
level 14
zipall 楼主
同一单元格返回多个符合条件值的MLookup
Function MLookup(val, array1 As Range, array2 As Range, f As Byte) As String
'val 为要查找的值
'array1 要在其中查找的矩形区域,可单列(行) 或多行多列
'array2 是要返回相应值的与array1等大的矩形区域
'f 为0时精确查找,为1时模糊查找
Dim c As Range, FirstAddress As String
With array1
Set c = .Find(val, .Cells(.Count), xlValues, f + 1)
If Not c Is Nothing Then
FirstAddress = c.Address
Do
MLookup = MLookup & "," & array2.Cells(c.Row - .Row + 1, c.Column - .Column + 1).Text
Set c = .Find(val, c, xlValues, f + 1)
Loop Until c.Address = FirstAddress
End If
MLookup = Mid(MLookup, 2)
End With
End Function
2014年05月19日 09点05分 3
用法示例 =Mlookup(a1,d:d,c:c,0)
2014年05月19日 09点05分
@zipall 老大,我按照你说的粘贴在表格里面了,可以用了,但是我打开新表就不能用了,有没有什么方法让整个excel都可以用呢?
2016年01月14日 02点01分
@左夜右篱 百度下 自定义函数 加载宏
2016年01月19日 02点01分
level 14
zipall 楼主
Public Function xiaoxie(cJine As String) '大写人民币转小写
Dim i As Byte, t$, n As Byte, w As Byte, f As Integer
i = 0
f = IIf(Left(cJine, 1) = "负", -1, 1)
Do While cJine <> ""
i = i + 1
t = Left(cJine, 1)
n = InStr("壹贰叁肆伍陆柒捌玖", t)
If n > 0 Then
w = InStr("分角元拾佰仟", Mid(cJine, 2, 1))
If w > 0 Then
xiaoxie = xiaoxie + n * 10 ^ (w - 3)
cJine = Mid(cJine, 3)
Else
xiaoxie = xiaoxie + n
cJine = Mid(cJine, 2)
End If
ElseIf InStr("亿万元", t) > 0 Then
xiaoxie = xiaoxie * 10 ^ IIf(Left(cJine, 1) = "元", 0, IIf(InStr(cJine, "万") = 0 And Left(cJine, 1) = "亿", 8, 4))
cJine = Mid(cJine, 2)
Else
cJine = Mid(cJine, 2)
End If
Loop
xiaoxie = xiaoxie * f
End Function
2014年05月19日 09点05分 4
level 14
zipall 楼主
Function countv(x As Range, y As String, z) As Integer '可见单元格条件计数
Set x = Application.Intersect(x.Parent.UsedRange, x)
If Not IsNumeric(z) Then z = """" & z & """"
With x
For r = 1 To .Rows.Count
If Not .Rows(r).EntireRow.Hidden Then
For c = 1 To .Columns.Count
t = .Cells(r, c).value
If Not IsNumeric(t) Then t = """" & t & """"
If Application.Evaluate(t & y & z) Then countv = countv + 1
Next
End If
Next
End With
End Function
2014年05月19日 09点05分 5
用法示例 =countv(a:a,">",10)
2014年05月19日 09点05分
level 6
天这么好的帖子居然藏起来,为什么不给我们看啊[吃惊]
2014年06月03日 12点06分 6
level 11
太高深……
2016年01月11日 08点01分 7
level 8
[顶]给跪了!!!
2016年01月14日 02点01分 8
level 7
我也来增加一些。原创
Function rr(str As String, pat As String, newStr As String)
Application.Volatile
With CreateObject("VBScript.RegExp")
.Global = True
.Pattern = pat
rr = .Replace(str, newStr)
End With
End Function
用法如图:
2016年03月20日 01点03分 9
[真棒] 这个是万精油
2016年03月21日 01点03分
完全看不懂。。。但是却跟我实际问题有关。能给解析下吗?我把你图里的公式完全搬过来,但是显示#VALUE!
2017年12月21日 02点12分
怎么不显示字?
2017年12月21日 02点12分
完全看不懂呀,但是又跟我的实际问题有关,大神能给解析下吗?我照办你 的EVA公式,但是不能实现呢,是不是公式里那些字段还得自己改着写啊?
2017年12月21日 02点12分
level 7
小写转大写。原创
代码秒删,发个图上来先。
2016年03月20日 01点03分 12
用正则写的,吧主肯定少见。[哈哈]
2016年03月20日 02点03分
level 7
大写转小写。非原创
Function DxToN(ss) '大写金额转小写
For i% = 1 To 9
ss = Replace(ss, Mid("壹贰叁肆伍陆柒捌玖", i, 1), i)
ss = Replace(ss, Mid("一二三四五六七八九", i, 1), i)
Next
For i% = Len(ss) To 1 Step -1
s$ = Mid$(ss, i, 1)
X% = InStr("分角圆拾佰仟万拾佰仟亿拾佰仟兆", s)
If X = 0 Then X% = InStr("分毛元十百千万十百千亿十百千兆", s)
If X = 0 Then X% = InStr("分毛块十百千万十百千亿十百千兆", s)
If X Then j% = IIf(j% < X, X, ((j - 3) \ 4) * 4 + X)
If Val(s) Then m
# = m#
+ (s & String(j - 1, "0")) / 100
Next
DxToN = Round(m, 2)
If InStr(ss, "-") Or InStr(ss, "负") Then DxToN = -DxToN
End Function
2016年03月20日 01点03分 13
感觉比较厉害,元、块、毛 这些都单位不放过。
2016年03月20日 02点03分
元、块、毛 这些单位都不落下。
2016年03月20日 02点03分
这个比4楼的好用
2016年03月21日 01点03分
level 1
[乖]天啊,,,,,我这小白,,看不懂,。。好可怜
2021年05月18日 09点05分 16
1