精华内容
下载资源
问答
  • vba自定义函数
    2021-05-30 00:44:32

    VBA 自定义函数语法

     Sub subName( [(argList)] )
    

    argList 为参数列表,一个函数允许声明多个参数,各个参数之间用逗号( , )隔开。参数声明语法如下文。

    	'参数的语法
    	[Optional]  [ByVal|ByRef] [ParamArray] varname[()] [As type]  [=defaultvalue] )  
    
    更多相关内容
  • VBA自定义函数智能提示.rar office版本;输入=my
  • VBA 自定义函数大全
  • 161个VBA 自定义函数

    2018-12-15 21:38:43
    161个VBA自定义函数大全,龙族联盟论坛 shcnmartin收集整理。现奉献出来让更多需要的人学习借鉴!
  • EXCEL VBA自定义函数.exe

    2020-12-24 15:32:40
    自定义函数
  • VBA_自定义函数大全

    2017-12-04 20:08:23
    VBA_自定义函数大全,讲解详细,希望对爱好者能有所帮助。
  • word版160多个VBA自定义函数大全,功能强大,复制进excel里就能使用。
  • 《excel吧提问-单元格多数值》,返回多个单元格中出现最多... '函数定义majority(单元格1,单元格2,...)返回多个单元格出现次数最多/少的单元格的值 '适用多个单元格、单元格区域;2种查找模式,"+"即多数、"-"即少数

    《excel吧提问-单元格多数值》,返回多个单元格中出现最多次数的单元格的值

    适用多个单元格和单元格区域,可查找多数、少数的单元格值

    Function majority(mode, ParamArray args())
        '函数定义majority(单元格1,单元格2,...)返回多个单元格出现次数最多/少的单元格的值
        '适用多个单元格、单元格区域;2种查找模式,"+"即多数、"-"即少数
        Dim a, aa, i, k, v, m, x, dict As Object, result
        Set dict = CreateObject("scripting.dictionary")
        For Each a In args
            If Not IsArray(a) Then
                t = a.Value
                dict(t) = dict(t) + 1
            Else
                For Each aa In a
                    t = aa.Value
                    dict(t) = dict(t) + 1
                Next
            End If
        Next
        k = dict.keys
        v = dict.Items
        result = Array()
        If mode = "+" Then
            m = WorksheetFunction.Max(v)  '最多次数
        ElseIf mode = "-" Then
            m = WorksheetFunction.Min(v)  '最少次数
        End If
        For i = 0 To dict.count - 1:  '遍历字典
            If v(i) = m Then
                x = UBound(result) + 1
                ReDim Preserve result(x)
                result(x) = k(i)
            End If
        Next
        majority = Join(result, ",")
        
    End Function
    

    举例

    在这里插入图片描述

    展开全文
  • VBA自定义函数. 6个简单而有用的VBA自定义函数.
  • VBA自定义函数(查找当前行之前同项目的其他列).xls
  • Excel·VBA自定义函数扩展VLOOKUP

    千次阅读 2022-02-18 22:57:22
    但局限性在于,只能返回匹配到第1个值,如果需要返回指定第N个值,就需要编写自定义函数进行扩展 Function VLOOKUP_INDEX(lookup_value As String, table_array As Range, Optional col_index As Integer = 2, ...

    VLOOKUP函数功能是按列查找、最终返回该列所需查询所对应的值,是Excel中广泛应用的查找、核对的函数

    1,VLOOKUP_INDEX查找指定的第N个值

    VLOOKUP函数,只能返回匹配到第1个值,如果需要返回指定第N个值,就需要编写自定义函数进行扩展

    Function VLOOKUP_INDEX(lookup_value As String, table_array As Range, Optional col_index As Integer = 2, Optional index As Integer = 1) As String
        '函数定义VLOOKUP_INDEX(要查找的值,查找区域,匹配值所在列数,需要返回第几个匹配的值)返回与要查找的值匹配的结果
        Dim i As Long, find_cell As Range, cell_address As String
        With table_array.Columns(1)
            '如果区域第1个单元格等于查找的值,则将该单元格赋值cell;否则使用find查找,将单元格赋值cell
            If .Cells(1) = lookup_value Then  'range.find方法不是从第1个开始查找
                Set find_cell = .Cells(1)
            Else
                '按值查找xlValues,完全匹配xlWhole
                Set find_cell = .Find(lookup_value, LookIn:=xlValues, lookat:=xlWhole)
            End If
            If Not find_cell Is Nothing Then  '未发现匹配项时,find方法返回 Nothing
                cell_address = find_cell.Address  '记录单元格地址
                Do
                    i = i + 1
                    If i = index Then  '如果是需要返回的index,则返回对应的匹配值
                        VLOOKUP_INDEX = find_cell.Offset(0, col_index - 1)
                        Exit Function
                    Else
                        Set find_cell = .Find(lookup_value, find_cell, LookIn:=xlValues, lookat:=xlWhole)  '查找下一个
                    End If
                Loop While Not find_cell Is Nothing And find_cell.Address <> cell_address
            Else
                VLOOKUP_INDEX = "#无匹配值"
            End If
        End With
        
    End Function
    
    Sub VLOOKUP_INDEX帮助信息()
        '运行一次后该帮助信息生效
        Dim 函数名称 As String        '函数名称
        Dim 函数描述 As String        '函数描述
        Dim 参数个数(0 To 3) As String     '函数参数描述 数组 个数
        
        函数名称 = "VLOOKUP_INDEX"
        函数描述 = "扩展VLOOKUP,可以指定返回第几个匹配的值,完全匹配"
        参数个数(0) = "要查找的值,单元格、文本字符串"
        参数个数(1) = "查找区域,同VLOOKUP,第1列包含要查找的值"
        参数个数(2) = "匹配值所在列数,同VLOOKUP,数字"
        参数个数(3) = "需要返回第几个匹配的值,数字"
        
        Call Application.MacroOptions(macro:=函数名称, Description:=函数描述, ArgumentDescriptions:=参数个数)
        
    End Sub
    

    举例

    G2处查找第2个符合条件的值,公式 =VLOOKUP_INDEX(F1,A1:B9,2,2)
    VLOOKUP_INDEX

    2,VLOOKUP_ALL查找所有符合条件的值

    VLOOKUP函数,只能返回匹配到第1个值,如果需要返回所有的值,就需要编写自定义函数进行扩展

    Function VLOOKUP_ALL(lookup_value As String, table_array As Range, Optional col_index As Integer = 2) As String
        '函数定义VLOOKUP_ALL(要查找的值,查找区域,匹配值所在列数)返回与要查找的值匹配的所有结果
        Dim arr, i As Long, delimiter As String, srr, n
        arr = table_array.Value
        delimiter = ","   '分隔符
        srr = Array()  '保存匹配的值,空数组
        For i = LBound(arr) To UBound(arr)
            If arr(i, 1) = lookup_value Then
                n = UBound(srr) + 1
                ReDim Preserve srr(n)  '重定义数组长度,但数据保留
                srr(n) = arr(i, col_index)
            End If
        Next
        If UBound(srr) = -1 Then
            VLOOKUP_ALL = "#无匹配值"
        Else
            VLOOKUP_ALL = Join(srr, delimiter)
        End If
        
    End Function
    
    Sub VLOOKUP_ALL帮助信息()
        '运行一次后该帮助信息生效
        Dim 函数名称 As String        '函数名称
        Dim 函数描述 As String        '函数描述
        Dim 参数(0 To 2) As String     '函数参数描述 数组 个数
        
        函数名称 = "VLOOKUP_ALL"
        函数描述 = "扩展VLOOKUP,可以返回所有匹配的值并用“,”分隔,完全匹配"
        参数(0) = "要查找的值,单元格、文本字符串"
        参数(1) = "查找区域,同VLOOKUP,第1列包含要查找的值"
        参数(2) = "匹配值所在列数,同VLOOKUP,数字"
        
        Call Application.MacroOptions(macro:=函数名称, Description:=函数描述, ArgumentDescriptions:=参数)
        
    End Sub
    

    举例

    在这里插入图片描述

    展开全文
  • VBA自定义函数__获取字符串首字母拼音.xlsm
  • 今天的文章真的厉害了,我们都知道excel有很多强大的函数。比如sum,count,if非常的好用。那我们能不能自己定义函数来使用呢! 当然可以,下面我们就来定义函数并且使用它。 案例一: 提取身份证中的生日,如下图...

    今天的文章真的厉害了,我们都知道excel有很多强大的函数。比如sum,count,if非常的好用。那我们能不能自己定义函数来使用呢!

    当然可以,下面我们就来定义函数并且使用它。

    案例一:

    提取身份证中的生日,如下图:

    用excel自带的函数也可以实现

    • 方法1.MID(A1,7,4)&"/"&MID(A1,11,2)&"/"&MID(A1,13,2)

    • 方法2.TEXT(MID(A1,7,8),"0000/00/00")

    但是方法1,太长了,比较复杂。方法2呢,对函数不是特别熟练的小伙伴想不到混合使用。最重要的是上面两个方法得出的数据不是日期格式而是文本格式,我们无法通过设置单元格格式更改日期显示方式。所以我们可以自己定义一个提取身份证中生日的信息来使用。

    代码:

    Function tqsr(str As String)    Dim rq As String     rq = Mid(str, 7, 8)     '在函数中给函数名赋值,意思就是这个函数的返回值。    tqsr = DateSerial(Left(rq, 4), Mid(rq, 5, 2), Right(rq, 2))End Function

    注意:在函数中给函数名赋值,意思就是这个函数的返回值。

    dateserial函数返回的结果是一个数值,所以需要我们自己手动设置一下单元格格式。在调用函数前选中整列设置为日期格式,或者调用后再设置格式也可以。

    结果如下图:

    我们选中这列自己设置一下想要的格式即可:

    上面的例子看完,你可能对自定义函数还是不屑一顾。自定义函数特别好的一点是它可以把vba的函数用到工作表中,那工作表函数的功能真是如虎添翼了!再来看一个例子。

     

    案例二:

    把A列的品类,产品,年份,周,款式号信息提取出来

    用工作表的mid函数也可以完成,但是很复杂,还要每次去数在A列中第几位。那下面我们就用vba的split函数来搞定它。上一篇文章我们已经讲过split的用法,这里再重复一下,以后不再重复。

    用法:

    • Split("pw-023-2015-37-001", "-")就是将字符串"pw-023-2015-37-001"以 "-"为分隔符分割。结果会得到一个数组,下标从零开始。

    • Split("pw-023-2015-37-001", "-")(0)就是取第1个数据pw

    • Split("pw-023-2015-37-001", "-")(1)就是取第2个数据023

    • Split("pw-023-2015-37-001", "-")(2)就是取第3个数据2015

    代码:

    '三个参数分别代表,要分割的字符串,分隔符,要取数组的第几位Function jqzf(str As String, str1 As String, i As Integer)    jqzf = Split(str, str1)(i - 1)End Function

    调用:

    现在有一个问题。那就是这个代码只能在当前工作簿中使用,我怎么才能让每一个工作簿都能使用它呢。

    • 第一步:新建一个excel文件。打开文件,打开visual basic,插入一个模块,把你的函数都放在里面,形成你的函数库。然后把新建的excel文件另存为.xla的格式,名称可以叫函数库,路径不要选。

    • 第二步:打开一个.xlsx文件,点击开发工具下面的加载项,勾选你的函数库就可以了。以后你的excel就会比别人多一些函数功能了。

     


    加了函数库好像excel也没有比别人的高大上,别急,下面我们把宏都加载上去,在主程序上直接使用,和保存按钮放在一起,是不是瞬间感觉很厉害。

    怎么做呢,其实和上面函数库差不多

    • 第一步:新建一个excel文件。打开文件,打开visual basic,插入一个模块,把你的宏都放在里面,形成你的代码库。然后把新建的excel文件另存为.xla的格式,名称可以叫函数库,路径不要选。

    • 第二步:打开一个.xlsx文件,点击开发工具下面的加载项,勾选你的代码库

    • 第三步:在选项-》快速访问工具栏中选择宏,选择需要执行的宏操作

    还可以修改名称和图标:

    然后你的excel就高人一等了。别人都没有,就我有。直接点击就可以使用,是不是很酷。

     

    之后我会不定时分享一些自定义函数和代码填充你们的代码库

    每天学一点,薪资翻一番。看了这篇文章觉得对你有用的话,关注我的公众号“学会数据分析”并且用你的小手帮忙分享一下

    展开全文
  • VBA自定义函数高仿工作表函数TEXTJOIN CONCAT FILTER EVALUATE
  • 他山之石——VBA自定义函数

    千次阅读 2018-06-24 23:24:50
    VBA自定义函数自己是最近才开始使用的。其好处是可在工作表中直接调用,很方便。这里,这位老师总结的很好,学习了!'1 什么是自定义函数? '在VBA中有VBA函数,我们还可以调用工作表函数,我们能不能自已编写函数...
  • 他山之石——VBA自定义函数2.pdf
  • Excel VBA_自定义函数
  • 给Excel VBA 自定义函数添加说明
  • VBA 自定义函数

    千次阅读 2013-06-12 21:50:46
    二、自定义函数自定义函数是用户自己编写的函数;一个自定义函数就是一个function过程;编写了一个function过程就相当于编写了一个自定义函数。三、为什么要创建自定义函数1.简化工作,解决需要较多辅助列或使用较长...
  • 75.删除单元格自定义名称 76.从文件路径中取得文件名 77.取得一个文件的扩展名 78.取得一个文件的路径 79.十进制转二进制 80.检查一个数组是否为空 81.字母栏名转数字栏名 82.数字栏名转文字栏名 83.判断一件活页夹...
  • VBA自定义函数

    2013-10-08 14:31:49
    一本不错的介绍VBA各类自定义参数的文档,一共有161个自定义应用。
  • vba自定义函数大全

    2010-11-24 22:13:39
    学习vba的好资源,对vba学习者有很大的帮助
  • 求助vba 自定义函数 自定义函数 qmc(a2) '取名称 根据q2的值在 另一未打开的工作薄D:\kuwe\dosktop\数据.xls ,查找a2的值,如果在数据.xls 的 a18单元格 查到a2的值则返回c18的数据 需要在未打开工作薄的情况下...
  • 做excel发现现有的函数功能不够用,就自学了一下VBA写了第一个新函数:根据条件连接字符串 比如count()有countif()和countifs(),sum()有sumif()和sumifs(),但是concatenate()却没有类似concatenateifs()的函数,...
  • VBA-汉字转拼音-自定义函数.xls
  • Vba自定义函数大全

    2010-08-25 21:32:37
    很不错的vba自定义函数集,对Excel下的OA很有用
  • VBA自定义函数大全

    2010-10-26 21:15:31
    搜录了相当多的自定义函数,非常不错的资源
  • VBA 自定义函数大全

    2008-11-23 16:17:41
    VBA 自定义函数大全VBA 自定义函数大全

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,810
精华内容 1,924
关键字:

vba自定义函数