日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發(fā)布時間:2025/4/5 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 常用start_Excel VBA 基础(02.7) - 常用函数 第二部分 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
Option Explicit' 從選擇單元格中 隨機選取n個不同單元格 Private Function sampling(ByVal n As Long)' 選中單元格總數(shù)Dim totalCellsCnt As Long' 目標區(qū)域 為選擇區(qū)域與使用區(qū)域的交集 防止誤選整個工作表造成程序假死Dim targetRng As Range' 合并所有隨機選取的單元格 再填色Dim tmpRng As RangeDim iSet targetRng = Intersect(Selection, ActiveSheet.UsedRange)totalCellsCnt = targetRng.Cells.Count' 如果總數(shù)小于等于需要選取目標單元格數(shù)If totalCellsCnt <= n Thenfill targetRng, 6Else' 生成 不重復 的隨機數(shù) 將索引對應的所有單元通過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個不重復的隨機數(shù), 范圍 大于 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' 數(shù)據(jù)結構 之 字典, 字典的索引的惟一性 保證返回5個惟一值Dim d As ObjectSet d = CreateObject("scripting.dictionary")' 字典索引數(shù)目小于 所要求數(shù)目時 進行取值 并存入 索引(鍵)' 由于值不重要 統(tǒng)一設為1Do While d.Count < nd(start + Int(Rnd * (ende - start))) = 1LoopEnd IfgenerateNRndNr = d.KeysEnd FunctionSub main()sampling 5 End Sub

上期代碼。今天是又農歷春節(jié),首先祝愿大家新春快樂!圣誕跟春節(jié)都不能阻擋更新的日常。

上期練習介紹了Excel中的隨機模式。代碼本身并沒有什么疑難之處。關于 字典(dictionary) 這種數(shù)據(jù)結構我們之后會有詳細介紹,此處初步了解即可。請親手敲一遍代碼。

今天把其他常用函數(shù)說完。

請看 對象瀏覽器 中 DateTime 模塊

其中 重點掌握 DateSerial

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

三個參數(shù)分別為年、月、日。請注意,月、日的參數(shù)可以為零或負數(shù)。

例如,

DateSerial(2018, 2, 0)

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

另一個函數(shù) weekday 取得對應日期的星期數(shù),默認第一天為周日

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

取得當天星期數(shù)可以采用下列方法

? weekday(date,vbMonday)

date為返回當前系列日期的方法, vbMonday 將周一設定為每周第一天 。 同理,now返回當前系統(tǒng)時間。

例子 2.7.1 發(fā)薪日為每月最后一個周五, 函數(shù)簽名為

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

參數(shù)y為年, m為月,返回值為該月發(fā)薪日

Private Function payDay(ByVal y As Integer, ByVal m As Integer) As Date' 最后一天Dim d As Date' 星期數(shù)Dim wd As Integerd = DateSerial(y, m + 1, 0)wd = Weekday(d, vbMonday)' 星期數(shù)與對應天數(shù)關系' 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模塊

主要是用來判斷參數(shù)類型 的Is-類函數(shù)

之前我們已經(jīng)用過isArray, isEmpty 其他函數(shù)我們在后續(xù)項目中進行介紹,由于用法極其簡單目前只需了解。

最后說一下Conversion轉換模塊

用于不同數(shù)據(jù)類型之間轉換,常用的如cDbl轉換為雙精度Double, cInt轉為整型Int, cDate轉為日期Date,轉字符串一般直接用 "" & 也可以采用Cstr。

以上是VBA常用內置函數(shù)的全部內容,以上這些函數(shù)適用于所有Office產(chǎn)品。也就是說只要不涉及Excel特定的對象模型,在Excel VBA 下編寫的程序可以完美兼容于其他Office程序。

從下一期開始,我們將開始系統(tǒng)介紹 對象模型的屬性和方法。對于函數(shù)以及流程控制部分的示例程序請大家再動手試試。我們掌握知識越多,對于以前的知識或許會有一種新的認識,對程序編寫的直覺感也就越強烈。其實編程到最后就是一種肌肉記憶。

有任何問題請在下方留言。

本專欄所有文章著作權歸屬本人。未經(jīng)本人書面許可,除知乎日報外,任何人不得轉載。

總結

以上是生活随笔為你收集整理的常用start_Excel VBA 基础(02.7) - 常用函数 第二部分的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。