Excel用VBA批量生成不重復的指定范圍的固定不變的隨機數(提供生成文檔下載)

      網友投稿 6398 2025-04-02

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


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

       

      一、excel用VBA批量生成指定行數和列數的固定不變的小數隨機數

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

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

       

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

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

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

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

       

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

      圖1

       

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

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

      Dim rowNum As Integer
      Dim
      colNum As Integer

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

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

      復制到

      Private Sub btnSubmit_Click()

      End Sub

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

      Private Sub btnConser_Click()

      End Sub

      之間。

       

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

      圖2

       

      3、代碼說明:

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

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

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

       

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

       

       

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

      (一)生成隨機數演示

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

      圖3

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

      圖4

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

      圖5

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

       

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

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

      “起始行”標簽:lblStartRow

      “起始行”文本框:tbStartRow

      “起始列”標簽:lblStartCol

      “起始列”文本框:tbStartCol

       

      “行數”標簽:lblRowNum

      “行數”文本框:tbRows

      “列數”標簽:lblCols

      “列數”文本框:tbCols

       

      “生成指定范圍的隨機數”復選框:cbRandBetween

      “生成小數隨機數”復選框:cbFloatRand

      “小數位數”標簽:lblDeciPlace

      “小數位數”文本框:tbDeciPlace

       

      “起始值”標簽:lblMinValue

      “起始值”文本框:tbMinValue

      “結束值”標簽:lblMaxValue

      “結束值”文本框:tbMaxValue

       

      “提交”按鈕:btnSubmit

      “取消”按鈕:btnCancel

      “清除”按鈕:btnClear

       

      “生成進度”標簽:lblProgressText

      “當前生成數目”標簽:lblProgress

      “錯誤提示”標簽:lblErrorr

       

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

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

      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 '行數
         
         Dim startCol As Integer: startCol = 1 '起始列
         Dim colNum As Integer '列數

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

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

            If Not IsNumeric(tbMaxValue.Text) Then
              lblError.Caption = "結束值必須為數字!"
              Exit Sub
            End If
            maxValue = CDbl(tbMaxValue.Text)
                  
            If maxValue < minValue Then
              lblError.Caption = "結束值必須大于起始值!"
              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 = "指定范圍內的數字總數應該大于等于 " & rowNum * colNum & "。" & strMsg
                  Exit Sub
               End If
            Else
               If maxValue - minValue + 1 < rowNum * colNum Then
                  lblError.Caption = "指定范圍內的數字總數應該大于等于 " & rowNum * colNum & "。" & strMsg
                  Exit Sub
               End If
            End If
         Else
            If decimalPlace > 0 Then
                If exMultiples < rowNum * colNum Then
                  lblError.Caption = "保留的小數位數范圍內能生成的隨機數個數必須大于等于 " & 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
      '根據小數位數返回相應的倍數
      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

      '生成隨機數
      'isRanBetween 是否生成指定范圍的隨機數,isFloatRand 是否生成小數隨機數
      'rowNum 行數,colNum 列數, minValue 起始值,maxValue 結束值

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

      '檢查當前生成的隨機數是否重復
      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
      '顯示生成的隨機數
      'arr() 保存隨機數的數組,startRow 起始行, startCol 起始列, rowNum 行數,colNum 列數

      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

      Excel用VBA批量生成不重復的指定范圍的固定不變的隨機數(提供生成文檔下載)

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

      圖6

       

      四)代碼解析:

      1、總體說明。

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

      2、定義變量并初始化。

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

       

      3、If 語句。

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

       

      4、輸入檢查。

      為避免輸入的內容導致代碼執行錯誤,通常要檢查輸入的內容是否符合代碼的執行規范。在這里,必須全輸入數值,否則代碼會產生錯誤,因此對每個文本框輸入的內容都要檢查是否為數值,以下就是檢查“起始行”是否為數值的代碼:

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

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

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

       

      5、類型轉換

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

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

       

      6、字符或字符串連接

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

       

      7、定義動態數組或參數

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

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

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

       

      8、判斷數組是否為空和取數組的長度

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

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

       

      9、釋放數組占用的內存

      數組使用結束后,要用 Erase arr 釋放數組占用的內存,特別是數組元素比較多或內容比較多時,arr 是數組名稱。

       

      10、控件作為參數的定義

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

       

      11、制作進度條

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

          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 時,取整結果為 0,只有當 i 大于等于 100 時,取整結果才會大于等于 1,作用是每生成 100 個隨機數才顯示一次進度;i Mod 100 是用 i 與 100 取模,即取余數,作用是只有 i 為如 100 、200 這樣的整數時才顯示進度。

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

      Next
      lblProgress.Caption = i

      否則進度也不會變化。

       

      12、結束子過程(函數)與終止程序執行

      A、結束子過程(函數)執行。以輸入檢查為例,當檢查到輸入的內容不符合規范時,用 Exit Sub 結束當前子過程的執行,例如代碼中的:

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

       

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

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

      If flag Then Exit For

       

      13、清空所有單元格

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

       

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

       

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

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:Power Query:在 Excel 中為每個組創建行號
      下一篇:幻燈片放映不彈出全屏界面(幻燈片放映怎么不全屏)
      相關文章
      亚洲专区一路线二| 久久精品九九亚洲精品| 亚洲精品美女在线观看| 亚洲不卡av不卡一区二区| 国产亚洲精品无码拍拍拍色欲| 伊人久久亚洲综合影院| 免费观看亚洲人成网站| 国产成人久久精品亚洲小说| 亚洲va中文字幕| 国产亚洲精品第一综合| 亚洲av区一区二区三| 国产天堂亚洲国产碰碰| 亚洲AⅤ视频一区二区三区| 亚洲?v无码国产在丝袜线观看| 亚洲AV日韩精品一区二区三区| 国产成人综合亚洲一区| 亚洲国产V高清在线观看| 亚洲精品岛国片在线观看| 国产精品亚洲mnbav网站| 综合亚洲伊人午夜网| 日韩亚洲人成在线综合日本 | 亚洲日韩激情无码一区| 亚洲人精品午夜射精日韩| 亚洲国产精品无码久久久蜜芽| 亚洲嫩模在线观看| 亚洲成人免费电影| 亚洲免费福利在线视频| 亚洲国产精品自在自线观看| 亚洲av无码国产精品色在线看不卡| 亚洲男人第一无码aⅴ网站| a级亚洲片精品久久久久久久 | 亚洲人成网站在线播放vr| 久久精品国产亚洲av成人| 亚洲网址在线观看你懂的| 亚洲国产综合人成综合网站00| 亚洲欧洲另类春色校园网站| 亚洲AV无码一区二区三区电影| 亚洲精品线路一在线观看| 亚洲日韩v无码中文字幕| 久久久久久亚洲精品中文字幕| 亚洲精品网站在线观看你懂的|