国产精品视频一区麻豆_日韩一区二区三区精品_日韩视频久久99天堂_日韩卡1卡2卡三卡2021老狼

9000px;">
  • <menu id="4yk4m"></menu>
  • win7系統(tǒng)下載
    當前位置: 首頁 > 硬件軟件教程 > 詳細頁面

    Excel如何運用VBA大局部生成不重復(fù)的指定范圍的固定不變的隨機數(shù)(提供生成文檔下載)

    發(fā)布時間:2025-03-14 文章來源:xp下載站 瀏覽:

    辦公軟件是指可以進行文字處理、表格制作、幻燈片制作、圖形圖像處理、簡單數(shù)據(jù)庫的處理等方面工作的軟件。目前辦公軟件朝著操作簡單化,功能細化等方向發(fā)展。辦公軟件的應(yīng)用范圍很廣,大到社會統(tǒng)計,小到會議記錄,數(shù)字化的辦公,離不開辦公軟件的鼎力協(xié)助。另外,政府用的電子政務(wù),稅務(wù)用的稅務(wù)系統(tǒng),企業(yè)用的協(xié)同辦公軟件,這些都屬于辦公軟件。

    在 Excel 中,如果批量生成不重復(fù)的隨機,用公式不容易做到,但用 VBA 卻很容易實現(xiàn)。VBA 生成隨機數(shù)十分靈活,可滿足生成多種要求的隨機數(shù),例如:可以大批量生成不限定范圍的小數(shù)或整數(shù)隨機數(shù)、指定范圍的小數(shù)或整數(shù)隨機數(shù)(包括負數(shù))。

    用 VBA 生成隨機數(shù)通常分為兩步,一步是創(chuàng)建窗體和添加控件,另一步是編寫代碼,如果不要求在窗體上操作,直接編輯代碼即可,但靈活度沒那么大。以下列舉了兩用 VBA 生成隨機數(shù)的實例,一個功能簡單,另一個功能多、能大批量生成滿足多種要求的隨機數(shù),它們都提供生成文檔下載。

    一、Excel用VBA批量生成指定行數(shù)和列數(shù)的固定不變的小數(shù)隨機數(shù)

    (一)創(chuàng)建窗體和添加控件

    1、創(chuàng)建窗體。在 Excel 窗口,按 Alt + F11 打開 VBA 編輯窗口,單擊“插入”,在彈出的菜單中選擇“用戶窗體”,新建一個用戶窗體;單擊“屬性”小窗口中“(名稱)”右邊的輸入框,選中里面的文字,輸入 ufRand 作為窗體名稱;再單擊 Caption 右邊的輸入框,選中里面的文字,輸入“生成隨機數(shù)”作為窗體的名稱。

    2、添加標簽和文本框控件。

    A、單擊一下新建的窗體,在它左邊顯示“工具箱”,把鼠標移到大寫字母 A 上,按住左鍵并拖到窗體,則添加一個標簽控件;把它的“名稱”改為 lblRows,再把它的 Caption 改為“行數(shù)”;單擊 Font 右邊的輸入框,再單擊輸入框右邊出的“...”按鈕,打開“字體”窗口,“大小”選擇“小四”,單擊“確定”,把標簽的字體設(shè)置為“小四”;

    B、同樣方法把一個文本框控件(有 ab| 的哪個)拖到窗體,把它的“名稱”改為 tbRows,把它的字體也設(shè)置為“小四”。

    C、按住 Shift,單擊“行數(shù)”標簽,把它們選中,按 Ctrl + C 復(fù)制,再按 Ctrl + V 粘貼,把“行數(shù)和文本框”復(fù)制一份;單擊窗體空白處釋放副本的選中狀態(tài),選中復(fù)制的“行數(shù)”,把它的“名稱”改為 lblCols、Caption 改為“列數(shù)”;再選中復(fù)制的文本框,把“名稱”改為 tbCols。

    3、添加按鈕。單擊一下“生成隨機數(shù)”窗體,把一個按鈕控件拖到窗體,把它的“名稱”改為 btnSubmit、Caption 改為“提 交”,再它把的字體設(shè)置為“小四”;單擊一下窗體空白處,再選中按鈕,按 Ctrl + C 復(fù)制,再按 Ctrl + V 把按鈕粘貼一份,選中粘貼的按鈕,把它的“名稱”改為 btnConser,再把它的 Caption 改為“取 消”。操作過程步驟,如圖1所示:

    Excel用VBA批量生成指定行數(shù)和列數(shù)的固定不變的小數(shù)隨機數(shù)

    圖1

    (二)給按鈕添加代碼并生成隨機數(shù)

    1、給按鈕添加代碼。雙擊“提 交”按鈕,打開代碼輸入窗口,把以下代碼

    Dim rowNum As Integer
    Dim colNum As Integer

    '把輸入的行數(shù)和列數(shù)轉(zhuǎn)為整型后分別賦給 rowNum、colNum
    rowNum = Val(tbRows.Text)
    colNum = Val(tbCols.Text)

    For i = 1 To rowNum
       For c = 1 To colNum
          '把生成的隨機數(shù)賦給第 i 行第 c 列的單元格
          Cells(i, c) = Rnd()
       Next
    Next

    復(fù)制到

    Private Sub btnSubmit_Click()

    End Sub

    之間,雙擊 ufRand 返回“生成隨機數(shù)”窗體,雙擊“取 消”按鈕,把 Unload Me 復(fù)制到

    Private Sub btnConser_Click()

    End Sub

    之間。

    2、生成隨機數(shù)。單擊“運行”,選擇“運行子過程/用戶窗體”,打開“生成隨機數(shù)”窗口,并切換到 Excel 窗口,“行數(shù)”輸入 8,“列數(shù)”輸入 3,單擊“提 交”,則生成 8 行 3 列的隨機數(shù);單擊“取 消”,結(jié)束代碼運行;操作過程步驟,如圖2所示:

    Excel VBA 生成隨機數(shù)給按鈕添加代碼

    圖2

    3、代碼說明:

    A、Dim 用于定義變量,Dim rowNum As Integer 是把 rowNum 定義為整型,colNum 也被定義為整型。

    B、Val() 函數(shù)用于把文本轉(zhuǎn)為整型,Val(tbRows.Text) 把輸入的“行數(shù)”轉(zhuǎn)為整型。

    C、For To Next 為循環(huán)語句,代碼中使用了兩 For 循環(huán),其中外層循環(huán)(For i = 1 To rowNum)用于控制要生成隨機數(shù)的行數(shù),內(nèi)層循環(huán)(For c = 1 To colNum)用于控制每行生成幾列隨機數(shù)。

    4、下載以上生成隨機數(shù)的 Excel 文件:.xlsx 版(Excel 2007 以上版本),.xls 版(Excel 2003 版)。下載后,用 Excel 打開,按Alt + F11 切換到 VBA 編輯窗口,單擊窗口左邊的“窗體”把它展開,再單擊 ufRand 顯示窗體,按 F5 運行即可。

    二、Excel用VBA自定義批量生成絕對不重復(fù)的隨機數(shù)

    (一)生成隨機數(shù)演示

    1、生成 0 到 1 的指定行數(shù)和列數(shù)的不重復(fù)的小數(shù)隨機數(shù)。在 Excel 窗口,按 Alt + F11 切換到 VBA 編輯窗口,單擊“運行子過程/用戶窗體”的“綠色三角”圖標(或按 F5)執(zhí)行代碼,打開“生成隨機數(shù)”窗口并切換回 Excel 窗口。在“起始行和起始列”都輸入 2,“行數(shù)”輸入 100,“列數(shù)”輸入 10,單擊“提交”,則生成 1000 個 0 到 1 的小數(shù)隨機數(shù)。操作過程步驟,如圖3所示:

    Excel用VBA生成 0 到 1 的指定行數(shù)和列數(shù)的不重復(fù)的小數(shù)隨機數(shù)

    圖3

    2、生成保留兩位小數(shù)的不重復(fù)的隨機數(shù)。單擊“清除”把上次生成的隨機數(shù)刪除,“起始行和起始列”都改為 1,“行數(shù)和列數(shù)”都改為 4,勾選“生成小數(shù)隨機數(shù)”,“小數(shù)位數(shù)”輸入 2,單擊“提交”,則生成 16 個保留兩位小數(shù)的隨機數(shù)。勾選“生成指定范圍的隨機數(shù)”,“起始值”輸入 0.5,“結(jié)束值”輸入 1.8,單擊“提交”,則生成 16 個 0.5 到 1.8 的保留兩位小數(shù)的隨機數(shù)。操作過程步驟,如圖4所示:

    Excel用VBA生成保留兩位小數(shù)的不重復(fù)的隨機數(shù)

    圖4

    3、生成指定范圍、行數(shù)和列數(shù)的不重復(fù)的整數(shù)隨機數(shù)。在“起始行和起始列”都輸入 1,“行數(shù)”和“列數(shù)”都輸入 10,勾選“生成指定范圍的隨機數(shù)”,“起始值”輸入 100,“結(jié)束值”輸入 200,單擊“提交”,則生成 100 個 100 到 200 的整數(shù)隨機數(shù);把“起始值”改為 -100,“結(jié)束值”不變,“單擊“提交”,則生成 100 個 -100 到 200 的整數(shù)隨機數(shù)。操作過程步驟,如圖5所示:

    Excel用VBA生成指定范圍、行數(shù)和列數(shù)的不重復(fù)的整數(shù)隨機數(shù)

    圖5

    提示:一次能生成隨機數(shù)的數(shù)量與電腦內(nèi)存有關(guān),如果電腦內(nèi)存在 8 GB 以上,一次能生成 100 萬個以上;另外,運行代碼前要選中窗體或在代碼編輯窗口,不能選中單個控件運行,這樣會發(fā)生錯誤。

    (二)創(chuàng)建窗體和添加控件

    像上例一樣創(chuàng)建窗體與添加控件,它們的“名稱”和 Caption 分別如下:

    “起始行”標簽:lblStartRow

    “起始行”文本框:tbStartRow

    “起始列”標簽:lblStartCol

    “起始列”文本框:tbStartCol

    “行數(shù)”標簽:lblRowNum

    “行數(shù)”文本框:tbRows

    “列數(shù)”標簽:lblCols

    “列數(shù)”文本框:tbCols

    “生成指定范圍的隨機數(shù)”復(fù)選框:cbRandBetween

    “生成小數(shù)隨機數(shù)”復(fù)選框:cbFloatRand

    “小數(shù)位數(shù)”標簽:lblDeciPlace

    “小數(shù)位數(shù)”文本框:tbDeciPlace

    “起始值”標簽:lblMinValue

    “起始值”文本框:tbMinValue

    “結(jié)束值”標簽:lblMaxValue

    “結(jié)束值”文本框:tbMaxValue

    “提交”按鈕:btnSubmit

    “取消”按鈕:btnCancel

    “清除”按鈕:btnClear

    “生成進度”標簽:lblProgressText

    “當前生成數(shù)目”標簽:lblProgress

    “錯誤提示”標簽:lblErrorr

    (三)給按鈕控件添加代碼

    1、單擊一下“窗體”,右鍵 ufRandBetween(如果“工具箱”遮擋了 ufRandBetween,單擊一下“屬性”窗口以把“工具箱”隱藏),在彈出的菜單中選擇“查看代碼”,打開代碼編輯窗口,把以下代碼復(fù)制過去:

    Public flag As Boolean
    Private Sub btnCancel_Click()
      flag = True
      Unload ufRandBetween
    End Sub

    Private Sub btnClear_Click()
      Cells.Clear
    End Sub

    Private Sub btnSubmit_Click()
       Dim startRow As Integer: startRow = 1 '起始行
       Dim rowNum As Long '行數(shù)
       
       Dim startCol As Integer: startCol = 1 '起始列
       Dim colNum As Integer '列數(shù)

       If tbStartRow.Text <> "" Then
         If Not IsNumeric(tbStartRow.Text) Then
           lblError.Caption = "起始行必須為數(shù)字!"
           Exit Sub
         End If

          startRow = CInt(tbStartRow.Text)
       End If
       
       If tbRows.Text = "" Then
          lblError.Caption = "行數(shù)不能為空!"
          Exit Sub
       End If
       If Not IsNumeric(tbRows.Text) Then
          lblError.Caption = "行數(shù)必須為數(shù)字!"
          Exit Sub
       End If
       rowNum = CLng(tbRows.Text)
       
       If tbStartCol.Text <> "" Then
          If Not IsNumeric(tbStartCol.Text) Then
            lblError.Caption = "起始列必須為數(shù)字!"
            Exit Sub
          End If
          startCol = CInt(tbStartCol.Text)
       End If
       
       If tbCols.Text = "" Then
          lblError.Caption = "列數(shù)不能為空!"
          Exit Sub
       End If
       If Not IsNumeric(tbCols.Text) Then
          lblError.Caption = "列數(shù)必須為數(shù)字!"
          Exit Sub
        End If
       colNum = CInt(tbCols.Text)
       
       If startRow <= 0 Then
          startRow = 1
       End If
       If startCol <= 0 Then
          startCol = 1
       End If

       Dim realRowNum As Long '實際行數(shù)
       Dim realColNum As Integer '實際列數(shù)
       
       realRowNum = rowNum + startRow - 1 '計算實際行數(shù)
       realColNum = colNum + startCol - 1
       
       Dim minValue As Double: minValue = 1 '指定范圍起始值
       Dim maxValue As Double '指定范圍結(jié)束值
       
          Dim strMsg As String: strMsg = " 你可以減少行數(shù)或列數(shù),或增加小數(shù)位數(shù)。"
       Dim decimalPlace As Long: decimalPlace = 0
       
       Dim exMultiples As Long: exMultiples = 1 '擴大倍數(shù)
       If (cbRandBetween.Value Or cbFloatRand.Value) And tbDeciPlace.Text <> "" Then
          If Not IsNumeric(tbDeciPlace.Text) Then
             lblError.Caption = "小數(shù)位數(shù)必須為數(shù)字!"
             Exit Sub
          End If
          decimalPlace = CLng(tbDeciPlace.Text)
          exMultiples = GetMultiplesAsDecimalPlaces(decimalPlace)
       End If

       If cbRandBetween.Value Then
          If tbMinValue.Text <> "" Then
             If Not IsNumeric(tbMinValue.Text) Then
                lblError.Caption = "起始值必須為數(shù)字!"
                Exit Sub
             End If
             minValue = CDbl(tbMinValue.Text)
          End If

          If Not IsNumeric(tbMaxValue.Text) Then
            lblError.Caption = "結(jié)束值必須為數(shù)字!"
            Exit Sub
          End If
          maxValue = CDbl(tbMaxValue.Text)
                
          If maxValue < minValue Then
            lblError.Caption = "結(jié)束值必須大于起始值!"
            Exit Sub
          End If
          If cbFloatRand.Value Then
             If tbDeciPlace.Text = "" Then
                decimalPlace = 2
                exMultiples = GetMultiplesAsDecimalPlaces(decimalPlace)
             End If
             
             If (maxValue - minValue) * exMultiples + 1 < rowNum * colNum Then
                lblError.Caption = "指定范圍內(nèi)的數(shù)字總數(shù)應(yīng)該大于等于 " & rowNum * colNum & "。" & strMsg
                Exit Sub
             End If
          Else
             If maxValue - minValue + 1 < rowNum * colNum Then
                lblError.Caption = "指定范圍內(nèi)的數(shù)字總數(shù)應(yīng)該大于等于 " & rowNum * colNum & "。" & strMsg
                Exit Sub
             End If
          End If
       Else
          If decimalPlace > 0 Then
              If exMultiples < rowNum * colNum Then
                lblError.Caption = "保留的小數(shù)位數(shù)范圍內(nèi)能生成的隨機數(shù)個數(shù)必須大于等于 " & rowNum * colNum & "。" & strMsg
                Exit Sub
              End If
           End If
       End If
       
       If lblError.Caption <> "" Then
          lblError.Caption = ""
       End If
             

       flag = False
       Dim arr() As Double
       
       If lblProgressText.Caption = "保存進度:" Then
         lblProgressText.Caption = "生成進度:"
       End If
       
       Call CreateRand(cbRandBetween.Value, cbFloatRand.Value, decimalPlace, rowNum, colNum, minValue, maxValue, arr, lblProgress)
       lblProgressText.Caption = "保存進度:"
       Call OutputRand(arr, startRow, startCol, realRowNum, realColNum, lblProgress)
    End Sub
    '根據(jù)小數(shù)位數(shù)返回相應(yīng)的倍數(shù)
    Private Function GetMultiplesAsDecimalPlaces(decimalPlace As Long) As Long
       If decimalPlace <= 0 Then
          GetMultiplesAsDecimalPlaces = 0
         Exit Function
       End If
       
       GetMultiplesAsDecimalPlaces = 1
       Dim i As Integer
       For i = 0 To decimalPlace - 1
          GetMultiplesAsDecimalPlaces = GetMultiplesAsDecimalPlaces * 10
       Next
    End Function

    '生成隨機數(shù)
    'isRanBetween 是否生成指定范圍的隨機數(shù),isFloatRand 是否生成小數(shù)隨機數(shù)
    'rowNum 行數(shù),colNum 列數(shù), minValue 起始值,maxValue 結(jié)束值
    Private Sub CreateRand(isRanBetween As Boolean, isFloatRand As Boolean, decimalPlace As Long, rowNum As Long, colNum As Integer, minValue As Double, maxValue As Double, ByRef arr() As Double, lblProgress As Object)
       Randomize (Timer)
       Dim isEnd As Boolean
       isEnd = True

       Dim totalCells As Long
       Dim i As Long
       Dim randomType As Integer
       
       totalCells = rowNum * colNum
       ReDim Preserve arr(0 To totalCells - 1)
       
       If isRanBetween Then
            If isFloatRand Then
                randomType = 1
             Else
                randomType = 2
             End If
         Else
            If isFloatRand And decimalPlace > 0 Then
               randomType = 3
            Else
               randomType = 4
            End If
         End If

       For i = 0 To totalCells - 1
         isEnd = GeneratorRandomNoDuplicates(randomType, minValue, maxValue, decimalPlace, i, arr)
         If flag Then Exit For
         
         If CLng(i / 100) >= 1 And i Mod 100 = 0 Then
            DoEvents
            lblProgress.Caption = i
         End If
         If flag Then Exit For
       Next
       lblProgress.Caption = i
    End Sub
    '生成不重復(fù)的隨機數(shù)
    Private Function GeneratorRandomNoDuplicates(n As Integer, minValue As Double, maxValue As Double, decimalPlace As Long, i As Long, ByRef arr() As Double) As Boolean
       Dim temp As Variant
       Dim isEnd As Boolean
       isEnd = True
       Dim bAseNum As Double: bAseNum = 10000000
       
       Do While (isEnd)
           If n = 1 Then '生成指定范圍的小數(shù)隨機數(shù)
               temp = WorksheetFunction.Round(WorksheetFunction.RandBetween(minValue * bAseNum, maxValue * bAseNum) / bAseNum, decimalPlace)
           ElseIf n = 2 Then '生成指定范圍的整數(shù)隨機數(shù)
               temp = Int(Rnd * (maxValue - minValue + 1) + minValue)
           ElseIf n = 3 Then '生成保留指定小數(shù)位數(shù)的隨機數(shù)
               temp = WorksheetFunction.Round(Rnd, decimalPlace)
            Else '生成小數(shù)隨機數(shù)
               temp = Rnd
           End If
           isEnd = IsDuplicateRandom(temp, arr)
           If isEnd = False Then
              arr(i) = temp
           End If
       Loop
    End Function

    '檢查當前生成的隨機數(shù)是否重復(fù)
    Private Function IsDuplicateRandom(randNum As Variant, ByRef arr() As Double) As Boolean
        Dim i As Long
        i = UBound(arr)
        IsDuplicateRandom = False
        
        For j = 0 To i
           If arr(j) = randNum Then
              IsDuplicateRandom = True
              Exit For
            Else
                IsDuplicateRandom = False
            End If
         Next
    End Function
    '顯示生成的隨機數(shù)
    'arr() 保存隨機數(shù)的數(shù)組,startRow 起始行, startCol 起始列, rowNum 行數(shù),colNum 列數(shù)
    Private Sub OutputRand(ByRef arr() As Double, startRow As Integer, startCol As Integer, rowNum As Long, colNum As Integer, lblProgress As Object)
        If UBound(arr) > LBound(arr) Then
          Dim i As Long
          For r = startRow To rowNum
            For c = startColTo colNum
              If (i <= UBound(arr)) Then
                Cells(r, c) = arr(i)
                i = i + 1
                
                If CLng(i / 1000) >= 1 And i Mod 1000 = 0 Then
                  DoEvents
                  lblProgress.Caption = i
                End If
              End If
              If flag Then Exit For
            Next
            If flag Then Exit For
          Next
          lblProgress.Caption = i
          Erase arr
        End If
    End Sub

    操作過程步驟,如圖6所示:

    Excel用VBA自定義批量生成絕對不重復(fù)的隨機數(shù)

    圖6

    (四)代碼解析:

    1、總體說明。

    代碼最前定義的 flag 為全局變量,用于終止生成隨機數(shù);btnCancel_Click() 是“取消”按鈕的執(zhí)行事件;Sub btnClear_Click 是“清除”按鈕的執(zhí)行事件;btnSubmit_Click() 是“提交”按鈕的執(zhí)行事件。

    2、定義變量并初始化。

    Dim startRow As Integer: startRow = 1 是把 startRow 定義為整型并把它初始化為 1。

    3、If 語句。

    “If 條件 Then 代碼 End If”或“If 條件 Then 代碼 Else 代碼 End If”是判斷語句,當條件為真時,執(zhí)行 Then 后面的代碼,否則執(zhí)行 Else 后面的代碼,如果沒有 Else,則不執(zhí)行。

    4、輸入檢查。

    為避免輸入的內(nèi)容導(dǎo)致代碼執(zhí)行錯誤,通常要檢查輸入的內(nèi)容是否符合代碼的執(zhí)行規(guī)范。在這里,必須全輸入數(shù)值,否則代碼會產(chǎn)生錯誤,因此對每個文本框輸入的內(nèi)容都要檢查是否為數(shù)值,以下就是檢查“起始行”是否為數(shù)值的代碼:

       If tbStartRow.Text <> "" Then
         If Not IsNumeric(tbStartRow.Text) Then
           lblError.Caption = "起始行必須為數(shù)字!"
           Exit Sub
         End If

    由于把“起始行”的默認值設(shè)置為 1,因此不要求必須輸入,所以只有“起始行”輸入了文字才判斷所輸入的文字是否為數(shù)值,If tbStartRow.Text <> "" Then 用于檢查“起始行”是否輸入了文字,代碼的意思是:如果“起始行”的文本框不等于空。

    IsNumeric() 用于檢查文字是否為數(shù)字,IsNumeric(tbStartRow.Text) 用于判斷“起始行”文本框中輸入的文字是否為數(shù)字。Not 用于表示 VBA 中的“非”運算, Not IsNumeric(tbStartRow.Text) 意思是:如果“起始行”文本框中輸入的不是數(shù)字,則把 "起始行必須為數(shù)字!" 返回給用戶。

    5、類型轉(zhuǎn)換

    CInt() 用于把字符型轉(zhuǎn)為整型,例如代碼中的 startRow = CInt(tbStartRow.Text),也可以 Val(),如 startRow = Val(bStartRow.Text)。

    CLng() 用于把字符型轉(zhuǎn)長整型,例如代碼中的 rowNum = CLng(tbRows.Text)。

    6、字符或字符串連接

    VBA 用“與”符號 & 連接字符、字符串或變量,例如代碼中的 lblError.Caption = "指定范圍內(nèi)的數(shù)字總數(shù)應(yīng)該大于等于 " & rowNum * colNum & "。" & strMsg。

    7、定義動態(tài)數(shù)組或參數(shù)

    VBA 定義動態(tài)數(shù)組前需要先定義一個普通數(shù)組,然后再用 ReDim Preserve 把普通數(shù)組重新定義為動態(tài)數(shù)組,例如代碼中的:

    Dim arr() As Double
    totalCells = rowNum * colNum
    ReDim Preserve arr(0 To totalCells - 1)

    0 To totalCells - 1 是動態(tài)數(shù)組的元素取值范圍。如果把數(shù)組作為參數(shù),定義時需要加址傳遞關(guān)鍵字 ByRef,例如代碼中的 ByRef arr() As Double。

    8、判斷數(shù)組是否為空和取數(shù)組的長度

    A、在 VBA 中,用數(shù)組的上界與它的下界比較判斷它是否為空,如果上界小于下界,則數(shù)組為空,否則不為空;例如代碼中的 If UBound(arr) > LBound(arr) Then,數(shù)組 arr 的上界大于它的下界,所以 arr 不為空。UBound() 函數(shù)用于取數(shù)組的上界,LBound() 用于取數(shù)組的下界。

    B、取數(shù)組長度(即取數(shù)組有多少個元素)用 UBound(arr),UBound(arr) 是取數(shù)組 arr 最后一個元素的下標,如果要取數(shù)組的實際元素個數(shù)還要加 1,即 UBound(arr) + 1。

    9、釋放數(shù)組占用的內(nèi)存

    數(shù)組使用結(jié)束后,要用 Erase arr 釋放數(shù)組占用的內(nèi)存,特別是數(shù)組元素比較多或內(nèi)容比較多時,arr 是數(shù)組名稱。

    10、控件作為參數(shù)的定義

    控件作為參數(shù)需要把它用 Object 定義為對象,例如代碼中把“生成進度”標簽控件 Label 作為參數(shù)定義為:lblProgress As Object。

    11、制作進度條

    A、顯示程序執(zhí)行進度可以用標簽控件(即 Label),例如代碼中用 lblProgress 實時顯示已生成隨機數(shù)個數(shù)與保存進度,代碼如下:

        If CLng(i / 100) >= 1 And i Mod 100 = 0 Then
          DoEvents
          lblProgress.Caption = i
        End If

    B、代碼中 CLng(i / 100) 用 i 與 100 取整,當 i 小于 100 時,取整結(jié)果為 0,只有當 i 大于等于 100 時,取整結(jié)果才會大于等于 1,作用是每生成 100 個隨機數(shù)才顯示一次進度;i Mod 100 是用 i 與 100 取模,即取余數(shù),作用是只有 i 為如 100 、200 這樣的整數(shù)時才顯示進度。

    C、進度條代碼中必須有 DoEvents(執(zhí)行事件),否則進度不會變化。另外,循環(huán)結(jié)束后還要再賦一次,例如代碼中的 

    Next
    lblProgress.Caption = i

    否則進度也不會變化。

    12、結(jié)束子過程(函數(shù))與終止程序執(zhí)行

    A、結(jié)束子過程(函數(shù))執(zhí)行。以輸入檢查為例,當檢查到輸入的內(nèi)容不符合規(guī)范時,用 Exit Sub 結(jié)束當前子過程的執(zhí)行,例如代碼中的:

    If Not IsNumeric(tbStartCol.Text) Then
    lblError.Caption = "起始列必須為數(shù)字!"
    Exit Sub
    End If

    B、終止程序執(zhí)行。當用 Unload Me 或 Unload +“窗體名稱”關(guān)閉窗體時,如果程序未執(zhí)行完(如循環(huán)未執(zhí)行完),程序并不會終止執(zhí)行,而是繼續(xù)在后臺往下執(zhí)行,而前臺返回給我們的是無響應(yīng),要終止程序的執(zhí)行,需要終止未執(zhí)行完的程序。如例中用變量 flag 作為是否取消程序執(zhí)行的標志,如果用戶單擊了“取消”按鈕,立即把 flag 設(shè)置為 True,循環(huán)中檢測到 flag 為 True,立即用 Exit For 結(jié)果循環(huán);代碼如下:

    Public flag As Boolean
    Private Sub btnCancel_Click()
    flag = True
    Unload ufRandBetween
    End Sub

    If flag Then Exit For

    13、清空所有單元格

    用 VBA 清空 Excel 所有單元格可以用 Cells.Clear,它會清空單元格的內(nèi)容和格式。

    (五)下載 Excel 文件:.xlsx 版(Excel 2007 以上版本),.xls 版(Excel 2003 版)。下載后,用 Excel 打開,按 Alt + F11 切換到 VBA 編輯窗口,單擊窗口左邊的“窗體”把它展開,再單擊 ufRandBetween 顯示窗體,按 F5 運行即可。

    提示:執(zhí)行 VBA 代碼需要勾選“啟用所有宏”,方法為:文件 → 選項 → 信任中心 → 信任中心設(shè)置 → 宏設(shè)置 → 啟用所用宏 → 確定。另外,保存時,“保存類型”要選擇“Excel 啟用宏的工作簿”。


    Office辦公軟件是辦公的第一選擇,這個地球人都知道。

    本文章關(guān)鍵詞: Excel 如何 運用 VBA 大局部 生成  重復(fù)   
    国产精品视频一区麻豆_日韩一区二区三区精品_日韩视频久久99天堂_日韩卡1卡2卡三卡2021老狼
  • <menu id="4yk4m"></menu>
  • 欧美日韩一区三区四区| 91.麻豆视频| 午夜不卡av免费| 久久伊人中文字幕| 五月综合激情婷婷六月色窝| 欧美一区二区三区免费观看视频| 男女男精品视频| 久久99久久99| 99re8在线精品视频免费播放| 国产女主播在线一区二区| 久热成人在线视频| 久久99精品久久久久久动态图| 成人激情黄色小说| 欧美高清www午色夜在线视频| 色综合久久久久综合99| 亚洲美女少妇撒尿| 亚洲精品一区二区三区香蕉| 日韩精品一区二区三区蜜臀| 国产色综合久久| 久久精品视频一区二区三区| 99riav久久精品riav| 国产自产2019最新不卡| 国产日韩av一区| av午夜一区麻豆| 国产精品国产自产拍高清av| 另类小说视频一区二区| 亚洲人亚洲人成电影网站色| 欧美日韩在线播| 美女被吸乳得到大胸91| 蜜桃视频在线一区| 欧美区一区二区三区| 国产高清无密码一区二区三区| 亚洲美腿欧美偷拍| 色先锋资源久久综合| 精品国产一区二区三区忘忧草| 日韩午夜电影av| 欧美丰满美乳xxx高潮www| 国产真实乱子伦精品视频| 色哟哟国产精品| 欧美aaaaa成人免费观看视频| 色综合久久88色综合天天| 亚洲bt欧美bt精品| 99精品桃花视频在线观看| 一区二区三区四区五区视频在线观看| 色综合久久九月婷婷色综合| 国产精品成人一区二区艾草| 国产欧美一区二区三区沐欲| 综合中文字幕亚洲| 久久综合九色欧美综合狠狠| 久久99精品久久久久久动态图| 国产欧美日韩中文久久| 国产亚洲视频系列| 欧美色图第一页| 高清在线成人网| 国产suv精品一区二区三区| 亚洲成人午夜电影| www.成人网.com| 精品日韩一区二区三区| 日本va欧美va欧美va精品| 欧美无人高清视频在线观看| 国产精品久久久久久久久免费相片| 成人免费va视频| 亚洲高清免费在线| 一区二区激情视频| 99久久精品国产导航| 中文av字幕一区| 精品91自产拍在线观看一区| 欧美日韩午夜在线| 亚洲欧洲中文日韩久久av乱码| 亚洲成av人**亚洲成av**| 精品国产91久久久久久久妲己| 日韩精品电影在线观看| 欧美日韩国产色站一区二区三区| 国产91色综合久久免费分享| www.99精品| 成人av综合一区| 精品国偷自产国产一区| 中文一区一区三区高中清不卡| 成人激情小说网站| 欧美视频精品在线观看| 在线免费视频一区二区| 日韩一卡二卡三卡| 欧美色区777第一页| 96av麻豆蜜桃一区二区| 国产九色精品成人porny| 日韩欧美亚洲国产精品字幕久久久| 国产综合成人久久大片91| 精品制服美女久久| 久久久亚洲欧洲日产国码αv| 91福利在线免费观看| 久久久久久久久久久电影| 亚洲一区二区三区四区不卡| 在线看国产日韩| 欧美一级日韩不卡播放免费| 91麻豆精品国产91久久久资源速度| 91精品国产高清一区二区三区| 成人ar影院免费观看视频| 日韩精品国产欧美| 亚洲资源中文字幕| 欧美一级日韩不卡播放免费| 九九在线精品视频| 国产制服丝袜一区| 精品一区二区三区av| 亚洲综合一二三区| 国产精品一区二区三区99| 久久九九久久九九| 成人毛片在线观看| av亚洲精华国产精华精| 性做久久久久久| 成人福利视频在线看| 久久精品一区四区| 久久99精品久久只有精品| 26uuu精品一区二区| 久久久久久久久久久久电影| 久久久久亚洲蜜桃| 日韩精品一区二区三区swag| 9久草视频在线视频精品| 欧美一区二区观看视频| 国产九色sp调教91| 在线观看日韩国产| 国产午夜精品一区二区三区嫩草| 色婷婷精品久久二区二区蜜臂av| 亚洲成人免费视频| 日本一区二区三区视频视频| 粉嫩aⅴ一区二区三区四区| 国产一区二区三区免费观看| 久99久精品视频免费观看| 久久精品国产一区二区三区免费看| 欧美国产精品中文字幕| 亚洲国产你懂的| 精油按摩中文字幕久久| 欧美写真视频网站| 久久久久久久久伊人| 一区二区三区免费在线观看| 九色porny丨国产精品| 国产精品欧美一区二区三区| 欧美一区二区私人影院日本| 欧美一区二区三区免费观看视频| 欧美久久久一区| eeuss影院一区二区三区| 亚洲色图19p| 亚洲丶国产丶欧美一区二区三区| 亚洲激情综合网| 视频在线观看一区二区三区| 亚洲精选免费视频| 日韩一区二区在线观看视频播放| 国产精品久久午夜夜伦鲁鲁| 久久超碰97中文字幕| 亚洲日本在线观看| 欧美在线观看你懂的| 一区二区欧美在线观看| 色偷偷久久一区二区三区| 9l国产精品久久久久麻豆| 成人福利视频在线| 蜜桃视频免费观看一区| 日韩一卡二卡三卡| av在线综合网| 激情综合色综合久久综合| 亚洲18色成人| 成人一区二区在线观看| 奇米影视7777精品一区二区| 国产午夜亚洲精品理论片色戒| 日韩一区二区中文字幕| 一本色道久久综合亚洲aⅴ蜜桃| 日韩一区二区三区视频在线观看| 亚洲一区视频在线| 高清不卡一区二区| 欧美三级乱人伦电影| 麻豆视频一区二区| 欧美日本一区二区三区四区| 一本一本久久a久久精品综合麻豆| 最新热久久免费视频| 777欧美精品| 蜜臀久久99精品久久久久宅男| 日韩av一二三| 国产自产2019最新不卡| av在线播放一区二区三区| 精品国产乱码久久久久久浪潮| 日韩欧美一二区| 国产欧美一区二区精品性色| 久久久久99精品国产片| 欧美日韩在线播放一区| 日韩电影免费在线看| 日本aⅴ免费视频一区二区三区| 亚洲成在线观看| 亚洲精选在线视频| 午夜精品福利一区二区三区av| 亚洲综合网站在线观看| 成人在线视频一区二区| 国产欧美精品一区二区色综合| 久久99久久精品| 日韩在线一区二区三区| 国产成人av一区二区三区在线观看| 日韩精品欧美精品| 欧美一区二区三区白人| 一本久久a久久精品亚洲| 亚洲欧美在线高清| 国产精品一色哟哟哟| 蜜桃精品视频在线| 国产精品久久久久桃色tv|