91超碰在线观看,国产二级c片l毛片,国产成人精品123区免费视频,濑亚美莉大战黑人中文字幕

win7系統(tǒng)下載
當(dāng)前位置: 首頁 > 硬件軟件教程 > 詳細(xì)頁面

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

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

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

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

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

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

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

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

2、添加標(biāo)簽和文本框控件。

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

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

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

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

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

圖1

(二)給按鈕添加代碼并生成隨機(jī)數(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
      '把生成的隨機(jī)數(shù)賦給第 i 行第 c 列的單元格
      Cells(i, c) = Rnd()
   Next
Next

復(fù)制到

Private Sub btnSubmit_Click()

End Sub

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

Private Sub btnConser_Click()

End Sub

之間。

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

Excel VBA 生成隨機(jī)數(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)用于控制要生成隨機(jī)數(shù)的行數(shù),內(nèi)層循環(huán)(For c = 1 To colNum)用于控制每行生成幾列隨機(jī)數(shù)。

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

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

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

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

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

圖3

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

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

圖4

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

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

圖5

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

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

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

“起始行”標(biāo)簽:lblStartRow

“起始行”文本框:tbStartRow

“起始列”標(biāo)簽:lblStartCol

“起始列”文本框:tbStartCol

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

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

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

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

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

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

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

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

“起始值”標(biāo)簽:lblMinValue

“起始值”文本框:tbMinValue

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

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

“提交”按鈕:btnSubmit

“取消”按鈕:btnCancel

“清除”按鈕:btnClear

“生成進(jìn)度”標(biāo)簽:lblProgressText

“當(dāng)前生成數(shù)目”標(biāo)簽:lblProgress

“錯誤提示”標(biāo)簽: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í)際行數(shù)
   Dim realColNum As Integer '實(shí)際列數(shù)
   
   realRowNum = rowNum + startRow - 1 '計(jì)算實(shí)際行數(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 '擴(kuò)大倍數(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)能生成的隨機(jī)數(shù)個(gè)數(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 = "保存進(jìn)度:" Then
     lblProgressText.Caption = "生成進(jìn)度:"
   End If
   
   Call CreateRand(cbRandBetween.Value, cbFloatRand.Value, decimalPlace, rowNum, colNum, minValue, maxValue, arr, lblProgress)
   lblProgressText.Caption = "保存進(jìn)度:"
   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

'生成隨機(jī)數(shù)
'isRanBetween 是否生成指定范圍的隨機(jī)數(shù),isFloatRand 是否生成小數(shù)隨機(jī)數(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ù)的隨機(jī)數(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ù)隨機(jī)數(shù)
           temp = WorksheetFunction.Round(WorksheetFunction.RandBetween(minValue * bAseNum, maxValue * bAseNum) / bAseNum, decimalPlace)
       ElseIf n = 2 Then '生成指定范圍的整數(shù)隨機(jī)數(shù)
           temp = Int(Rnd * (maxValue - minValue + 1) + minValue)
       ElseIf n = 3 Then '生成保留指定小數(shù)位數(shù)的隨機(jī)數(shù)
           temp = WorksheetFunction.Round(Rnd, decimalPlace)
        Else '生成小數(shù)隨機(jī)數(shù)
           temp = Rnd
       End If
       isEnd = IsDuplicateRandom(temp, arr)
       If isEnd = False Then
          arr(i) = temp
       End If
   Loop
End Function

'檢查當(dāng)前生成的隨機(jī)數(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
'顯示生成的隨機(jī)數(shù)
'arr() 保存隨機(jī)數(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ù)的隨機(jī)數(shù)

圖6

(四)代碼解析:

1、總體說明。

代碼最前定義的 flag 為全局變量,用于終止生成隨機(jī)數(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”是判斷語句,當(dāng)條件為真時(shí),執(zhí)行 Then 后面的代碼,否則執(zhí)行 Else 后面的代碼,如果沒有 Else,則不執(zhí)行。

4、輸入檢查。

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

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

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

IsNumeric() 用于檢查文字是否為數(shù)字,IsNumeric(tbStartRow.Text) 用于判斷“起始行”文本框中輸入的文字是否為數(shù)字。Not 用于表示 VBA 中的“非”運(yùn)算, 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ù)組前需要先定義一個(gè)普通數(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ù),定義時(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ù)組有多少個(gè)元素)用 UBound(arr),UBound(arr) 是取數(shù)組 arr 最后一個(gè)元素的下標(biāo),如果要取數(shù)組的實(shí)際元素個(gè)數(shù)還要加 1,即 UBound(arr) + 1。

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

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

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

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

11、制作進(jìn)度條

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

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

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

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

Next
lblProgress.Caption = i

否則進(jìn)度也不會變化。

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

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

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

B、終止程序執(zhí)行。當(dāng)用 Unload Me 或 Unload +“窗體名稱”關(guān)閉窗體時(shí),如果程序未執(zhí)行完(如循環(huán)未執(zhí)行完),程序并不會終止執(zhí)行,而是繼續(xù)在后臺往下執(zhí)行,而前臺返回給我們的是無響應(yīng),要終止程序的執(zhí)行,需要終止未執(zhí)行完的程序。如例中用變量 flag 作為是否取消程序執(zhí)行的標(biāo)志,如果用戶單擊了“取消”按鈕,立即把 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 運(yùn)行即可。

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


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

本文章關(guān)鍵詞: Excel 如何 運(yùn)用 VBA 大局部 生成  重復(fù)   
當(dāng)前原文鏈接:http://m.91mp3.cn/soft/soft-64898.html
91超碰在线观看,国产二级c片l毛片,国产成人精品123区免费视频,濑亚美莉大战黑人中文字幕
国产香蕉精品视频| 极品粉嫩小仙女高潮喷水久久| 中文字幕在线观看免费高清| 三大队在线观看| 超碰人人cao| 日韩成人av一区二区| 欧美一区二区免费在线观看| 9.1成人看片免费版| 亚洲精品国产熟女久久久| 操她视频在线观看| 精品国产免费久久久久久婷婷| 欧美一区二区免费在线观看| 久久久国产精品无码| 国产精品成人在线视频| 人妻久久一区二区| 国产激情视频网站| 激情高潮到大叫狂喷水| 中文字幕一区二区三区人妻在线视频| 国精产品一区一区三区免费视频| 国产视频精品免费| 黄色短视频在线观看| 免费在线观看a级片| 成年人网站免费在线观看| 亚洲精品国产精品乱码在线观看| 国产激情第一页| 一区二区在线免费观看视频| 性欧美13一14内谢| 欧美做受高潮中文字幕| 天堂а√在线中文在线鲁大师| 亚洲国产欧美视频| 成人做爰69片免费| 后入内射无码人妻一区| 日韩网站在线播放| 国产大尺度视频| 免费一级黄色录像| 公肉吊粗大爽色翁浪妇视频| 亚洲色图欧美另类| 欧美三级在线免费观看| 啪啪一区二区三区| 国产精久久久久| 黑人巨大精品一区二区在线| 久草手机视频在线观看| 无码人中文字幕| 人人妻人人藻人人爽欧美一区| www.88av| 亚洲av无码一区二区三区人 | 成年人在线观看av| 亚洲高清无码久久| japanese在线观看| 中文字幕天堂网| 中文成人无字幕乱码精品区| 日本一区二区在线免费观看| 狠狠人妻久久久久久综合蜜桃| 亚洲xxxx3d动漫| 国产精品三区在线观看| 色婷婷在线视频观看| 外国一级黄色片| 成人在线短视频| 精品一区二区视频在线观看| 国产jk精品白丝av在线观看| 成年人视频软件| 久久久久亚洲av无码专区体验| 天天躁日日躁狠狠躁av| 无码人妻aⅴ一区二区三区69岛| 亚洲色图欧美色| 91porn在线视频| 欧美黄色aaa| av在线网站观看| 91精品一区二区三区蜜桃| 美女被爆操网站| 中文字幕第4页| 污污内射在线观看一区二区少妇 | 天堂av网手机版| 人妻少妇一区二区| av免费观看不卡| 中文字幕第20页| 九色91porny| 一区二区三区伦理片| 九九精品视频免费| 国产精久久一区二区三区| 久久精品—区二区三区舞蹈| 中文字幕乱妇无码av在线| 国精产品一区一区三区免费视频| 成年人二级毛片| 玖玖爱在线观看| 女性生殖扒开酷刑vk| 韩国三级hd中文字幕有哪些| 波多野结衣影院| 国产精品熟女一区二区不卡| 最近中文字幕免费| 丰满少妇xbxb毛片日本| 午夜剧场免费在线观看| 熟女少妇内射日韩亚洲| 久久久久9999| xfplay5566色资源网站| 国产极品美女在线| 熟女少妇a性色生活片毛片| 超碰男人的天堂| 在线观看亚洲免费视频| 无码人妻一区二区三区在线视频| 国产女片a归国片aa| 国产精品丝袜一区二区| 三上悠亚作品在线观看| ass极品国模人体欣赏| 亚洲天堂视频一区| 青青操在线视频观看| 欧美性xxxx图片| 国产精品视频一区二区三| 日韩精品卡通动漫网站| 波多野结衣av在线观看| 国产传媒免费在线观看| 毛茸茸多毛bbb毛多视频| 看黄色录像一级片| 美女黄色一级视频| 中文字幕求饶的少妇| brazzers精品成人一区| 极品白嫩的小少妇| 国产精品一区二区亚洲| 日韩精品视频一区二区| 永久免费未视频| 国产精品亚洲无码| 亚洲熟女一区二区三区| 麻豆精品一区二区三区视频| 男人的天堂久久久| 一二三四在线观看视频| 涩视频在线观看| 黄色录像二级片| 欧美一级片在线视频| 俄罗斯毛片基地| 第一次破处视频| 最新av电影网站| 扒开伸进免费视频| 女人扒开双腿让男人捅| 日本中文字幕免费在线观看| 一级片一级片一级片| 天堂网中文在线观看| 国产大屁股喷水视频在线观看| 一级片视频免费看| 日本爱爱爱视频| 久久一级免费视频| 日本黄色免费片| 国产又粗又猛又爽又黄| av不卡中文字幕| 超碰caoprom| 黄色正能量网站| 四虎国产成人精品免费一女五男| 精品无码人妻一区二区免费蜜桃| av网在线播放| 美女福利视频在线观看| 国产精品亚洲一区二区无码| 亚洲精品视频大全| 波多野结衣一二三四区| 欧美手机在线观看| 91精品又粗又猛又爽| 加勒比一区二区| 91n在线视频| www国产视频| 成人性视频免费看| 亚洲精品久久一区二区三区777| 女性生殖扒开酷刑vk| 受虐m奴xxx在线观看| 九九精品视频免费| 久久人妻一区二区| 日本一二三区在线观看| 91视频在线免费| 91精品少妇一区二区三区蜜桃臀| 大桥未久恸哭の女教师| 国产无遮挡在线观看| 欧产日产国产精品98| 男人在线观看视频| 人妻熟女aⅴ一区二区三区汇编| www深夜成人a√在线| japanese中文字幕| 香蕉在线观看视频| 欧美性生给视频| 国内精品久久99人妻无码| 四川一级毛毛片| av在线免费播放网址| 亚洲色图14p| 性高潮免费视频| 欧美在线视频第一页| 91免费在线看片| 成人国产精品久久久网站| 亚洲欧美高清在线| 麻豆天美蜜桃91| 日韩一区二区三区四区视频| 国产精品无码一区二区三区免费| 久久久久久国产精品日本| 四虎影视一区二区| 亚洲精品91在线| 女人黄色一级片| 无码人妻精品一区二区中文| 国产偷人妻精品一区| 人妻少妇无码精品视频区| 污污内射在线观看一区二区少妇| 特级西西人体4444xxxx| 少妇愉情理伦片bd| 国产精品理论在线| 扒开jk护士狂揉免费| 中文字幕高清视频|