精华内容
下载资源
问答
  • vba自定义类型返回函数vba自定义类型返回函数vba自定义类型返回函数
  • 返回一个变量大小结果数组的方法 此方法返回基于一个参数范围的值的数组。...下面的自定义函数接受作为其参数的数组 (某一范围的值): Function Multiply_Range(myrange As Object) As Variant Dim te...

    返回一个变量大小结果数组的方法

    此方法返回基于一个参数范围的值的数组。结果数组的大小具体取决于参数数组中的元素数量波动。例如对于假定您要创建一个范围中的每个值乘以 100 的函数。下面的自定义函数接受作为其参数的数组 (某一范围的值):

          Function Multiply_Range(myrange As Object) As Variant
          Dim temp As Variant
          Dim i As Integer, j As Integer
          temp = myrange.Value 'creates a copy of the values in myrange
          ' if more than one element then loop through both dimensions of
          ' the array and multiply each element by 100.
          ' if not more than one element then temp is multiplied by 100.
          If IsArray(temp) Then
             For i = 1 To UBound(temp, 1)
                For j = 1 To UBound(temp, 2)
                   temp(i, j) = temp(i, j) * 100
                Next j
             Next i
          Else
             temp = temp * 100
          End If
          Multiply_Range = temp
       End Function
    				

    若要用于自定义函数中的单元格 A1:A4 中输入以下数据:

    A1: 5
    A2: 3
    A3: 1
    A4: 2

    选择范围 B1:B4 并以数组形式输入以下公式:

    =Multiply_Range(A1:A4)

    注意: 上述公式必须以数组公式的形式输入。若要将公式作为数组公式,在 Excel 中输入 windows,请按 CTRL + SHIFT + ENTER。在 Excel 中为 Macintosh,请按命令 + ENTER。

    结果将是:

       A1:     5       B1:     500
       A2:     3       B2:     300
       A3:     1       B3:     100
       A4:     2       B4:     200
    				
     

    要返回的固定大小数组结果的方法

    此方法从自定义函数返回多个值假定您在所得数组中已经输入固定的个数的元素。

    下面的自定义函数接受起始时间和结束时间,并返回它们在 3 行 1 列数组之间的小时、 分钟和秒数。 >

       Function Elapsed_Time(start, finish As Date) As Variant
          Dim hours, minutes, seconds As Integer
          hours = Hour(finish - start)
          minutes = Minute(finish - start)
          seconds = Second(finish - start)
          Elapsed_Time = Application.Transpose(Array(hours, minutes, seconds))
       End Function
    				



    若要用于此自定义的函数 (例如对于 A1 和 A2 下面) 的两个单元格中输入开始时间和完成时间。

    A1: 1: 00: 00
    A2: 6:49:34

    然后,突出显示的列 (例如对于到 A5 A3) 中的三个单元格,并以数组公式的形式输入以下内容:

    =Elapsed_Time(A1,A2)

    注意: 上述公式必须以数组公式的形式输入。若要将公式作为数组公式,在 Excel 中输入 windows,请按 CTRL + SHIFT + ENTER。在 Excel 中为 Macintosh,请按命令 + ENTER。

    该结果将显示,如下所示:

       A1:     1:00:00
       A2:     6:49:34
       A3:     5
       A4:     49
       A5:     34
    				

    如果您希望该函数输入水平代替垂直的单元格区域,更改 Elapsed_Time 该行在以读取行:

    elapsed_Time = 阵列 (小时、 分钟、 秒)

    转载于:https://www.cnblogs.com/lbnnbs/p/4784929.html

    展开全文
  • 函数作用:删除单元格自定义名称.....................88 '76.函数作用:从文件路径中取得文件名...................89 '77.函数作用:取得一个文件的扩展名.....................89 '78.函数作用:取得一个文件的路径.....
  • '自定义函数,将数组中的元素连接起来(可以每个元素两边分别加字符) 'By Gao Dawei,2020-10-09 Function ArrayJoin(ByVal arr As Variant, Optional element_plugin_left As String = "", _ Optional element_...

    方便在sql拼接时使用

    '自定义函数,将数组中的元素连接起来(可以每个元素两边分别加字符)
    'By Gao Dawei,2020-10-09
    Function ArrayJoin(ByVal arr As Variant, Optional element_plugin_left As String = "", _
                      Optional element_plugin_right As String = "", Optional delimiter As String = ",")
      Dim ele As Variant, n As Long
      Dim arr_result() As String
      
      For Each ele In arr
        n = n + 1
      Next
      ReDim arr_result(1 To n) As String
      n = 0
      For Each ele In arr
        n = n + 1
        arr_result(n) = StringFormat("{1}{0}{2}", ele, element_plugin_left, element_plugin_right)
      Next
      ArrayJoin = Join(arr_result, delimiter)
    End Function
    
    '模仿C# string.Format()
    '没有设置数量的判断,使用时自己判断好{n}
    '例:正常写作 "hello " & str,可以用此函数写作StringFormat("hello {0}",str)
    'By Gao Dawei,2020-10-09
    Function StringFormat(ByVal str As String, ParamArray arr_replace_with() As Variant)
        Dim item As Variant
        Dim n As Long, n_source As String
        Dim result As String
        
        result = str
        For Each item In arr_replace_with
            n_source = "{" & n & "}"
            result = Replace(result, n_source, item)
            n = n + 1
        Next
        StringFormat = result
    End Function
    
    
    展开全文
  • UDF.dll包含了一组实用的用户自定义函数,提供了数组处理的快速方法,可以在VB6、VBS、32位VBA中调用。 看完如下的实例代码,就明白它的用处了。 Private MyUDF As New UDF.ArrayConversion Sub 是否包含某元素...

     UDF.dll包含了一组实用的用户自定义函数,提供了数组处理的快速方法,可以在VB6、VBS、32位VBA中调用。

    看完如下的实例代码,就明白它的用处了。

    Private MyUDF As New UDF.ArrayConversion
    Sub 是否包含某元素()
        Dim Array1(2 To 5) As String
        Array1(2) = "Word"
        Array1(3) = "Excel"
        Array1(4) = "Outlook"
        Array1(5) = "Access"
        Debug.Print MyUDF.Contains(Array1, "Excel") '打印结果为True
    End Sub
    Sub 倒序()
        Dim Array1(2 To 5) As String
        Array1(2) = "Word"
        Array1(3) = "Excel"
        Array1(4) = "Outlook"
        Array1(5) = "Access"
        Dim Array2 As Variant
        Array2 = MyUDF.Reverse(Array1) '倒序的结果返回给Array2
        Debug.Print Join(Array2, "/") '打印结果为Access/Outlook/Excel/Word
        MyUDF.ReverseSelf Array1 '直接对Array1进行倒序
        Debug.Print Join(Array1, "/") '打印结果为Access/Outlook/Excel/Word
    End Sub
    Sub 去重()
        Dim Array1(2 To 6) As Integer
        Array1(2) = 22
        Array1(3) = 33
        Array1(4) = 22
        Array1(5) = 44
        Array1(6) = 33
        Dim Array2 As Variant
        Array2 = MyUDF.Distinct(Array1)
        Debug.Print Join(Array2, "/") '打印结果为22/33/44
    End Sub
    Sub 连接数组()
        Dim Array1(2 To 5) As String
        Array1(2) = "Word"
        Array1(3) = "Excel"
        Array1(4) = "Outlook"
        Array1(5) = "Access"
        Dim Array2 As Variant
        Array2 = MyUDF.JoinArray(Array1, Array(1, 2, 3), Array(True, False))
        Debug.Print Join(Array2, "/") '打印结果为Word/Excel/Outlook/Access/1/2/3/True/False
    End Sub
    Sub 排序()
        Dim Array1(2 To 5) As String
        Array1(2) = "Word"
        Array1(3) = "Excel"
        Array1(4) = "Outlook"
        Array1(5) = "Access"
        Dim Array2 As Variant
        Array2 = MyUDF.Sort(Array1)
        Debug.Print Join(Array2, "/") '打印结果为Access/Excel/Outlook/Word
        MyUDF.SortSelf Array1 '对Array1自身升序
        MyUDF.ReverseSelf Array1 '对Array1自身倒序
        Debug.Print Join(Array1, "/") '打印结果为Word/Outlook/Excel/Access
    End Sub
    Sub 检索元素位置()
        Dim Array1(2 To 6) As String
        Array1(2) = "Word"
        Array1(3) = "Excel"
        Array1(4) = "Outlook"
        Array1(5) = "Access"
        Array1(6) = "Excel"
        Debug.Print MyUDF.IndexOf(Array1, "Outlook") '结果:4
        Debug.Print MyUDF.IndexOf(Array1, "outlook") '结果:-1
        Debug.Print MyUDF.LastIndexOf(Array1, "Excel") '结果:6
    End Sub
    Sub 指定位置插入另一数组()
        Dim A(2 To 6) As Integer
        A(2) = 22
        A(3) = 33
        A(4) = 22
        A(5) = 44
        A(6) = 33
        Dim B(-3 To -1) As String
        B(-3) = "Word"
        B(-2) = "Excel"
        B(-1) = "Outlook"
        Dim Array3 As Variant
        Array3 = MyUDF.InsertRange(A, 4, B)
        Debug.Print Join(Array3, "/") '打印结果为22/33/Word/Excel/Outlook/22/44/33
    End Sub
    Sub 删除连续多个元素()
        Dim Array1(2 To 6) As String
        Array1(2) = "Word"
        Array1(3) = "Excel"
        Array1(4) = "Outlook"
        Array1(5) = "Access"
        Array1(6) = "Excel"
        Dim Array2 As Variant
        Array2 = MyUDF.RemoveRange(Array1, 3, 2)
        Debug.Print Join(Array2, "/") '打印结果为Word/Access/Excel
    End Sub
    Sub 部分元素构成新数组()
        Dim Array1(2 To 6) As String
        Array1(2) = "Word"
        Array1(3) = "Excel"
        Array1(4) = "Outlook"
        Array1(5) = "Access"
        Array1(6) = "Excel"
        Dim Array2 As Variant
        Array2 = MyUDF.GetRange(Array1, 3, 3)
        Debug.Print Join(Array2, "/") '打印结果为Excel/Outlook/Access
    End Sub
    Sub 用另一数组覆盖一部分元素()
        Dim Array1(2 To 6) As Integer
        Array1(2) = 2
        Array1(3) = 3
        Array1(4) = 4
        Array1(5) = 5
        Array1(6) = 6
        Dim Array2(2) As String
        Array2(0) = "Word"
        Array2(1) = "Excel"
        Array2(2) = "Outlook"
        Dim Array3 As Variant
        Array3 = MyUDF.SetRange(Array1, 3, Array2)
        Debug.Print Join(Array3, "/") '打印结果为2/Word/Excel/Outlook/6
    End Sub

     

     下载地址:UDF.zip

    下载后解压缩,根据 使用说明.txt 中的内容执行操作。

    注册成功后,可以在VBA添加如下引用:

     

     

    2019/6/28 新增一个求和函数,可以对任意形式的数组进行数值求和,即使嵌套的数组也可以逐层求出。用法如下:

    除了下面列出的实例外,大家如果有其他类型的求和,也可以用该函数试试。

    Sub 对多个参数直接求和()
        '参数个数不限
        Total = MyUDF.Sum(1, 2, 3, "Test", 4)
        Debug.Print Total '返回10
    End Sub
    Sub 对任意数组求和()
        Dim AnyArray As Variant
        AnyArray = Array(-1, -2, Array(3, 4, 5), 6)
        Debug.Print MyUDF.Sum(AnyArray) '返回15
    End Sub
    Sub 对多个数组求和()
        Dim A(1 To 2) As Integer
        Dim B(1 To 3) As Single
        A(1) = 1: A(2) = 2
        B(1) = 1: B(2) = 2: B(3) = 3
        Debug.Print MyUDF.Sum(A, B) '返回9
    End Sub

    转载于:https://www.cnblogs.com/ryueifu-VBA/p/11099415.html

    展开全文
  • 他山之石——VBA自定义函数

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

    VBA自定义函数自己是最近才开始使用的。其好处是可在工作表中直接调用,很方便。

    这里,这位老师总结的很好,学习了!

    '1 什么是自定义函数?
      '在VBA中有VBA函数,我们还可以调用工作表函数,我们能不能自已编写函数呢?可以,这就是本集所讲的自定义函数
      
    '2 怎么编写自定义函数?
     
       '我们可以按下面的结构编写自定义函数
      
        ' Function 函数名称(参数1,参数2....)
             
             '代码
             '函数名称=返回的值或数组
             
        ' End Function
        
    
    '1 取得工作表总个数的自定义函数
    
    Function shcount()
    
     shcount = Sheets.Count
     
    End Function
    Sub dd()
     MsgBox getv(Range("a7"))
    End Sub
    
    
    '2 取得单元格显示值的自定义函数
     
      Function getv(rg As Range)
      
        getv = rg.Text
        
      End Function
     
    '3 截取字符串的函数
     
     Function jiequ(sr As String, fh As String, wz As Integer)
        
        Dim Arr
        Arr = Split(sr, fh)
        jiequ = Arr(wz - 1)
        
     End Function
      
    '4 提取不重复值的个数
    
      Function 不重复个数(rg As Range)
       Dim d, Arr, ar
       Arr = rg
       Set d = CreateObject("scripting.dictionary")
       For Each ar In Arr
         d(ar) = ""
       Next ar
       不重复个数 = d.Count
      End Function
     Sub test()
      
      MsgBox jiequ("A-BRT-C-EF", "-", 2)
      
     End Sub
    
    '1 怎么让自定义函数在所有工作簿中使用?
      
       '答: 把含有自定义函数的文件另存为加截宏,然后通过工具-加截宏-浏览找到这个文件-确定。
       
    '2 怎么给自定义函数添加说明
    
        '工具-宏-宏名输入自定义函数的名称-选项--在说明栏中写入这个函数的名称
        
    '3、怎么给自定义函数分类
    
        Sub 分类()
         Application.MacroOptions "不重复个数", Category:=4
        End Sub
         
       '注:
             '0 是全部
             '1 财务
             '2 日期和时间
             '3 数学和三角
             '4 统计
             '5 查找和引用
             '6 数据库
             '7 文本
             '8 逻辑
             '9 信息
         

    展开全文
  • 今天的文章真的厉害了,我们都知道excel有很多强大的函数。比如sum,count,if非常的好用。那我们能不能自己定义函数来使用呢! 当然可以,下面我们就来定义函数并且使用它。 案例一: 提取身份证中的生日,如下图...
  • VBA示例函数之 求人不如自已动手 统计数组中非重复数据个数,供初学者参考,大牛勿进~~~~~~~
  • VBA关于区域组合的自定义函数 ExcelVBA引用单元格区域在使用ExcelVBA进行编程时,我们通常需要频繁地引用单元格区域,然后再使用相应的属性和方法对区域进行操作。所谓单元格区域,指的是单个的单元格...
  • Function ConTxt(ParamArray args() As Variant) As VariantDim tmptext As Variant, i As Variant, cellv As VariantDim cell As Rangetmptext = ""For i = 0 To UBound(args) If Not IsMissing(args(i)) ...
  • 上次我介绍了有规律字符串的提取方法,使用excel自带函数RIGHT()和LEN()实现。但是对于要提取的字符串如果我们不能确定其字符数, 那么我们使用这种方式就无能为力。如下要提取H列里每个单元格课程的...自定义函数
  • 50.对多个用同一分隔符分隔的待查找元素,逐一在表区域首列内搜索,将返回选定单元格的值相加,相当于多个vlookup函数相加,对于查找不到的元素在批注中添加,以提醒用户。 51.根据个人所得税(工资)反算工资数 52....
  • 做excel发现现有的函数功能不够用,就自学了一下VBA写了第一个新函数:根据条件连接字符串 比如count()有countif()和countifs(),sum()有sumif()和sumifs(),但是concatenate()却没有类似concatenateifs()的函数,...
  • VBA 自定义函数

    2013-06-12 21:50:46
    二、自定义函数自定义函数是用户自己编写的函数;一个自定义函数就是一个function过程;编写了一个function过程就相当于编写了一个自定义函数。三、为什么要创建自定义函数1.简化工作,解决需要较多辅助列或使用较长...
  • 除了内置函数外,VBA还允许编写用户定义的函数。 在本章中,我们将学习如何在VBA中编写自己的函数函数定义 一个VBA函数可以有一个可选的return语句。如果要从函数返回值,则可使用return语句。例如,可以在一个...
  • VBA用户自定义函数

    千次阅读 2018-12-08 22:30:53
    除了内置函数外,VBA还允许编写用户定义的函数。 一个VBA函数可以有一个可选的return语句。如果要从函数返回值,则可使用return语句。 例如,可以在一个函数中传递两个数字,然后从函数返回它们的乘积。 注 - ...
  • 在实际操作中有太多的数据需要去重仅保留一条记录,在这里自己写了两个函数,测试OK,需要可以自己稍微改动就可以使用啦。 1.两个数据源合并,仅取第一次出现的数据,具体代码如下,因为注释比较详细,在这里就不...
  • 数组作为返回值的自定义函数 Application. Caller属性 例 在使用公式进行按条件查找时,经常需要返回满足条件的所有记录。然而Excel的大部分查找函数只能返回满足条件的第一个记录。可以自定义一个函数进行...
  • VBA基础知识整理(字典,自定义函数

    千次阅读 多人点赞 2019-05-13 16:40:59
    '1 什么是VBA字典? '字典(dictionary)是一个储存数据的小仓库。共有两列。 '第一列叫key , 不允许有重复的元素。 '第二列是item,每一个key对应一个item,本列允许为重复 'Key item 'A 10 'B 20 ...
  • 自定义函数 一、函数使用 自定义的函数如果要在 excel 表格中直接引用的话,需要在模块中定义,实测工作表和工作簿中...vba 函数可以返回数组,只要将函数名变量赋值为数组即可 二、函数参数 支持选择参数 支持...
  • VBA-自定义实用函数

    2017-07-02 22:14:00
      总结自定义VBA函数,补充《基于Office_VBA的数据处理、挖掘、建模及可视化的自动化框架设计》方案中相关函数,方便查找和应用。 目录概览  1)数组写入其他工作簿中(注:说明文档中未修改)  2)自动当前工作...
  • 编写含有两个参数的自定义函数,第1个参数为变体类型,第2个参数为ParamArray关键字所指定的不确定数量的参数数组。假设第1个参数所代表的数值为最小值,然后遍历第2 个参数所表示的数组中所有的元素,包括作为元素...
  • 1.最近对Excel文件使用较为频繁,故写了几个函数,通过调用可以实现一些基本功能,仅供参考: (1)遍历指定文件夹下所有文件,并获得文件名(如需要获得指定的文件类型,请增加一个判断条件来判断文件类型) ...
  • 这样的情况下,我们可以使用自定义数据结构来定义变量,使用一个变量就可以将很多信息一同引用.下面举个例子来说明: 在标准模块中进行自定义数据结构的声明: type point x as long y as long z as long en...
  • 作者:iamlaosong 1、问题提出 编程中发现一个问题,系统总是提示编译错误,ByRef 参数类型...假定函数定义如下: Function get_kind(addr As String) As Integer ...... End Function 调用过程: Sub check_addres
  • VBA函数定义及说明

    千次阅读 2020-06-24 11:18:28
    函数定义,函数返回对象,默认参数,不定长参数
  • 自定义udf函数接收参数为数组类型

    千次阅读 2019-06-16 12:19:27
    # 执行列转行,collect_set函数返回的是String数组 SELECT max(id), concat_ws(',',collect_set(concat_ws(',',name,rsrp,address)))as value1 from testudf group by concat(id,comm1,comm2,comm3);  自定义...
  • 3. '返回指定元素值在数组中的 数字下标 Public Function getArrayEleId(arr, val) As Integer Dim i As Integer For i = 0 To UBound(arr) If val = arr(i) Then getArrayEleId = i Exit For End If Next...
  • VBA自定义函数1

    2016-04-07 15:06:00
    目 录 1.返回列标 2.返回列标2 3.查询某一值第num次出现的值 4.返回当个人所得税 5.从形如"123545ABCDE"的字符串中取出数字 6.从形如"ABCD12455EDF"的字符...
  • 接触VBA第一天,写了个闵可夫斯基距离 当r=1时,距离为曼哈顿距离 当r=2时,距离为欧几里得距离距离(直线距离) 当r→∞时,距离为切比雪夫距离 根据闵可夫斯基距离距离公式,在VBA写出以下代码 Public Function ...

空空如也

空空如也

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

vba自定义函数返回数组