找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 26934|回复: 7

[问题求助] VBS指定一个范围的数,随机抽取其中一个数输入到一个表格中

[复制链接]
发表于 2017-8-31 19:08:25 | 显示全部楼层 |阅读模式
指定一个范围的数,随机抽取其中一个数输入到一个表格中,然后循环这个步骤,因为有很多excel表格,下面这个代码是30-35之间的范围,不知道怎么搞的,批处理的时候所有填入的随机数都是一样的,我要怎么才能填入不一样的数
  1. Dim x
  2.     Randomize
  3.     x= Int((35-30 * Rnd) + 30)

  4. Dim objSFO
  5.      Dim objFolder
  6.      Dim objFiles
  7.      Dim objFile
  8.      address="A1"
  9.     Value=x

  10.     set fso=createobject("scripting.filesystemobject")
  11.     set excel=createobject("excel.application")
  12.     Set objFolder = fso.GetFolder("C:\Users\Administrator\Desktop\新建文件夹 (4)")
  13.      Set objFiles = objFolder.Files     
  14.     For Each objFile In objFiles
  15.          If Right(objFile.Name, 4) = ".xls" Then
  16.             excel.visible=false
  17.            set w=excel.workbooks.open(objFile.path)
  18.            excel.Sheets("sheet1").Range(address).Value=Value
  19.             W.SAVE
  20.             W.CLOSE
  21.         End If
  22.      Next
  23.     MsgBox "完成。", vbInformation
复制代码
发表于 2017-8-31 23:43:21 | 显示全部楼层
你这是VBS还是BAT呢?
 楼主| 发表于 2017-9-13 01:22:24 | 显示全部楼层
回复 2# Batcher
这个是vbs
发表于 2017-9-13 09:15:41 | 显示全部楼层
本帖最后由 slore 于 2017-9-13 10:38 编辑

再创建一个字典,把x存进去,Scripting.Dictionary
如果字典里面有了,就再随机取下x,直到不重复为止。

内容不多的话,用一个字符串保存也行。  used_x = ";35;32;"
用instr(1, used_x, ";" & x & ";")来查找,如果存在重新取,不存在就直接添加到used_x。

用一个数组也也行。
发表于 2017-9-13 09:25:43 | 显示全部楼层
本帖最后由 523066680 于 2017-9-13 09:40 编辑

随机不重复,蜜汁语法糖 (Perl)
  1. my @array = (1 .. 20);
  2. my @new_array = map { splice( @array, int(rand($#array+1)), 1 ) } ( 0 .. $#array );
复制代码
翻了以前写的 VBS,还真有,2012年。改自某种排序算法:
  1. dim array(20)
  2. dim last, idx, rand_num, str

  3. last = ubound(array) - 1

  4. for idx = 0 to last
  5.     array(idx) = idx + 1
  6. next

  7. randomize()

  8. for idx = last to 0 step -1
  9.   rand_num = int( idx * rnd )
  10.   str = str & array( rand_num ) & " "
  11.   array(rand_num) = array( idx )
  12. next

  13. msgbox str
复制代码
9 7 17 19 1 16 20 14 8 2 5 3 4 13 10 12 11 6 15 18
发表于 2017-9-13 09:48:12 | 显示全部楼层
本帖最后由 slore 于 2017-9-13 09:50 编辑

回复 5# 523066680


    论糖还是ruby甜。
  1. [*30..35].sample(6) #从30到35的数组中取样
复制代码
  1. (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]

评分

参与人数 1PB +5 技术 +1 收起 理由
523066680 + 5 + 1

查看全部评分

发表于 2017-9-14 20:54:14 | 显示全部楼层
回复 3# kkk000


    那我把帖子移动到VBS版块了
发表于 2017-9-14 22:33:41 | 显示全部楼层
在第 19 行插入以下代码:
  1. Randomize
  2. x= Int((35-30 * Rnd) + 30)
  3. Value=x
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 09:06 , Processed in 0.014714 second(s), 12 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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