ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 3049|回复: 14

[求助] VBA随机填充 感谢!!

[复制链接]

TA的精华主题

TA的得分主题

发表于 2018-4-5 12:04 | 显示全部楼层 |阅读模式
求VBA代码

将【词语库】中第1课中的拼音和词语随机填充到【第1课】中

奇数行是拼音  偶数行是与拼音对应的词语

填充的位置是随机的 但拼音和词语到对应

======
一本语书有32课

第1课 引用【词语表】的A2-B列,范围用[A2:B]这种形式

第2课 引用【词语表】的C2-D列,

……

不管词语多少都靠上填充。


辛苦老师们了 感谢

随机填充.rar

8.59 KB, 下载次数: 9

TA的精华主题

TA的得分主题

发表于 2018-4-5 15:02 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
1、开始说填充位置随机,后面又说靠上填充,搞不懂了。
2、随机填充多少个?

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-4-5 15:27 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
ww87725244 发表于 2018-4-5 15:02
1、开始说填充位置随机,后面又说靠上填充,搞不懂了。
2、随机填充多少个?

先谢了

A B里的都填充有的都填充

每列5个词  靠上填充

TA的精华主题

TA的得分主题

发表于 2018-4-5 15:34 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
cqz1314 发表于 2018-4-5 15:27
先谢了

A B里的都填充有的都填充

建议最好模拟一个结果

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-4-5 17:38 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
ww87725244 发表于 2018-4-5 15:34
建议最好模拟一个结果

1.png 2.png

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-4-5 19:32 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2018-4-5 23:11 | 显示全部楼层
每列只有5个词语没有实现,随机填充词语倒是实现了。
代码比较糙,权当抛砖引玉了。
  1. Sub 随机填词()
  2. '每两列为一课,for 循环step =2
  3. '每课的词语数量不一样,获取lastrow
  4. '生成和词语数量同样的不重复随机数,然后按照随机数的顺序进行填充
  5. Dim sht As Worksheet
  6. Dim lastcolumn As Integer, lastrow As Integer, i As Integer, j As Integer
  7. Dim wordscount As Integer
  8. Dim arr, brr, crr()


  9. Application.DisplayAlerts = False
  10. For Each sht In Worksheets
  11.     If sht.Name <> "词语库" Then sht.Delete
  12. Next
  13. With Sheets("词语库")
  14.     lastcolumn = .UsedRange.Columns.Count
  15.     For i = 1 To lastcolumn Step 2
  16.         lastrow = .Cells(Rows.Count, i).End(xlUp).Row
  17.         If lastrow > 1 Then '如果词语数量不为零
  18.             arr = Range(.Cells(1, i), .Cells(lastrow, i + 1)).Value '把该课的词语读入数组
  19.             wordscount = UBound(arr) - 1 '词语的数量
  20.             brr = rndnum(1, wordscount) '生成不重复随机数
  21.             Worksheets.Add after:=Worksheets(Worksheets.Count)
  22.             With Worksheets(Worksheets.Count)
  23.                 .Name = arr(1, 1)     '第几课
  24.                 ReDim crr(1 To wordscount * 2)
  25.                 For j = 1 To wordscount
  26.                     '注意:arr是从1开始,brr是从0开始,而且为了为工作表起名,arr的第一个数据是“第×课”
  27.                     'brr(j-1)是为了满足brr的索引从0开始,取出brr(j-1)之后再+1是为了防止把arr的第一个元素“第×课”取出来
  28.                     crr(j * 2 - 1) = arr(brr(j - 1) + 1, 1)
  29.                     crr(j * 2) = arr(brr(j - 1) + 1, 2)
  30.                 Next
  31.                 .Cells(1, 1).Resize(wordscount * 2).Value = Application.WorksheetFunction.Transpose(crr)
  32.             End With
  33.         End If
  34.     Next
  35. End With
  36. Application.DisplayAlerts = True
  37. End Sub

  38. Function rndnum(ByRef startnum As Integer, ByRef endnum As Integer)
  39. '生成不重复随机数
  40. Dim d As Object
  41. Dim s As Integer
  42. Dim numcount As Integer
  43. Set d = CreateObject("scripting.dictionary")
  44. numcount = endnum - startnum + 1
  45. Do Until d.Count = numcount
  46.     s = Application.WorksheetFunction.RandBetween(startnum, endnum)
  47.     d(s) = ""
  48. Loop
  49. rndnum = d.keys '返回不重复随机数数组
  50. End Function
复制代码

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-4-6 07:13 来自手机 | 显示全部楼层
zorsite 发表于 2018-4-5 23:11
每列只有5个词语没有实现,随机填充词语倒是实现了。
代码比较糙,权当抛砖引玉了。

辛苦了
我试试效果

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-4-6 07:43 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
zorsite 发表于 2018-4-5 23:11
每列只有5个词语没有实现,随机填充词语倒是实现了。
代码比较糙,权当抛砖引玉了。

老师 这种方式不行呀

我还在打成试卷 这样的话每次都在重新排版

TA的精华主题

TA的得分主题

发表于 2018-4-6 12:29 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
  1. Sub aa()
  2. Dim sh As Worksheet, arr, i&, rng As Range, ar(), k&, m&, ar1, s&, p&, n&
  3. Dim d As Object
  4. Set d = CreateObject("scripting.dictionary")
  5. With Sheet1
  6.     For Each rng In .Range(.Cells(1, 1), .Cells(1, .UsedRange.Columns.Count))
  7.         If rng.Offset(1, 0) = "" Then
  8.             MsgBox rng.Value & "不存在相关数据"
  9.             Exit Sub
  10.         End If
  11.         If rng.Value <> "" Then
  12. 100:
  13.             For Each sh In Worksheets
  14.                 If rng.Value = sh.Name Then
  15.                     s = s + 1
  16.                     arr = rng.Offset(1, 0).Resize(.Cells(.Columns(rng.Column).Rows.Count, rng.Column).End(xlUp).Row - 1, 2)
  17.                     Do
  18.                         Randomize
  19.                         k = Int(Rnd() * UBound(arr) + 1)
  20.                         d(k) = arr(k, 1) & "" & arr(k, 2)
  21.                     Loop Until d.Count = UBound(arr)
  22.                     ar1 = d.items
  23.                     p = 2
  24.                     n = 1
  25.                     ReDim Preserve ar(1 To UBound(ar1) / 2, 1 To 5)
  26.                     For m = 0 To UBound(ar1)
  27.                         If m Mod 5 = 0 And m <> 0 Then
  28.                             p = p + 2
  29.                             n = 1
  30.                         End If
  31.                         ar(p - 1, n) = Split(ar1(m), "")(0)
  32.                         ar(p, n) = Split(ar1(m), "")(1)
  33.                         n = n + 1
  34.                     Next
  35.                     sh.Range("a1").Resize(UBound(ar), UBound(ar, 2)) = ar
  36.                     Erase ar
  37.                     d.RemoveAll
  38.                 End If
  39.             Next
  40.             If s = 0 Then
  41.                 Set sh = Worksheets.Add(after:=Worksheets(Worksheets.Count))
  42.                 sh.Name = rng.Value
  43.                 GoTo 100
  44.             End If
  45.         End If
  46.         s = 0
  47.     Next
  48. End With
  49. End Sub
复制代码
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关闭

最新热点上一条 /1 下一条

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-6-17 14:03 , Processed in 0.046606 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

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