ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: opiona

[分享] 关于自定义函数的使用理解及函数集锦

  [复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-5-24 16:08 | 显示全部楼层
函数_获取文件夹文件和文件夹清单.rar (1.91 KB, 下载次数: 185)


  1. '*********************************
  2. '*******  北极狐工作室出品  ******
  3. '*******  QQ:14885553      ******
  4. '*********************************

  5. Sub Opiona()

  6. 'On Error Resume Next    '// 发生错误,自动执行下一句,就是忽略错误
  7. Application.ScreenUpdating = False '//关闭屏幕刷新
  8. Application.DisplayAlerts = False '//关闭系统提示
  9. t = Timer   '//开始时间

  10.     Set SH0 = Sheets("Sheet1")
  11.     SH0.Range("A2:Z65536").ClearContents
  12.    
  13.     FileArr = FileAllArr(ThisWorkbook.Path, "*.xls?", ThisWorkbook.Name, True, False)
  14.     For i = 0 To UBound(FileArr)
  15.    
  16.         msgbox GetPathFromFileName(FileArr(i))
  17.    
  18.     Next i

  19. Application.ScreenUpdating = True '//恢复屏幕刷新
  20. Application.DisplayAlerts = True '//恢复系统提示
  21. MsgBox "一共用时:" & Format(Timer - t, "#0.0000") & " 秒", , "北极狐提示!!"  '//提示所用时间
  22. End Sub



  23. '*******************************************************************************************************
  24. '功能:    查找指定文件夹含子文件夹内所有文件名或文件夹名(含路径)
  25. '函数名:  FileAllArr
  26. '参数1:   Filename    需查找的文件夹名,不包含文件名
  27. '参数2:   FileFilter  需要过滤的文件名,可省略,默认为:[*.*]
  28. '参数3:   Liwai       剔除例外的文件名,可省略,默认为:空,一般为:ThisWorkbook.Name
  29. '参数4:   SubFiles    是否需要查找子文件夹内文件,可省略,默认为:true
  30. '参数5:   Files       是否只要文件夹名,可省略,默认为:FALSE
  31. '返回值:  一个字符型的数组
  32. '使用方法:FileArr = FileAllArr(ThisWorkbook.Path, "*.xls", ThisWorkbook.Name,false,false)
  33. '作者:    北极狐工作室 QQ:14885553
  34. '*******************************************************************************************************
  35. Public Function FileAllArr(ByVal Filename As String, Optional ByVal FileFilter As String = "*.*", Optional ByVal Liwai As String = "", Optional ByVal SubFiles As Boolean = True, Optional ByVal Files As Boolean = False) As String()
  36.    
  37.     Dim DIC, DID, Ke, MyName, MyFileName
  38.     Dim I As Integer
  39.    
  40.     Set DIC = CreateObject("Scripting.Dictionary")    '创建一个字典对象
  41.     Set DID = CreateObject("Scripting.Dictionary")
  42.    
  43.     Filename = Replace(Replace(Filename & "", "\", ""), "\", "")
  44.     DIC.Add (Filename), ""
  45.     I = 0
  46.     Do While I < DIC.Count
  47.         Ke = DIC.keys   '开始遍历字典
  48.         If SubFiles = True Then  '//如果需要查找子文件夹
  49.             MyName = Dir(Ke(I), vbDirectory)    '查找目录
  50.             Do While MyName <> ""
  51.                 If MyName <> "." And MyName <> ".." Then
  52.                     If (GetAttr(Ke(I) & MyName) And vbDirectory) = vbDirectory Then    '如果是次级目录
  53.                         DIC.Add (Ke(I) & MyName & ""), ""  '就往字典中添加这个次级目录名作为一个条目
  54.                     End If
  55.                 End If
  56.                 MyName = Dir    '继续遍历寻找
  57.             Loop
  58.         End If
  59.         I = I + 1
  60.     Loop
  61.     Dim arrx() As String
  62.     I = 0
  63.     If Files = True Then   '//是否只输出文件夹名
  64.       
  65.         For Each Ke In DIC.keys '以查找总表所在文件夹下所有excel文件为例
  66.             ReDim Preserve arrx(I)
  67.             If Ke <> Filename Then   '//自身文件夹除外
  68.                 arrx(I) = Ke
  69.                 I = I + 1
  70.             End If
  71.          Next
  72.          FileAllArr = arrx
  73.     Else
  74.         For Each Ke In DIC.keys '以查找总表所在文件夹下所有excel文件为例
  75.             MyFileName = Dir(Ke & FileFilter) '过滤器:EXCEL2003为:*.xls,excel2007为:*.xlsx
  76.             Do While MyFileName <> ""
  77.                If MyFileName <> Liwai Then '排除例外文件
  78.                   ReDim Preserve arrx(I)
  79.                   arrx(I) = Ke & MyFileName
  80.                   I = I + 1
  81.                End If
  82.                 MyFileName = Dir
  83.             Loop
  84.         Next
  85.         FileAllArr = arrx
  86.     End If
  87. End Function


  88. '*'****************************************************************************************************
  89. '函数:   GetPathFromFileName   根据全路径获得文件名
  90. '参数1: strFullPath  完整路径
  91. '参数2: kzm  true 返回字符串含扩展名,默认是:False
  92. '参数3: strSplitor  各级文件夹分隔符
  93. '作用:  从完整路径获取返回:  文件名(true带扩展名)
  94. '使用方法:  msgbox GetPathFromFileName("C:\windows\text.txt",true)
  95. '作者:    北极狐工作室 QQ:14885553
  96. '*'****************************************************************************************************
  97. Public Function GetPathFromFileName(ByVal strFullPath As String, Optional ByVal kzm As Boolean = False, Optional ByVal strSplitor As String = "") As String
  98.     Dim FileName1 As String
  99.     Dim FNAME As String
  100.     FileName1 = Left$(strFullPath, InStrRev(strFullPath, strSplitor, , vbTextCompare))
  101.     FileName1 = Replace(strFullPath, FileName1, "")
  102.     If kzm = False Then
  103.         GetPathFromFileName = Left(FileName1, InStrRev(FileName1, ".") - 1)
  104.     Else
  105.         GetPathFromFileName = FileName1
  106.     End If
  107. End Function




复制代码
头像被屏蔽

TA的精华主题

TA的得分主题

发表于 2017-6-5 22:51 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-6-6 11:42 | 显示全部楼层
头像被屏蔽

TA的精华主题

TA的得分主题

发表于 2017-6-6 12:52 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
头像被屏蔽

TA的精华主题

TA的得分主题

发表于 2017-6-6 13:30 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
头像被屏蔽

TA的精华主题

TA的得分主题

发表于 2017-6-8 09:47 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
提示: 作者被禁止或删除 内容自动屏蔽

TA的精华主题

TA的得分主题

发表于 2017-11-23 20:34 | 显示全部楼层
大师请帮个忙,弄了一个多月了没弄好,怎样将代码变为自定义函数,因为经常用到,谢谢

TA的精华主题

TA的得分主题

发表于 2017-11-23 20:41 | 显示全部楼层
附件没法上传
Sub 多条件不重复计数()
     Dim arr, d As Object, i, s%
   Set d = CreateObject("scripting.dictionary")
   arr = range("a2").CurrentRegion
   For i = 2 To UBound(arr)
   If VBA.Year(arr(i, 2)) = "2016" And arr(i, 8) = "特惠贷(精准扶贫)" Then
   If arr(i, 7) = "次级" Or arr(i, 7) = "可疑" Then
     d(arr(i, 6)) = ""
   End If
   End If
   Next
  [k1] = d.Count
End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-1-25 21:18 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
why3791 发表于 2017-11-23 20:41
附件没法上传
Sub 多条件不重复计数()
     Dim arr, d As Object, i, s%
  1. Sub 多条件不重复计数()
  2.    
  3.     Dim I As Long
  4.     I = GETNOTWO(Range("A2"))
  5. End Sub


  6. Public Function GETNOTWO(ByVal RNG As Range) As Long
  7.    
  8.     Dim ARR
  9.     Dim CD As Object
  10.     Dim I As Long
  11.     Dim S As String
  12.     Dim STR_1, STR_2, STR_3, STR_4 As String
  13.    
  14.     STR_1 = "2016"
  15.     STR_2 = "特惠贷(精准扶贫)"
  16.     STR_3 = "次级"
  17.     STR_4 = "可疑"
  18.    
  19.     Set CD = CreateObject("scripting.dictionary")
  20.     ARR = RNG.CurrentRegion
  21.     For I = 2 To UBound(ARR)
  22.         If VBA.Year(ARR(I, 2)) = STR_1 And ARR(I, 8) = STR_2 Then
  23.             If ARR(I, 7) = STR_3 Or ARR(I, 7) = STR_4 Then
  24.                 CD(ARR(I, 6)) = ""
  25.             End If
  26.         End If
  27.     Next
  28.     GETNOTWO = CD.Count
  29. End Function
复制代码

TA的精华主题

TA的得分主题

发表于 2018-3-6 23:11 | 显示全部楼层
老师这个叫做金额中文大写!=328.10343<叁佰贰拾捌点壹零叁肆叁>这个方式是否应叫中文大写
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-18 10:31 , Processed in 0.045501 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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