Option Explicit' 从选择单元格中 随机选取n个不同单元格
Private Function sampling(ByVal n As Long)' 选中单元格总数Dim totalCellsCnt As Long' 目标区域 为选择区域与使用区域的交集  防止误选整个工作表造成程序假死Dim targetRng As Range' 合并所有随机选取的单元格 再填色Dim tmpRng As RangeDim iSet targetRng = Intersect(Selection, ActiveSheet.UsedRange)totalCellsCnt = targetRng.Cells.Count' 如果总数小于等于需要选取目标单元格数If totalCellsCnt <= n Thenfill targetRng, 6Else' 生成 不重复 的随机数  将索引对应的所有单元通过Union选取For Each i In generateNRndNr(1, totalCellsCnt, n)If tmpRng Is Nothing ThenSet tmpRng = targetRng.Cells(i)ElseSet tmpRng = Union(tmpRng, targetRng.Cells(i))End IfNext i' 填色fill tmpRng, 6End IfEnd Function' 将目标范围填色
Private Function fill(ByRef rng As Range, ByRef colorIdx As Long)Selection.Interior.ColorIndex = -4142rng.Interior.ColorIndex = colorIdxEnd Function' 生成n个不重复的随机数, 范围 大于 start 小于 ende
Private Function generateNRndNr(ByRef start As Long, ByRef ende As Long, ByRef n As Long) As VariantIf n < ende - start + 1 ThenReDim res(0 To n - 1)Dim iDim cnt As Long' 数据结构 之 字典, 字典的索引的惟一性 保证返回5个惟一值Dim d As ObjectSet d = CreateObject("scripting.dictionary")' 字典索引数目小于 所要求数目时 进行取值 并存入 索引(键)' 由于值不重要 统一设为1Do While d.Count < nd(start + Int(Rnd * (ende - start))) = 1LoopEnd IfgenerateNRndNr = d.KeysEnd FunctionSub main()sampling 5
End Sub

上期代码。今天是又农历春节,首先祝愿大家新春快乐!圣诞跟春节都不能阻挡更新的日常。

上期练习介绍了Excel中的随机模式。代码本身并没有什么疑难之处。关于 字典(dictionary) 这种数据结构我们之后会有详细介绍,此处初步了解即可。请亲手敲一遍代码。

今天把其他常用函数说完。

请看 对象浏览器 中 DateTime 模块

其中 重点掌握 DateSerial

Function DateSerial(Year As Integer, Month As Integer, Day As Integer)

三个参数分别为年、月、日。请注意,月、日的参数可以为零或负数。

例如,

DateSerial(2018, 2, 0)

表示2018年1月31日。 注意此种技巧。

另一个函数 weekday 取得对应日期的星期数,默认第一天为周日

Function Weekday(Date, [FirstDayOfWeek As VbDayOfWeek = vbSunday])

取得当天星期数可以采用下列方法

? weekday(date,vbMonday)

date为返回当前系列日期的方法, vbMonday 将周一设定为每周第一天 。 同理,now返回当前系统时间。

例子 2.7.1 发薪日为每月最后一个周五, 函数签名为

Private Function payDay(ByVal y As Integer, ByVal m As Integer) As Date

参数y为年, m为月,返回值为该月发薪日

Private Function payDay(ByVal y As Integer, ByVal m As Integer) As Date' 最后一天Dim d As Date' 星期数Dim wd As Integerd = DateSerial(y, m + 1, 0)wd = Weekday(d, vbMonday)' 星期数与对应天数关系' 1-> -3  2-> -4  3-> -5  4 -> -6  5 -> 0  6 -> -1  7-> -2payDay = DateAdd("d", IIf(wd >= 5, 5 - wd, -2 - wd), d)End Function

代码本身没有什么难度, DateAdd可以查看API, 其实也可以写成

payDay = DateAdd("d", IIf(wd >= 5, 5 - wd, -2 - wd), d)

两代码功能相同

payDay = DateSerial(y, m + 1, IIf(wd >= 5, 5 - wd, -2 - wd))

再来看Information模块

主要是用来判断参数类型 的Is-类函数

之前我们已经用过isArray, isEmpty 其他函数我们在后续项目中进行介绍,由于用法极其简单目前只需了解。

最后说一下Conversion转换模块

用于不同数据类型之间转换,常用的如cDbl转换为双精度Double, cInt转为整型Int, cDate转为日期Date,转字符串一般直接用 "" & 也可以采用Cstr。

以上是VBA常用内置函数的全部内容,以上这些函数适用于所有Office产品。也就是说只要不涉及Excel特定的对象模型,在Excel VBA 下编写的程序可以完美兼容于其他Office程序。

从下一期开始,我们将开始系统介绍 对象模型的属性和方法。对于函数以及流程控制部分的示例程序请大家再动手试试。我们掌握知识越多,对于以前的知识或许会有一种新的认识,对程序编写的直觉感也就越强烈。其实编程到最后就是一种肌肉记忆。

有任何问题请在下方留言。

本专栏所有文章著作权归属本人。未经本人书面许可,除知乎日报外,任何人不得转载。

常用start_Excel VBA 基础(02.7) - 常用函数 第二部分相关推荐

  1. Python基础17-模块与包基础02、常用模块之time、random

    目录 名字冲突与避免 设置BASE_DIR保证程序能找到模块位置 time random 名字冲突与避免 在test.py里写下面一段代码,用正则表达式包re进行匹配,匹配出123开头的字符.如果我们 ...

  2. HTML基础-02:常用布局

    [0.]div的布局,什么包含什么很重要记清楚         <!-- overflow: hidden;防止maring塌陷 --> display:flex,不让下面盒子换行上去,可 ...

  3. db2 replace函数的用法_SQL基础知识:常用字符处理函数

    原标题:SQL基础知识:常用字符处理函数 作者:丶平凡世界

  4. HiveQL学习笔记(二):Hive基础语法与常用函数

    本系列是本人对Hive的学习进行一个整理,主要包括以下内容: 1.HiveQL学习笔记(一):Hive安装及Hadoop,Hive原理简介 2.HiveQL学习笔记(二):Hive基础语法与常用函数 ...

  5. Python学习笔记(4)~Python基础练习之常用内置函数(1-10)

    Python基础练习之常用内置函数(1-10) 1.abs() 作用         求数的绝对值或者复数的模 测试demo #!/usr/bin/python3 # abs: 求绝对值 or 复数的 ...

  6. tensorFlow基础操作及常用函数

    tensorFlow基础操作及常用函数 1. 安装Tensorflow 2. TensorFlow基本操作 3. TensorFlow常用函数 3.1 常用矩阵创建方式 3.2 高斯初始化及洗牌操作 ...

  7. 大数据HiveSQL学习笔记三-查询基础语法以及常用函数

    大数据HiveSQL学习笔记三-查询基础语法以及常用函数 一.基础语法 1.SELECT -列名- FROM -表名- WHERE -筛选条件- 如:需要根据城市,性别找出匹配的10个用户 user_ ...

  8. Redis基础 概念 数据类型 常用指令 Jedis 持久化

    Redis基础 概念 数据类型 常用指令 Jedis 持久化 1. Redis 简介 1.1 NoSQL概念 1.1.1 问题现象 1.1.2 NoSQL的概念 1.2 Redis概念 1.2.1 r ...

  9. 视频教程-桫哥-GOlang基础-02函数-Go语言

    桫哥-GOlang基础-02函数 多年互联网从业经验: 有丰富的的企业网站.手游.APP开发经验: 曾担任上海益盟软件技术股份有限公司项目经理及产品经理: 参与项目有益盟私募工厂.睿妙影音家庭物联网设 ...

最新文章

  1. 如何为Android上的产品设计一款合适的图标
  2. Socket通信总结(附C++实现)
  3. 【GIF动画+完整可运行源代码】C++实现 堆排序——十大经典排序算法之七
  4. Prepared statements(mysqli pdo)
  5. Blazor+Dapr+K8s微服务之服务调用
  6. GuGuFishtion(2018 Multi-University Training Contest 7)
  7. scipy是python下的什么_SciPy是什么
  8. 日语学习-多邻国-饮食
  9. php输出语句echo、print、print_r、printf、sprintf、var_dump比较
  10. jsoup解析百度音乐
  11. 2017.4.5 java中static关键字
  12. SAP B1打印报表实现本页合计和本单合计的方法
  13. 汽车UDS诊断之控制诊断故障码设置服务(0x85)深度剖析
  14. 混合策略改进鲸鱼优化算法-附代码
  15. 诗词格律[5] 词的基本知识
  16. 关于门户网站下载文件.doc文件直接打开成压缩包格式的解决办法
  17. 汽车vin码识别简述
  18. 简单理解hashMap中key相同,什么叫同一个key
  19. jquery二维码生成插件jquery.qrcode.js在线生成二维码
  20. 从国土空间规划到智慧城市

热门文章

  1. SOPC第一课 建立QSYS系统
  2. Python whl文件制作简介
  3. Kotlin 标准库中run、let、also、apply、with函数的用法和区别
  4. Hacking PostgreSQL
  5. javaCountDownLatch闭锁
  6. hihoCoder #1195 : 高斯消元·一
  7. [转]ASP.NET中使用UpdatePanel实现局部异步刷新方法和攻略
  8. 二十四、oracle pl/sql 变量
  9. 年中总结(2013年3月到2013年9月)
  10. github遇到问题Updates were rejected because the remote contains work that you do hint: not have locally.