Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 5243|回复: 5

[已解决]请教关于随机抽取数据问题

[复制链接]
发表于 2011-12-26 00:05 | 显示全部楼层 |阅读模式
本帖最后由 Crystalm 于 2011-12-26 00:33 编辑

我有两个TextBox(TextBox1和TextBox2), TextBox1中有多行数据,如何用VBA随机的抽取N(比如N=3)行不相同的数据到TextBox2中?
最佳答案
2011-12-26 09:16
  1. Private Sub 提取_Click()
  2.     Dim Arr, d As New Dictionary, i&, K&, j&, dk As New Dictionary
  3.     Arr = Split(TextBox1.Text, Chr(10))
  4.     For i = 0 To UBound(Arr)
  5.         d(Arr(i)) = ""
  6.     Next
  7.     If d.Count > 0 Then
  8.         K = Application.InputBox("请输入随机获取的记录数", "确认", Application.RoundUp(UBound(Arr) * 0.5 + 0.5, 0), , , , , 1)
  9.         If K > 0 And K < UBound(Arr) + 2 Then
  10.             Do
  11.                 j = Int(Rnd() * d.Count)
  12.                 dk.Add d.Keys(j), ""
  13.                 d.Remove d.Keys(j)
  14.             Loop Until dk.Count = K
  15.             TextBox2.Text = Join(dk.Keys, Chr(10))
  16.         Else: MsgBox "请确认K的值,范围在1-" & UBound(Arr)
  17.         End If
  18.     End If
  19.     Set d = Nothing
  20.     Set dk = Nothing
  21. End Sub
复制代码

随机抽取数据.rar (23.83 KB, 下载次数: 93)

随机抽取数据.zip

12.86 KB, 下载次数: 53

发表于 2011-12-26 09:16 | 显示全部楼层    本楼为最佳答案   
  1. Private Sub 提取_Click()
  2.     Dim Arr, d As New Dictionary, i&, K&, j&, dk As New Dictionary
  3.     Arr = Split(TextBox1.Text, Chr(10))
  4.     For i = 0 To UBound(Arr)
  5.         d(Arr(i)) = ""
  6.     Next
  7.     If d.Count > 0 Then
  8.         K = Application.InputBox("请输入随机获取的记录数", "确认", Application.RoundUp(UBound(Arr) * 0.5 + 0.5, 0), , , , , 1)
  9.         If K > 0 And K < UBound(Arr) + 2 Then
  10.             Do
  11.                 j = Int(Rnd() * d.Count)
  12.                 dk.Add d.Keys(j), ""
  13.                 d.Remove d.Keys(j)
  14.             Loop Until dk.Count = K
  15.             TextBox2.Text = Join(dk.Keys, Chr(10))
  16.         Else: MsgBox "请确认K的值,范围在1-" & UBound(Arr)
  17.         End If
  18.     End If
  19.     Set d = Nothing
  20.     Set dk = Nothing
  21. End Sub
复制代码

随机抽取数据.rar (23.83 KB, 下载次数: 93)
回复

使用道具 举报

 楼主| 发表于 2011-12-26 12:22 | 显示全部楼层
liuguansky 发表于 2011-12-26 09:16

版主,我想请问下d.keys(j) 代表的是什么意思? 是指字典d的第j+1个关键字吗?他是从0开始计数的吗?

点评

MsgBox "请确认K的值,范围在1-" & UBound(Arr) 这句代码在后面加上 “+1”  发表于 2011-12-26 12:37
是的。字典的KEYS方法返回的是一个下标0开始的一维数组。  发表于 2011-12-26 12:36
回复

使用道具 举报

 楼主| 发表于 2011-12-26 13:00 | 显示全部楼层
Crystalm 发表于 2011-12-26 12:22
版主,我想请问下d.keys(j) 代表的是什么意思? 是指字典d的第j+1个关键字吗?他是从0开始计数的吗?

谢谢版主!学习了。
回复

使用道具 举报

发表于 2014-1-11 21:03 | 显示全部楼层
好工具,值得学习
回复

使用道具 举报

发表于 2014-1-12 08:42 | 显示全部楼层
学些学习
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-5-14 10:13 , Processed in 0.268523 second(s), 14 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表