此例的功能是选中一个word中的除法横式后,会自动在该横式下方生成该横式的竖式。

被除数和除数既可以是整数,也可以是小数,但是必须是无符号数字。

该例中调用了一个自定义的Sub:aaTihuanF("/","÷"),该Sub的功能是将除号/替换成手写体÷。

该例的特点是根据手写竖式的思路,逐位计算,基本上不存在由于数位太多导致溢出的情况。唯一的Bug是数位太多,被除数和除数不能写在同一行,解决的办法是,将纸张设置足够宽,字体选小字号即可。

代码中用到了3个特殊字符,是我自造的字符,其中
Α表示除法竖式中的丿,宽度为半角字符宽度;
Β表示除法竖式中的横线,线位于字符上方,线宽为半角字符宽度,但是Β本身不占位置,相当于给数字加了一个上划线;
Η是一个不占位置的小数点,方便对齐数字。

Sub 数学除法竖式()'原创作品,作者:王欢为,WX:13772568903Dim Str1$, Str2$, Str3$, Str4$, Str5$, Str6$, Str7$, _Len1&, Len2&, Len3&, Len5&, Kaishi&, Jieshu&, _Kong1&, Qian1&, Qiuhe1&, Jinwei1, Benwei1, Shang1&, _Beichushu1$, Chengji1$, Yushu1$, Charu1$, Charu2$Dim Arr3(0 To 9) As StringArr3(0) = "0"Kaishi = Selection.StartJieshu = Selection.EndIf Jieshu - Kaishi < 3 ThenSelection.HomeKey Unit:=wdLineSelection.EndKey Unit:=wdLine, Extend:=wdExtendEnd IfKaishi = Selection.StartJieshu = Selection.EndCall aaTihuanF("/", "÷")Str1 = "  ,,"'除式中可能会出现的所有字符,出现其他字符则退出Str2 = Str1 & "1234567890.Η/÷"For ii = Jieshu - 1 To Kaishi + 1 Step -1Selection.Start = ii - 1Selection.End = iiIf InStr(1, Str2, Selection.Text) < 1 ThenGoTo tuichu1End IfNext'删除除式中不必要的字符Selection.Start = Jieshu - 1Selection.End = JieshuIf Selection.Text < "0" Or Selection.Text > "9" ThenJieshu = Jieshu - 1End If'在开始处插入÷Selection.End = KaishiSelection.TypeText Text:="÷"Jieshu = Jieshu + 1For ii = Jieshu To Kaishi + 1 Step -1Selection.Start = ii - 1Selection.End = iiIf InStr(1, Str1, Selection.Text) > 1 Then'删除空格和逗号Selection.End = Selection.StartSelection.DeleteJieshu = Jieshu - 1ElseIf Selection.Text = "." Then'将小数点换成不占位小数点Selection.End = Selection.StartSelection.DeleteSelection.TypeText Text:="Η"ElseIf Selection.Text = "÷" Then'找到÷的位置Selection.Start = iiSelection.End = ii + 1If Selection.Text = "0" Then'找到÷0的位置Selection.Start = ii + 1Selection.End = ii + 2Do While Selection.Text = "0"'将÷00变成÷0Selection.End = Selection.StartSelection.DeleteJieshu = Jieshu - 1Selection.Start = ii + 1Selection.End = ii + 2LoopIf Selection.Text >= "0" And Selection.Text <= "9" Then'将÷0数字变成÷数字Selection.Start = iiSelection.End = iiSelection.DeleteJieshu = Jieshu - 1End IfEnd IfEnd IfNext'删除之前插入的÷Selection.Start = KaishiSelection.End = KaishiSelection.DeleteJieshu = Jieshu - 1Selection.End = Jieshu'获取被除数和除数Str1 = Selection.TextIf InStr(1, Str1, "÷") < 2 Or InStr(1, Str1, "÷") = Len(Str1) ThenGoTo tuichu1End IfStr2 = Left(Str1, InStr(1, Str1, "÷") - 1)Str3 = Mid(Str1, InStr(1, Str1, "÷") + 1, Len(Str1))If InStr(1, Str2, "Η") > 0 ThenStr4 = Left(Str2, InStr(1, Str2, "Η") - 1)Str5 = Mid(Str2, InStr(1, Str2, "Η") + 1, Len(Str2))ElseStr4 = Str2Str5 = ""End IfIf InStr(1, Str3, "Η") > 0 ThenStr6 = Left(Str3, InStr(1, Str3, "Η") - 1)Str7 = Mid(Str3, InStr(1, Str3, "Η") + 1, Len(Str3))ElseStr6 = Str3Str7 = ""End IfStr3 = Str6 & Str7For ii = Len(Str5) + 1 To Len(Str7)Str5 = Str5 & "0"NextLen5 = Len(Str5) - Len(Str7)Str2 = Str4 & Str5'去除被除数最左侧的0For ii = 1 To Len(Str2) - 1If Left(Str2, 1) = "0" ThenStr2 = Right(Str2, Len(Str2) - 1)ElseExit ForEnd IfNextFor ii = Len(Str2) To Len5Str2 = "0" & Str2Next'Len2表示被除数的长度Len2 = Len(Str2)'去除除数最左侧的0For ii = 1 To Len(Str3) - 1If Left(Str3, 1) = "0" ThenStr3 = Right(Str3, Len(Str3) - 1)ElseExit ForEnd IfNext'Len3表示除数的长度Len3 = Len(Str3)'判断除数不能为0If Str3 = "0" ThenRtn = MsgBox("除数不能为0", vbOKCancel, "警告")GoTo tuichu1End If'储存除数的1~9倍数Arr3(1) = "0" & Str3For ii = 2 To 9'Jinwei1用来表示求和的进位或作差的借位,此处为进位Jinwei1 = 0For jj = Len(Arr3(1)) To 1 Step -1'Qiuhe1可能是求和的和,也可能是作差的差,此处是和Qiuhe1 = Val(Mid(Arr3(ii - 1), jj, 1)) + Val(Mid(Arr3(1), jj, 1)) + Jinwei1Benwei1 = Qiuhe1 Mod 10Jinwei1 = Int(Qiuhe1 / 10)Arr3(ii) = "" & Benwei1 & Arr3(ii)NextNext'去除倍数最左侧的0For ii = 1 To 9If Left(Arr3(ii), 1) = "0" ThenArr3(ii) = Mid(Arr3(ii), 2, Len(Arr3(ii)) - 1)End IfNext'书写被除数除以除数竖式Selection.MoveRight Unit:=wdCharacter, Count:=1Selection.TypeParagraphKaishi = Selection.StartSelection.TypeText Text:=Str3 & "Α"For ii = 1 To Len2Selection.TypeText Text:="Β" & Mid(Str2, ii, 1)Next'Kong1表示从行首位置向右数,Shang1在第几位Kong1 = Len3 + 2'Str1用来储存整个商Str1 = ""'Beichushu1表示每次实际使用的那一段被除数Beichushu1 = ""For ii = 1 To Len2'之前的余数是空,下一位补一个0还是空;其余情况正常补下一位数字即可If Beichushu1 = "" And Mid(Str2, ii, 1) = "0" ThenBeichushu1 = ""ElseBeichushu1 = Beichushu1 & Mid(Str2, ii, 1)End If'从9到1依次试商,要求乘积小于等于被除数,第一个满足条件的数就是商,没有合适的就补0For kk = 9 To 1 Step -1If Len(Arr3(kk)) = Len(Beichushu1) And Arr3(kk) <= Beichushu1 ThenExit ForEnd IfIf Len(Arr3(kk)) < Len(Beichushu1) ThenExit ForEnd IfNextShang1 = kkStr1 = Str1 & Shang1If Shang1 = "0" ThenKong1 = Kong1 + 1ElseCharu1 = ""For jj = 1 To Kong1 - Len(Beichushu1)Charu1 = Charu1 & " "NextCharu1 = Charu1 & Beichushu1For jj = ii + 1 To Len2Charu1 = Charu1 & " "NextCharu2 = Mid(Charu1, 1, Len3)For jj = Len3 + 1 To Len2 + Len3 + 1Charu2 = Charu2 & "Β" & Mid(Charu1, jj, 1)NextSelection.TypeParagraphSelection.TypeText Text:=Charu2Chengji1 = Arr3(Shang1)Charu1 = ""For jj = 1 To Kong1 - Len(Chengji1)Charu1 = Charu1 & " "NextCharu1 = Charu1 & Chengji1For jj = ii + 1 To Len2Charu1 = Charu1 & " "NextSelection.TypeParagraphSelection.TypeText Text:=Charu1Kong1 = Kong1 + 1'Jinwei1用来表示求和的进位或作差的借位,此处为借位Jinwei1 = 0'Yushu1表示每一次被除数与乘积的差值Yushu1 = ""For jj = Len(Chengji1) To 1 Step -1Qiuhe1 = 10 + Val(Mid(Beichushu1, jj + Len(Beichushu1) - Len(Chengji1), 1)) - Val(Mid(Chengji1, jj, 1)) - Jinwei1Benwei1 = Qiuhe1 Mod 10Jinwei1 = 1 - Int(Qiuhe1 / 10)Yushu1 = "" & Benwei1 & Yushu1NextBeichushu1 = Yushu1Do While Left(Beichushu1, 1) = "0"If Len(Beichushu1) > 1 ThenBeichushu1 = Mid(Beichushu1, 2, Len(Beichushu1) - 1)ElseBeichushu1 = ""Exit DoEnd IfLoopEnd IfNext'写最终的余数Kong1 = Kong1 - 1If Beichushu1 = "" ThenBeichushu1 = "0"End IfCharu1 = ""For jj = 1 To Kong1 - Len(Beichushu1)Charu1 = Charu1 & " "NextCharu1 = Charu1 & Beichushu1Charu2 = Mid(Charu1, 1, Len3)For jj = Len3 + 1 To Len2 + Len3 + 1Charu2 = Charu2 & "Β" & Mid(Charu1, jj, 1)NextSelection.TypeParagraphSelection.TypeText Text:=Charu2Selection.TypeParagraph'去除商最左侧的0For ii = 1 To Len(Str1) - 1If Left(Str1, 1) = "0" ThenStr1 = Right(Str1, Len(Str1) - 1)ElseExit ForEnd IfNext'Str4 = Str1'If Str4 <> "0" Then'这一段预留下,可以对商为0的情况改写。'End If'根据小数点位置,补充商左侧的0For ii = Len(Str1) To Len5Str1 = "0" & Str1Next'补充商左侧的空格For ii = Len(Str1) To Len2 + Len3Str1 = " " & Str1Next'为商插入不占位的小数点If Len5 > 0 ThenStr1 = Left(Str1, Len(Str1) - Len5) & "Η" & Right(Str1, Len5)End If'写商Selection.Start = KaishiSelection.End = KaishiSelection.TypeText Text:=Str1Selection.TypeParagraph'为被除数插入不占位的小数点If Len5 > 0 ThenSelection.EndKey Unit:=wdLineSelection.MoveLeft Unit:=wdCharacter, Count:=2 * Len5Selection.TypeText Text:="Η"Selection.HomeKey Unit:=wdLineEnd If'删除被除数下面多于的一行Selection.MoveDown Unit:=wdParagraph, Count:=1Selection.EndKey Unit:=wdLine, Extend:=TrueSelection.Delete'设置字体Selection.WholeStorySelection.Font.Name = "仿宋极简"
tuichu1:
End Sub
Sub aaTihuanF(Txt1_s As String, Txt2_s As String, Optional ByVal Num1_s As Integer)With Selection.Find.ClearFormatting '清除格式.Replacement.ClearFormatting '清除格式.MatchByte = True '区分全角和半角.MatchWildcards = False '不使用通配符.Wrap = wdFindStop '不从头开始查找替换.Text = Txt1_s '被替换的文字.Replacement.Text = Txt2_s '替换的文字If Num1_s > 1 ThenFor ii_s = 1 To Num1_s.Execute Replace:=wdReplaceAllNextElse.Execute Replace:=wdReplaceAll '替换所有End IfEnd With
End Sub

关于该代码的运行视频

word宏

【Word宏】根据除法的横式写竖式相关推荐

  1. html怎样将单元格的字竖式,数学竖式计算的标准格式是怎样的?需要注意哪些问题?...

    小学阶段数学计算题是重中之重,也是为日后打基础的时间段,所以在小学的时候,要让孩子熟练掌握数学计算.数学计算在这段时期一般比较简单,通常情况下学生可以采用口算.心算的形式,但是有的学生因为这两个能力不 ...

  2. 用html写除法竖式代码,除法的竖式写法

    <除法的竖式写法>由会员分享,可在线阅读,更多相关<除法的竖式写法(14页珍藏版)>请在人人文库网上搜索. 1.除法竖式的认识,有余数的除法,五,课件设计:张李梅 四川巴中市恩 ...

  3. 用html写除法竖式代码,模拟竖式除法

    Description 设有下列的算式: 8 0 9 ----------- 口口)   口口口口 口口 ----------- 口口口 口口口 ----------- 1 求出□中的数字,并打印出完 ...

  4. 【算法设计zxd】第3章 迭代法 杨辉三角,穿越沙漠,内存移动,竖式相乘(阶乘)

    目录 迭代:(辗转法)        一种 不断用变量的旧值递推新值的过程 [例3-1] 输出如图的杨辉三角形. [例3-2]穿越沙漠问题 [例3-2]内存移动问题 [例3-4]编程求当n<=1 ...

  5. Word:字符横式分数转换为竖式分数

    目录 一.问题设定 二.思路分析 1.第一步:定位公式区域 (1)方法概述 (2)操作 2.转换为公式 (1)手动操作 (2)Word VBA代码操作 三.补充 四.总结 1.重视Word替换 2.关 ...

  6. c语言横纵坐标乘法,C语言 · 猜算式 · 乘法竖式

    题目:猜算式 你一定还记得小学学习过的乘法计算过程,比如: 273 x   15 ------ 1365 273 ------ 4095 请你观察如下的乘法算式 *** x   *** ------- ...

  7. 分数如何进行竖式计算机,分数列竖式计算怎么写

    1.分数怎么列竖式计算 分数一般转化为小数,之后再进行竖式计算. 例如算式:1/2+3转化为0.5+3 竖式如下: 扩展资料: 竖式计算法则 1.乘法 一个数的第i位乘上另一个数的第j位 就应加在积的 ...

  8. word 代码块_如何优雅的写好 Pythonic 代码?

    (点击上方公众号,可快速关注一起学Python) Python 与其它语言(比如Java或者C++)相比有比较大的区别,其中最大的特点就是非常简洁.如果按照其它语言的思路来写Python代码,则会使得 ...

  9. 小数除以整数在c语言,小数除法竖式计算的错因分析

    一. 问题的提出 新教材使用后第二次教学小数除法,同事们有的按新教材的教学顺序教.有的仍然按老教材的教学顺序教,感觉老教材更符合学生的认知规律,易于学生接受.我想研究一下到底哪一种教学顺序更适合学生. ...

最新文章

  1. CentOS7.4 安装mongodb
  2. 【开源】博客园文章编辑器4.0版发布
  3. python:列表增加元素,删除元素,切片等
  4. php final这个关键词代表什么,php面向对象之final关键字用法及实例
  5. 不同分辨率的LCM进行兼容
  6. PostgreSQL触发器的使用
  7. LeetCode 01【两数之和】【LeetCode人生第一题!】
  8. 7-6 红豆生南国 (25 分)
  9. 如何利用极致业务基础平台构建一个通用企业ERP之十三盘点单设计
  10. sklearn.datasets.base中Bunch类
  11. 租房高峰期,房产中介机构如何快速锁定客户?
  12. BestSync多终端文件资料同步利器
  13. html微信长按保存图片vue,vue微信ios长按图片导致大面积被选择bug及其修复方案...
  14. PLC程序案例一:喷泉电路(采用中间继电器完成分步控制)
  15. mysql四种隔离级别
  16. 迷宫寻宝(一) 82
  17. [日记]初中时写的一篇日记
  18. Android IPC机制之IPC概念、Android 多进程和相关基础知识
  19. can转串口 LCNET PRO RS-232485 ——专为电力用和矿用设计的 CAN 转 RS-232 和 CAN 转 RS-485 转换器
  20. 电气CAD(即ACE)将自建块导入系统元件库中,学习笔记

热门文章

  1. 下载图片,文档,excel导入导出
  2. HTML实体符号记录
  3. 空气净化器十大排名,家用空气净化器排名推荐
  4. php版本算法,微博短链接算法PHP版本
  5. ResultMap详解
  6. 直流电压采集显示系统
  7. 华为机考攻略(python)--字符串操作【9题】(第五题HJ101输入整型数组和排序标识)
  8. html地址栏添加icon小图标
  9. 你如何理解mysql的读写分离_面试官:谈谈你对Mysql数据库读写分离的了解,并且有哪些注意事项?...
  10. 行内元素与块级元素的区别