ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 有难度的提取每个试题选择项到题前或题后

[复制链接]

TA的精华主题

TA的得分主题

发表于 2014-9-19 10:18 | 显示全部楼层
考试加油站 发表于 2014-9-18 20:48
谢谢,确实水平很高,除了个别别括号的题(不是横线)没解决,全解决了,问一下,如答案加上括号,应当如 ...

然后,我也发现像第13题那样,填答案区域用括号的,没有做成。

楼主问的“如答案加上括号,应当如何替换”,
这个分两层意思,分别如下第一种情况、第二种情况。

第一种情况、空着欲填答案的地方为括号
这里以全角括号为例,而且,预留空白位置嘛,里边至少有一个半角空格吧。
那就将第2次的“查找内容”改一下,将 两根下划线 改成 全角左括号和半角空格,即:
(全角左括号和半角空格)(任意文字)勾勾(大写英文半角的单个字母),代码如下:
  1. (( )(*)√([A-Z]{1})
复制代码
其它的不变。
这个应该可以在4次替换做完后,再做第5次替换。

第二种情况、空着欲填答案的地方为下划线、填完后为全角括号括起来的字母(中间也不要空格)
这种的话,要将第2次的“查找内容”和“替换为”都改一下。
“查找内容”:
(两根下划线)(一根或多根下划线)(任意文字)勾勾(大写英文半角的单个字母),代码如下:
  1. (__)(_{1,})(*)√([A-Z]{1})
复制代码
或者
  1. (__)(_@)(*)√([A-Z]{1})
复制代码

“替换为”:
全角左括号、第4个表达式、全角右括号、第3个表达式、第4个表达式,代码如下:
  1. (\4)\3\4
复制代码
如图:
第2次替换后改成括号.png

这个也没考虑第13题的括号,所以也要增加第5次替换,即:
“查找内容”:
(全角左括号)(任意文字后跟全角右括号)(任意文字)勾勾(大写英文半角的单个字母),代码如下:
  1. (( )(*))(*)√([A-Z]{1})
复制代码
“替换为”:
全角左括号、第4个表达式、全角右括号、第3个表达式、第4个表达式,代码如下:
  1. (\4)\3\4
复制代码


宏你自己录一下。
其中:
如果是第一种情况,你单独录“第5次替换”的宏,加了我在8楼的代码后面即可。

如果是第二种情况,你先录“第2次替换”的宏,将8楼“第2次”的换掉;再录“第5次替换”的宏,加到最后面。








TA的精华主题

TA的得分主题

 楼主| 发表于 2014-9-19 10:57 | 显示全部楼层
周星骋 发表于 2014-9-19 10:18
然后,我也发现像第13题那样,填答案区域用括号的,没有做成。

楼主问的“如答案加上括号,应当如何替 ...

非常感谢,基本解决问题,余下手工做一下。

TA的精华主题

TA的得分主题

发表于 2014-9-19 15:36 | 显示全部楼层
努力学习                 

TA的精华主题

TA的得分主题

发表于 2014-9-19 16:24 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
考试加油站 发表于 2014-9-19 10:57
非常感谢,基本解决问题,余下手工做一下。

我将录制的宏完整的改了一遍。
做成两个,一个是答案填到下划线上的,另一个是答案填到圆括号里的。

顺便将全角下划线“_”的两道题也做了。
只剩下以下几种情况没做:
1、备选答案前的字母未突出显示的,如第348、421题;
2、题中未留填答案处的,如第385、535题(这种情况,不敢用回车作为查找内容的开头,否则会大段文字被替换掉);
3、备选答案前的字母是自动编号的,如第401题;
4、备选答案前的字母是全角的,如第500、813、818、910题(这几道备选答案是全角字母的,做出来的答案也是错的)。
这几种情况只有手工处理一下了,办法很简单,由于前边的替换给备选答案字母前加了勾勾“√”,只要是没替换成功的,勾勾还在,所以手工查找一下勾勾“√”就能找到如上说的那几种情况。

还有两种情况是比较危险的:
1、上面说了,题中未留填答案处,即:既没有下划线“____”、也没有括号“(  )”,但题后肯定有个回车对吧。可是不敢从“回车”查到勾勾,即“(^13)(*)√([A-Z]{1})”,因为文中到处都是回车,若这样替换的话,势必将大段文字替换掉。
2、题中填答案处为括号的,一般不会中间不加空格“()”,所以查找内容的起始字符串最好是括号后带个空格“( ”,我在宏代码中写成括号后带两个空格“(  ”,这样安全点。否则,题目中很多地方也有括号,若不带空格查找替换,也势必将大段文字替换掉。加一个空格查找,错误机会就少一点;加两个空格查找,错误机会就更少了;如果空格加多了,恐怕填答案处就没这么多空格。不过,宁可找漏掉,也不要替换错了。

好了,下面是代码。

第一种情况,答案填到下划线上:
  1. Sub 单选题答案填到下划线上()
  2. ' 周星骋 编制

  3. '第1次替换
  4. Selection.Find.ClearFormatting '清除查找格式
  5. Selection.Find.Highlight = True '查找:突出显示
  6. Selection.Find.Replacement.ClearFormatting '清除替换格式
  7. With Selection.Find
  8. .Text = ""
  9. .Replacement.Text = "√^&" '替换为“√^&”
  10. .Forward = True
  11. .Wrap = wdFindContinue '搜索全部
  12. .Format = True
  13. .MatchCase = False '区分大小写:否
  14. .MatchWholeWord = False '全字匹配:否
  15. .MatchByte = False '区分全/半角:否
  16. .MatchWildcards = False '使用通配符:否
  17. .MatchSoundsLike = False '同音(英文):否
  18. .MatchAllWordForms = False '查找单词的所有形式(英文):否
  19. End With
  20. Selection.Find.Execute Replace:=wdReplaceAll '全部替换

  21. '第2次替换
  22. Selection.Find.ClearFormatting '清除查找格式
  23. Selection.Find.Replacement.ClearFormatting '清除替换格式
  24. With Selection.Find
  25. .Text = "(__)(*)√([A-Z]{1})" '查找内容“(__)(*)√([A-Z]{1})”
  26. .Replacement.Text = "\1\3\2\3" '替换为“\1\3\2\3”
  27. .Forward = True
  28. .Wrap = wdFindContinue '搜索全部
  29. .Format = False
  30. .MatchCase = False '区分大小写:否
  31. .MatchWholeWord = False '全字匹配:否
  32. .MatchByte = False '区分全/半角:否
  33. .MatchAllWordForms = False '查找单词的所有形式(英文):否
  34. .MatchSoundsLike = False '同音(英文):否
  35. .MatchWildcards = True '使用通配符:是
  36. End With
  37. Selection.Find.Execute Replace:=wdReplaceAll '全部替换

  38. '第3次替换
  39. Selection.Find.ClearFormatting '清除查找格式
  40. Selection.Find.Highlight = True '查找:突出显示
  41. Selection.Find.Replacement.ClearFormatting '清除替换格式
  42. Selection.Find.Replacement.Highlight = False '替换:非突出显示
  43. With Selection.Find
  44. .Text = ""
  45. .Replacement.Text = ""
  46. .Forward = True
  47. .Wrap = wdFindContinue
  48. .Format = True
  49. .MatchCase = False '区分大小写:否
  50. .MatchWholeWord = False '全字匹配:否
  51. .MatchByte = False '区分全/半角:否
  52. .MatchWildcards = False '使用通配符:否
  53. .MatchSoundsLike = False '同音(英文):否
  54. .MatchAllWordForms = False '查找单词的所有形式(英文):否
  55. End With
  56. Selection.Find.Execute Replace:=wdReplaceAll '全部替换

  57. '第4次替换
  58. Selection.Find.ClearFormatting '清除查找格式
  59. Selection.Find.Replacement.ClearFormatting '清除替换格式
  60. Selection.Find.Replacement.Font.Underline = wdUnderlineSingle '替换为→特殊格式→字体→单下划线
  61. With Selection.Find
  62. .Text = "(__)([A-Z]{1})" '查找内容“(__)([A-Z]{1})”
  63. .Replacement.Text = "\1\2" '替换为“\1\2”
  64. .Forward = True
  65. .Wrap = wdFindContinue
  66. .Format = True
  67. .MatchCase = False '区分大小写:否
  68. .MatchWholeWord = False '全字匹配:否
  69. .MatchByte = False '区分全/半角:否
  70. .MatchAllWordForms = False '查找单词的所有形式(英文):否
  71. .MatchSoundsLike = False '同音(英文):否
  72. .MatchWildcards = True '使用通配符:是
  73. End With
  74. Selection.Find.Execute Replace:=wdReplaceAll '全部替换

  75. '第5次替换
  76. Selection.Find.ClearFormatting '清除查找格式
  77. Selection.Find.Replacement.ClearFormatting '清除替换格式
  78. With Selection.Find
  79. .Text = "(( )(*)√([A-Z]{1})" '查找内容“(( )(*)√([A-Z]{1})”
  80. .Replacement.Text = "\1\3\2\3" '替换为“\1\3\2\3”
  81. .Forward = True
  82. .Wrap = wdFindContinue
  83. .Format = False
  84. .MatchCase = False '区分大小写:否
  85. .MatchWholeWord = False '全字匹配:否
  86. .MatchByte = False '区分全/半角:否
  87. .MatchAllWordForms = False '查找单词的所有形式(英文):否
  88. .MatchSoundsLike = False '同音(英文):否
  89. .MatchWildcards = True '使用通配符:是
  90. End With
  91. Selection.Find.Execute Replace:=wdReplaceAll '全部替换

  92. '第6次替换
  93. Selection.Find.ClearFormatting '清除查找格式
  94. Selection.Find.Replacement.ClearFormatting '清除替换格式
  95. With Selection.Find
  96. .Text = "(_)(*)√([A-Z]{1})" '查找内容“(_)(*)√([A-Z]{1})”
  97. .Replacement.Text = "\1\3\2\3" '替换为“\1\3\2\3”
  98. .Forward = True
  99. .Wrap = wdFindContinue
  100. .Format = False
  101. .MatchCase = False '区分大小写:否
  102. .MatchWholeWord = False '全字匹配:否
  103. .MatchByte = False '区分全/半角:否
  104. .MatchAllWordForms = False '查找单词的所有形式(英文):否
  105. .MatchSoundsLike = False '同音(英文):否
  106. .MatchWildcards = True '使用通配符:是
  107. End With
  108. Selection.Find.Execute Replace:=wdReplaceAll '全部替换

  109. End Sub
复制代码

第二种情况,答案填到括号里:
(这里可以比第一种情况少替换一遍,不需要将答案加下划线)

  1. Sub 单选题答案填到括号里()
  2. ' 周星骋 编制

  3. '第1次替换
  4. Selection.Find.ClearFormatting '清除查找格式
  5. Selection.Find.Highlight = True '查找:突出显示
  6. Selection.Find.Replacement.ClearFormatting '清除替换格式
  7. With Selection.Find
  8. .Text = ""
  9. .Replacement.Text = "√^&" '替换为“√^&”
  10. .Forward = True
  11. .Wrap = wdFindContinue '搜索全部
  12. .Format = True
  13. .MatchCase = False '区分大小写:否
  14. .MatchWholeWord = False '全字匹配:否
  15. .MatchByte = False '区分全/半角:否
  16. .MatchWildcards = False '使用通配符:否
  17. .MatchSoundsLike = False '同音(英文):否
  18. .MatchAllWordForms = False '查找单词的所有形式(英文):否
  19. End With
  20. Selection.Find.Execute Replace:=wdReplaceAll '全部替换

  21. '第2次替换
  22. Selection.Find.ClearFormatting '清除查找格式
  23. Selection.Find.Replacement.ClearFormatting '清除替换格式
  24. With Selection.Find
  25. .Text = "(__)(_{1,})(*)√([A-Z]{1})" '查找内容“(__)(_{1,})(*)√([A-Z]{1})”
  26. .Replacement.Text = "(\4)\3\4" '替换为“(\4)\3\4”
  27. .Forward = True
  28. .Wrap = wdFindContinue '搜索全部
  29. .Format = False
  30. .MatchCase = False '区分大小写:否
  31. .MatchWholeWord = False '全字匹配:否
  32. .MatchByte = False '区分全/半角:否
  33. .MatchAllWordForms = False '查找单词的所有形式(英文):否
  34. .MatchSoundsLike = False '同音(英文):否
  35. .MatchWildcards = True '使用通配符:是
  36. End With
  37. Selection.Find.Execute Replace:=wdReplaceAll '全部替换

  38. '第3次替换
  39. Selection.Find.ClearFormatting '清除查找格式
  40. Selection.Find.Highlight = True '查找:突出显示
  41. Selection.Find.Replacement.ClearFormatting '清除替换格式
  42. Selection.Find.Replacement.Highlight = False '替换:非突出显示
  43. With Selection.Find
  44. .Text = ""
  45. .Replacement.Text = ""
  46. .Forward = True
  47. .Wrap = wdFindContinue
  48. .Format = True
  49. .MatchCase = False '区分大小写:否
  50. .MatchWholeWord = False '全字匹配:否
  51. .MatchByte = False '区分全/半角:否
  52. .MatchWildcards = False '使用通配符:否
  53. .MatchSoundsLike = False '同音(英文):否
  54. .MatchAllWordForms = False '查找单词的所有形式(英文):否
  55. End With
  56. Selection.Find.Execute Replace:=wdReplaceAll '全部替换

  57. '第4次替换
  58. Selection.Find.ClearFormatting '清除查找格式
  59. Selection.Find.Replacement.ClearFormatting '清除替换格式
  60. With Selection.Find
  61. .Text = "(( )(*))(*)√([A-Z]{1})" '查找内容“(( )(*))(*)√([A-Z]{1})”
  62. .Replacement.Text = "(\4)\3\4" '替换为“(\4)\3\4”
  63. .Forward = True
  64. .Wrap = wdFindContinue
  65. .Format = False
  66. .MatchCase = False '区分大小写:否
  67. .MatchWholeWord = False '全字匹配:否
  68. .MatchByte = False '区分全/半角:否
  69. .MatchAllWordForms = False '查找单词的所有形式(英文):否
  70. .MatchSoundsLike = False '同音(英文):否
  71. .MatchWildcards = True '使用通配符:是
  72. End With
  73. Selection.Find.Execute Replace:=wdReplaceAll '全部替换

  74. '第5次替换
  75. Selection.Find.ClearFormatting '清除查找格式
  76. Selection.Find.Replacement.ClearFormatting '清除替换格式
  77. With Selection.Find
  78. .Text = "(_)(_{1,})(*)√([A-Z]{1})" '查找内容“(_)(_{1,})(*)√([A-Z]{1})”
  79. .Replacement.Text = "(\4)\3\4" '替换为“(\4)\3\4”
  80. .Forward = True
  81. .Wrap = wdFindContinue
  82. .Format = False
  83. .MatchCase = False '区分大小写:否
  84. .MatchWholeWord = False '全字匹配:否
  85. .MatchByte = False '区分全/半角:否
  86. .MatchAllWordForms = False '查找单词的所有形式(英文):否
  87. .MatchSoundsLike = False '同音(英文):否
  88. .MatchWildcards = True '使用通配符:是
  89. End With
  90. Selection.Find.Execute Replace:=wdReplaceAll '全部替换

  91. End Sub
复制代码


TA的精华主题

TA的得分主题

发表于 2014-9-19 16:38 | 显示全部楼层
使用通配符
查找内容:
[A-Z]{1,}
能找到全角字母。

第31、54、68、500、813、818、910题都有全角字母,
但有些题只有个别是全角且不是标准答案,所以不影响自动做题。

TA的精华主题

TA的得分主题

发表于 2014-9-19 16:50 | 显示全部楼层
好了,题做完了,有几个疑问我到是想请教楼主一下。

1、这些计算机方面的题貌似很过时吔~~,有些题现在看来不全面或者直接是错的。难道现在还用这样的题考学生?
2、有些题貌似打字员打的,这样的题备选答案中没有一个是正确的,例如:网址、邮箱中的英文半角小圆点“.”,打成了顿号“、”。这恐怕得你手工核对一遍吧?

3、我最关心的问题,像7楼一样对楼主的原文很感兴趣,就是:
那些答案标记成黄色背景突出显示,难道是手工按住 Ctrl 键一个个的选上,然后加突出显示的?这到是比复制到答题区简单一点点,但也不容易啊!
是不是用什么好办法自动标记的呢?如果是,请你告诉我一声,让我也学习一下。

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-9-19 18:53 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 考试加油站 于 2014-9-19 18:55 编辑
周星骋 发表于 2014-9-19 16:50
好了,题做完了,有几个疑问我到是想请教楼主一下。

1、这些计算机方面的题貌似很过时吔~~,有些题现在 ...


试题是我从网上下载的,本想做一个专业的计算机方面软件,其格式为A1题干,B1为A选择项,C1为B选择项,以此类推。所以搜索了一下试题,做到电子表格中就可以批量处理了。那个问题其实我也感觉兴趣。
QQ截图20140919185601.jpg

TA的精华主题

TA的得分主题

发表于 2014-9-22 09:10 | 显示全部楼层
考试加油站 发表于 2014-9-19 18:53
试题是我从网上下载的,本想做一个专业的计算机方面软件,其格式为A1题干,B1为A选择项,C1为B选择项, ...

果然是好办法,貌似用条件格式什么的。

TA的精华主题

TA的得分主题

发表于 2014-9-28 08:31 来自手机 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
围观学习中。

TA的精华主题

TA的得分主题

发表于 2014-9-28 20:18 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
如果就是从工作角度,不要很复杂的方法,其实还是可以实现的,呵呵,
就是复制一份源文件,到excel表,然后复制两份回word,分别替换主题和答案;
然偶再复制到excel,排序,然后再复制到word,
这时候只要选择表格转成文本就行!就这个思路吧,我试了一下,可以实现。
这个主要是解决答案要插入一行的问题,我觉得excel排序更好操作,wrod更好操作替换。
有点取巧,但是很好理解。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2025-1-17 03:14 , Processed in 0.026699 second(s), 7 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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