Sub R_DATA()
Dim Data_Range As Range
Dim sht As Worksheet
Dim p, t, Data_Count, RND_r, RND_c
p = 0.7 ' 指定比例
t = Application.WorksheetFunction.CountA("A1:T25200") ' 統計數據個數
Set Data_Range = Range("A1:T25200") ' 指定源數據區域
Set sht = Worksheets("Sheet2") ' 指定取出隨機數的保存工作表
Do While Data_Count < Round(t * p, 0) ' 當取值計數小於指定比例時循環
RND_c = Int(Rnd() * 20 + 1) ' 隨機取行坐標
RND_r = Int(Rnd() * 25200 + 1) ' 隨機取列坐標
If sht.Cells(RND_r, RND_c) <> 1 And Cells(RND_r, RND_c) <> "" Then ' 判斷是否已經取值、是否為空值
sht.Cells(RND_r, RND_c) = Cells(RND_r, RND_c) ' 取值保存在Sheet2表的同壹位置
Data_Count = Data_Count + 1 ' 取值計數加1
End If
Loop
End Sub
說明,由於EXCEL版本是2003,最多65536行。從49萬個數據中取70%,那麽後面的列是不可能保存得下的。因此代碼中將這些數據存放在另外的工作表Sheet2中,位置與原表相同。