ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 1091|回复: 7

代码学习分享

[复制链接]

TA的精华主题

TA的得分主题

发表于 2017-3-14 20:15 | 显示全部楼层 |阅读模式
本帖最后由 Allen2018 于 2017-3-14 21:28 编辑

=============================赠人玫瑰,手留余香================================

实践中,经常调用一些代码,这些代码或从论坛搜索收集而来,或向各位老师求助而来,或从所购书本中摘抄而来,或自己摸索编写而来,为便于统一查找调用,我计划花费一些时间将他们逐一归集,方便自己的同时也希望能帮到有需求的朋友,各位老师若是发现我所归集的代码涉嫌侵犯您的权益,请告知我,我将及时修正不当内容!

========================各位若有更为优化的算法请回复,谢谢您!==========================

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-3-14 20:16 | 显示全部楼层
本帖最后由 Allen2018 于 2017-3-14 22:01 编辑

一、自定义函数
自定义函数:返回 Column 英文字
自定义函数:查询某一列某值第n次出现左边某列的值
自定义函数:从形如"123545ABCDE"的字符串中取出数字
自定义函数:从形如"ABCD12455EDF"的字符串中取出数字


二、工作表基础函数

三、算法类函数

四、专业财务函数

五、财经类函数







TA的精华主题

TA的得分主题

 楼主| 发表于 2017-3-14 20:17 | 显示全部楼层
本帖最后由 Allen2018 于 2017-3-14 20:25 编辑

'################################################################
'1.函数作用:返回 Column 英文字
'################################################################

Function ColLetter(ColNumber As Integer) As String
    On Error GoTo Errorhandler
    ColLetter = Left(Cells(1, ColNumber).Address(0, 0), 1 - (ColNumber > 26))
    Exit Function
Errorhandler:
    MsgBox "Error encountered, please re-enter "
End Function

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-3-14 21:08 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 Allen2018 于 2017-3-14 21:11 编辑

'################################################################
'2.函数作用:查询某一列第num次出现的值
'  参数说明:Value1:查询引用的数值;
'            Range1:查询区域;
'            num:指定查询第几次出现;
'            Col:返回值, 相对引用区域, 相对引用列的右边第Col列的值
'################################################################

Function MyFind(Value1, ByVal Range1 As Range, ByVal num As Integer, ByVal Col As Integer)
    If Value1 = "" Then Exit Function
    If Range1.Columns.Count > 1 Then Exit Function
    For Each D In Range1
        If D.Value = Value1 Then
            c = c + 1
            If c = num Then
                v1 = D(1, Col)
                Exit For
            End If
        ElseIf IsEmpty(D) Then
            Exit For
        End If
    Next
    If v1 = "" Then v1 = "not"
    MyFind = v1
End Function

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-3-14 21:14 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 Allen2018 于 2017-3-14 22:10 编辑
Allen2018 发表于 2017-3-14 21:08
'################################################################
'2.函数作用:查询某一列第num次出 ...

示例:MyFind(1, Range("E:E"), 1, 2)
即,e列 1 第一次出现位置 的 相对位置 往右 本列其实 第2列的 值

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-3-14 21:19 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
'################################################################
'4.函数作用:从形如"123545ABCDE"的字符串中取出数字
'################################################################

Function myvalue(mystring As String) As Double
    myvalue = Val(mystring)
End Function

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-3-14 21:25 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
'################################################################
'5.函数作用:从形如"ABCD12455EDF"的字符串中取出数字
'################################################################

Function mydata(mystring As String) As Double
    Dim i As Integer
    i = 1
    Do Until Val(Mid(mystring, i, 1)) > 0
        i = i + 1
    Loop
    mydata = Val(Mid(mystring, i, Len(mystring) - i + 1))
End Function

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-3-14 21:48 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
'################################################################
'6.函数作用:按SplitType取得RangeName串值中的起始位置
'################################################################

'1:单元格,2:行号,3:列号,4:范围
Public Const SINGLE_CELL = 1
Public Const ROW_NUM = 2
Public Const COL_NUM = 3
Public Const RANGE_ALL = 4

Public Function SplitRangeName(RangeName As String, SplitType As Integer) As String
    If VBA.Len(RangeName) < 3 Then
        Exit Function
    Else
        RangeName = VBA.Right(RangeName, VBA.Len(RangeName) - VBA.InStr(1, RangeName, "!") - 1)
        If VBA.InStr(1, RangeName, ":") > 0 Then RangeName = VBA.Left(RangeName, VBA.InStr(1, RangeName, ":") - 1)
        Select Case SplitType
            Case SINGLE_CELL
                If VBA.InStr(1, RangeName, ":") <> 0 Then
                    SplitRangeName = "$" & VBA.Left(RangeName, VBA.InStr(1, RangeName, ":") - 1)
                Else
                    SplitRangeName = "$" & RangeName
                End If
            Case ROW_NUM
                SplitRangeName = VBA.IIf(VBA.InStr(1, RangeName, "$") > 0, VBA.Right(RangeName, VBA.Len(RangeName) - VBA.InStr(1, RangeName, "$")), RangeName)
                If Not IsNumeric(SplitRangeName) Then
                    SplitRangeName = ""
                    MsgBox "", vbInformation, ""
                End If
            Case COL_NUM
                If VBA.InStr(1, RangeName, "$") > 0 Then
                    SplitRangeName = VBA.Left(RangeName, VBA.InStr(1, RangeName, "$") - 1)
                Else
                    SplitRangeName = RangeName
                End If
                If IsNumeric(SplitRangeName) Then
                    SplitRangeName = ""
                    MsgBox "", vbInformation, ""
                End If
            Case RANGE_ALL
                SplitRangeName = "$" & RangeName
        End Select
    End If
End Function
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-6-3 02:39 , Processed in 0.045607 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

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