ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 不改变题号,只改变选项内容顺序的代码

[复制链接]

TA的精华主题

TA的得分主题

发表于 2008-12-26 13:17 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
如在英语题型完形填空中,题号是不能变的,能变的只能是选项A.B.C.D.内容(选项也可能只有A.B.C.三种),如何改变选项的内容,即在同一小题中变化其顺序,请教这样的代码该如何写?
注:①以上选择题题号后面的点均为“.”
②选项A.B.C.D.变化可以是部分变化,或全部变化(选项也可能只有A.B.C.三种)
③选项A.B.C.D.的点均为“.”

完形填空.rar

4.11 KB, 下载次数: 88

TA的精华主题

TA的得分主题

发表于 2008-12-26 20:33 | 显示全部楼层
看看先,应该是个好东东

TA的精华主题

TA的得分主题

发表于 2009-1-31 16:13 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2017-1-3 15:32 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
我路过,看看而以,谢谢!

TA的精华主题

TA的得分主题

发表于 2017-1-4 16:34 | 显示全部楼层
本帖最后由 duquancai 于 2017-1-4 16:49 编辑
  1. Sub 随机调换答案顺序()
  2.     Dim mt, mk, oRng As Range, n&, m&, str$
  3.     Dim rg As Range, arr(), x%, d As Object, k&, a
  4.     Set d = CreateObject("Scripting.Dictionary")
  5.     str = Replace(ActiveDocument.Content, Chr(7), "")
  6.     With CreateObject("vbscript.regexp")
  7.         .Global = True: .IgnoreCase = False: .MultiLine = True
  8.         .Pattern = "^\d+.\s*[A-Z].[^\r]+"
  9.         For Each mt In .Execute(str)
  10.             m = mt.FirstIndex: n = mt.Length
  11.             Set oRng = ActiveDocument.Range(m, m + n)
  12.             .Pattern = "[^.\t\dA-Z]+"
  13.             For Each mk In .Execute(oRng.Text)
  14.                 m = mk.FirstIndex: n = mk.Length
  15.                 Set rg = ActiveDocument.Range(oRng.Start + m, oRng.Start + m + n)
  16.                 x = x + 1: k = k + 1: ReDim Preserve arr(1 To x)
  17.                 arr(x) = mk: Set d(k) = rg
  18.             Next
  19.             a = Rndcq(arr, x)
  20.             For i = 0 To d.Count - 1
  21.                 d.items()(i).Text = a(i + 1)
  22.             Next
  23.             x = 0: k = 0: d.RemoveAll
  24.         Next
  25.     End With
  26. End Sub
  27. Function Rndcq(arr, r As Integer)
  28.     Dim arr1(), arr2%(), sr%, x%, y%, num%, k%
  29.     k = UBound(arr)
  30.     ReDim arr2(1 To k): ReDim arr1(1 To r)
  31.     For y = 1 To k
  32.         arr2(y) = y
  33.     Next
  34.     Randomize
  35.     For x = 1 To r
  36.         num = (Rnd() * ((k - x + 1) - 1) + 1) \ 1
  37.         arr1(x) = arr(arr2(num))
  38.         sr = arr2(num)
  39.         arr2(num) = arr2(k - x + 1)
  40.         arr2(k - x + 1) = sr
  41.     Next x
  42.     Rndcq = arr1
  43. End Function
复制代码
GIF.gif

评分

3

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-1-17 15:27 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2017-3-25 09:47 | 显示全部楼层

如果不是这种格式,代码有应该怎么写呢?请问大侠

安徽省2008年学业水平测试科学基础试题(生物部分).zip

144.26 KB, 下载次数: 22

TA的精华主题

TA的得分主题

发表于 2017-3-27 02:25 | 显示全部楼层
zhouguangcai 发表于 2017-3-25 09:47
如果不是这种格式,代码有应该怎么写呢?请问大侠

Sub 随机调换答案顺序2()
    Dim mt, mk, oRng As Range, n&, m&, str$, TT$
    Dim rg As Range, arr(), x%, d As Object, k&, a
    Set d = CreateObject("Scripting.Dictionary")
    str = Replace(ActiveDocument.Content, Chr(7), "")
    With CreateObject("vbscript.regexp")
        .Global = True: .IgnoreCase = False
        .Pattern = "\d+[.。].+?(?=\d+[.。]|$)"
        For Each mt In .Execute(str)
            m = mt.FirstIndex: n = mt.Length
            Set oRng = ActiveDocument.Range(m, m + n)
            .Pattern = "[A-Z]+.((?![A-Z].).)+"
            TT = Replace(oRng.Text, Chr(7), "")
            For Each mk In .Execute(TT)
                m = mk.FirstIndex: n = mk.Length
                Set rg = ActiveDocument.Range(oRng.Start + m, oRng.Start + m + n)
                rg.Start = rg.Start + 2: rg.End = rg.End - 1
                If Right(rg.Text, 1) = vbTab Or Right(rg.Text, 1) = vbCr Then
                    rg.End = rg.End - 1
                End If
                x = x + 1: k = k + 1: ReDim Preserve arr(1 To x)
                arr(x) = rg: Set d(k) = rg
            Next
            If x > 0 Then
                a = Rndcq(arr, x)
                For i = 0 To d.Count - 1
                    d.items()(i).Text = a(i + 1)
                Next
            End If
            x = 0: k = 0: d.RemoveAll
        Next
    End With
End Sub
Function Rndcq(arr, r As Integer)
    Dim arr1(), arr2%(), sr%, x%, y%, num%, k%
    k = UBound(arr)
    ReDim arr2(1 To k): ReDim arr1(1 To r)
    For y = 1 To k
        arr2(y) = y
    Next
    Randomize
    For x = 1 To r
        num = (Rnd() * ((k - x + 1) - 1) + 1) \ 1
        arr1(x) = arr(arr2(num))
        sr = arr2(num)
        arr2(num) = arr2(k - x + 1)
        arr2(k - x + 1) = sr
    Next x
    Rndcq = arr1
End Function

TA的精华主题

TA的得分主题

发表于 2017-3-27 02:36 | 显示全部楼层
zhouguangcai 发表于 2017-3-25 09:47
如果不是这种格式,代码有应该怎么写呢?请问大侠

附件,打开,点击按钮》》》》》》》》》》》》》》》》》》》》

安徽省2008年学业水平测试科学基础试题(生物部分).rar

151.74 KB, 下载次数: 34

评分

3

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-3-27 15:50 | 显示全部楼层
duquancai 发表于 2017-3-27 02:36
附件,打开,点击按钮》》》》》》》》》》》》》》》》》》》》

谢谢duquancai兄的分享!!
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-22 11:40 , Processed in 0.043705 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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