ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

试题中的解析部分在试卷最后,如何提取到每个题干的后面?

[复制链接]

TA的精华主题

TA的得分主题

发表于 2020-3-7 05:59 | 显示全部楼层 |阅读模式
在整理一套试卷,试题的解析再试卷的最后,如何把它提取到每个题干的后面?
有很多道题,手动复制粘贴不符合懒人精神的!
先行谢谢了。

TA的精华主题

TA的得分主题

发表于 2020-3-7 08:56 来自手机 | 显示全部楼层
要发上具体的文档,才能使帮助你的大神的作品更具普适性。

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-3-7 15:00 | 显示全部楼层
wdpfox 发表于 2020-3-7 08:56
要发上具体的文档,才能使帮助你的大神的作品更具普适性。

好的。谢谢。

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-3-7 15:02 | 显示全部楼层
示例文件,请大神帮忙。 示例.rar (12.16 KB, 下载次数: 36)

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-3-9 17:58 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2020-3-9 21:16 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
第一步:选择题目部分:
替换:^13([A-D].[!^13]@)
为:#\1
第二步选择答案部分:
替换:^13(【解答】)
为:#\1
第三步:分别选定题干和答案==>文本转换为表格,得到2个表格;
第四步:将第二个表格粘贴到第一个表右边==>表格转文本,分隔符@;
第五步:
替换[#\@]
为^p
OK.

评分

2

查看全部评分

TA的精华主题

TA的得分主题

发表于 2020-3-9 21:16 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 zhanglei1371 于 2020-3-9 22:44 编辑

      重复了        

TA的精华主题

TA的得分主题

发表于 2020-3-11 13:06 | 显示全部楼层
zhanglei1371 发表于 2020-3-9 21:16
第一步:选择题目部分:
替换:^13([A-D].[!^13]@)
为:#\1

能不能做成VBA代码,对这种重复性工作来说就方便多了。

TA的精华主题

TA的得分主题

发表于 2020-3-11 22:06 | 显示全部楼层
断断续续做了一天,以6楼思路录制和选定相应位置的代码终于完工了。共享,并供有需要的坛友下载。也希望得到论坛高手斧正。
Sub 将答案解析提取到每个题干后() '特别提醒:答案和解析之间必须最少有一行空行,并且不能出现中间不能出现任何其他文字。如本例中,去掉“答案及解析:”字样,在答案后面也不能有其他任何其他文字
  'http://club.excelhome.net/thread-1524588-1-1.html
  Application.ScreenUpdating = False  '关闭屏幕刷新,成倍提高效率
  Application.DisplayAlerts = False '关闭提示
  Dim doc As Document, i As Paragraph
  Set doc = ActiveDocument
  Selection.WholeStory
  Selection.Find.ClearFormatting
  Selection.Find.Replacement.ClearFormatting
  For Each i In doc.Paragraphs
    k = k + 1
    With i.Range
      If Len(i.Range) = 1 Then  'http://club.excelhome.net/thread-1459894-1-1.html
        r = k - 1: Exit For
      End If
    End With
  Next
  'https://wenda.so.com/q/1463071157728730
  doc.Range(Start:=doc.Paragraphs(1).Range.Start, End:=doc.Paragraphs(r).Range.End).Select
  Selection.Find.ClearFormatting
  Selection.Find.Replacement.ClearFormatting
  With Selection.Find
    .Text = "^13([A-D].[!^13]@)"
    .Replacement.Text = "#\1"
    .Forward = True
    .Wrap = wdFindAsk
    .Format = False
    .MatchCase = False
    .MatchWholeWord = False
    .MatchByte = False
    .MatchAllWordForms = False
    .MatchSoundsLike = False
    .MatchWildcards = True
  End With
  Selection.Find.Execute Replace:=wdReplaceAll
  Selection.ConvertToTable Separator:=wdSeparateByParagraphs, NumColumns:=1, _
     NumRows:=3, AutoFitBehavior:=wdAutoFitFixed
  With Selection.Tables(1)
    .Style = "网格型"
    .ApplyStyleHeadingRows = True
    .ApplyStyleLastRow = False
    .ApplyStyleFirstColumn = True
    .ApplyStyleLastColumn = False
  End With
  Selection.WholeStory
  With doc    '压栈,提高一定效率
    aCount = .Paragraphs.Count   '避免循环节中每次都读取对象,提高一定效率
    For i1 = aCount To 1 Step -1  '段落从后往前循环
      If Len(.Paragraphs(i1).Range) = 1 Then Exit For '只有一次对象读取,不定义变量
    Next
  End With  '出栈,释放内存
  '请教高手:VBA中如何实现选择word中第二段到最后一段的文本。急呀!!!_360问答  https://wenda.so.com/q/1399994550062778
  doc.Range(doc.Paragraphs(i1 + 1).Range.Start, doc.Range.End).Select
  Selection.Find.ClearFormatting
  Selection.Find.Replacement.ClearFormatting
  With Selection.Find
    .Text = "^13(【解答】)"
    .Replacement.Text = "#\1"
    .Forward = True
    .Wrap = wdFindAsk
    .Format = False
    .MatchCase = False
    .MatchWholeWord = False
    .MatchByte = False
    .MatchAllWordForms = False
    .MatchSoundsLike = False
    .MatchWildcards = True
  End With
  Selection.Find.Execute Replace:=wdReplaceAll
  Selection.ConvertToTable Separator:=wdSeparateByParagraphs, NumColumns:=1, _
     NumRows:=3, AutoFitBehavior:=wdAutoFitFixed
  With Selection.Tables(1)
    .Style = "网格型"
    .ApplyStyleHeadingRows = True
    .ApplyStyleLastRow = False
    .ApplyStyleFirstColumn = True
    .ApplyStyleLastColumn = False
  End With
'  http://blog.sina.com.cn/s/blog_3fcc205b0102xlzc.html
  Selection.Cut
  ActiveWindow.ActivePane.VerticalPercentScrolled = 0
  Selection.HomeKey wdStory
  With Selection
    For pc = 1 To .Tables(1).Range.Paragraphs.Count
      If Not .Information(12) Then
        Call MoveToDocEndParagraph
      Else
        Call MoveToDocEndParagraph
        Selection.Paste: Exit For
      End If
    Next
  End With
  Selection.Rows.ConvertToText Separator:=wdSeparateByDefaultListSeparator, _
    NestedTables:=True
  Selection.Find.ClearFormatting
  Selection.Find.Replacement.ClearFormatting
  With Selection.Find
    .Text = "[#\@]"
    .Replacement.Text = "^p"
    .Forward = True
    .Wrap = wdFindAsk
    .Format = False
    .MatchCase = False
    .MatchWholeWord = False
    .MatchByte = False
    .MatchAllWordForms = False
    .MatchSoundsLike = False
    .MatchWildcards = True
  End With
  Selection.Find.Execute Replace:=wdReplaceAll
  Call 删除尾部空行
  Application.DisplayAlerts = True '开启提示
  Application.ScreenUpdating = True  '恢复屏幕刷新
End Sub

Sub MoveToDocEndParagraph()
  '移动光标至当前段落的结尾
  Selection.MoveDown Unit:=wdParagraph
End Sub

Sub 删除尾部空行()
  'Excel WORD中选择最后一个字符至最后一个回车符号的VBA代码。怎么写。-Word-ExcelHome技术论坛 -  http://club.excelhome.net/thread-1181449-1-1.html
  Application.ScreenUpdating = False  '关闭屏幕刷新,成倍提高效率
  Dim aCount&, i&
  With ActiveDocument    '压栈,提高一定效率
    aCount = .Paragraphs.Count   '避免循环节中每次都读取对象,提高一定效率
    For i = aCount To 1 Step -1  '段落从后往前循环
      If .Paragraphs(i).Range.Text <> Chr(13) Then Exit For  '只有一次对象读取,不定义变量
          '段落字符不是回车符时退出循环,i为最后一个有字符的段落号
    Next
    .Range(.Paragraphs(i).Range.End, .Content.End).Delete  '删除段落i的末尾到文档的末尾范围。减少对象删除次数。
  End With  '出栈,释放内存
  Application.ScreenUpdating = True  '恢复屏幕刷新
End Sub

TA的精华主题

TA的得分主题

发表于 2020-3-20 22:07 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
另一种代码。具有更广泛的拓展性。
Sub 提解析()
  Dim isr As String
  With ActiveDocument.Content
    With .Find
      Do While .Execute("[0-9]{1,2}.[答][案][:]*^13[【解答】]*^13", , , 1, , , 1)
        n = n + 1
        isr = isr & .Parent.Text
      Loop
    End With
    Selection.HomeKey unit:=wdStory
    ActiveDocument.Content.Find.Execute "[0-9]{1,2}.[答][案][:]*^13[【解答】]*^13", , , 1, , , 1, , , "", 2 '删除选项后的解析
    With ActiveDocument
      With .Range(.Range.End - 1, .Range.End - 1)
        .InsertAfter vbCr
        .InsertAfter isr
      End With
    End With
  End With
  Selection.EndKey unit:=wdStory
  '删除当前行 word vba 控制光标常用代码_ssson的专栏-CSDN博客  https://blog.csdn.net/ssson/article/details/88771194
  Selection.HomeKey unit:=wdLine
  Selection.EndKey unit:=wdLine, Extend:=wdExtend
  Selection.Delete
End Sub
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-24 11:48 , Processed in 0.034893 second(s), 15 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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