标题: [问题求助] VBS指定一个范围的数,随机抽取其中一个数输入到一个表格中 [打印本页]
作者: kkk000 时间: 2017-8-31 19:08 标题: VBS指定一个范围的数,随机抽取其中一个数输入到一个表格中
指定一个范围的数,随机抽取其中一个数输入到一个表格中,然后循环这个步骤,因为有很多excel表格,下面这个代码是30-35之间的范围,不知道怎么搞的,批处理的时候所有填入的随机数都是一样的,我要怎么才能填入不一样的数- Dim x
- Randomize
- x= Int((35-30 * Rnd) + 30)
-
- Dim objSFO
- Dim objFolder
- Dim objFiles
- Dim objFile
- address="A1"
- Value=x
-
- set fso=createobject("scripting.filesystemobject")
- set excel=createobject("excel.application")
- Set objFolder = fso.GetFolder("C:\Users\Administrator\Desktop\新建文件夹 (4)")
- Set objFiles = objFolder.Files
- For Each objFile In objFiles
- If Right(objFile.Name, 4) = ".xls" Then
- excel.visible=false
- set w=excel.workbooks.open(objFile.path)
- excel.Sheets("sheet1").Range(address).Value=Value
- W.SAVE
- W.CLOSE
- End If
- Next
- MsgBox "完成。", vbInformation
复制代码
作者: Batcher 时间: 2017-8-31 23:43
你这是VBS还是BAT呢?
作者: kkk000 时间: 2017-9-13 01:22
回复 2# Batcher
这个是vbs
作者: slore 时间: 2017-9-13 09:15
本帖最后由 slore 于 2017-9-13 10:38 编辑
再创建一个字典,把x存进去,Scripting.Dictionary
如果字典里面有了,就再随机取下x,直到不重复为止。
内容不多的话,用一个字符串保存也行。 used_x = ";35;32;"
用instr(1, used_x, ";" & x & ";")来查找,如果存在重新取,不存在就直接添加到used_x。
用一个数组也也行。
作者: 523066680 时间: 2017-9-13 09:25
本帖最后由 523066680 于 2017-9-13 09:40 编辑
随机不重复,蜜汁语法糖 (Perl)- my @array = (1 .. 20);
- my @new_array = map { splice( @array, int(rand($#array+1)), 1 ) } ( 0 .. $#array );
复制代码
翻了以前写的 VBS,还真有,2012年。改自某种排序算法:- dim array(20)
- dim last, idx, rand_num, str
-
- last = ubound(array) - 1
-
- for idx = 0 to last
- array(idx) = idx + 1
- next
-
- randomize()
-
- for idx = last to 0 step -1
- rand_num = int( idx * rnd )
- str = str & array( rand_num ) & " "
- array(rand_num) = array( idx )
- next
-
- msgbox str
复制代码
9 7 17 19 1 16 20 14 8 2 5 3 4 13 10 12 11 6 15 18
作者: slore 时间: 2017-9-13 09:48
本帖最后由 slore 于 2017-9-13 09:50 编辑
回复 5# 523066680
论糖还是ruby甜。 - [*30..35].sample(6) #从30到35的数组中取样
复制代码
- (1..10).each { p [*30..35].sample(6)}
复制代码
结果:
[34, 30, 32, 33, 31, 35]
[32, 33, 35, 31, 30, 34]
[35, 30, 33, 31, 32, 34]
[30, 32, 33, 35, 34, 31]
[34, 35, 30, 33, 32, 31]
[34, 32, 35, 33, 30, 31]
[33, 32, 30, 35, 34, 31]
[35, 31, 34, 32, 30, 33]
[34, 31, 30, 33, 35, 32]
[33, 31, 34, 35, 30, 32]
作者: Batcher 时间: 2017-9-14 20:54
回复 3# kkk000
那我把帖子移动到VBS版块了
作者: yu2n 时间: 2017-9-14 22:33
在第 19 行插入以下代码:- Randomize
- x= Int((35-30 * Rnd) + 30)
- Value=x
复制代码
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |