阳光石油网|石油技术交流|石油人论坛

 找回密码
 欢迎注册
查看: 2081|回复: 1

如何查找所有”#”并标为上标?

[复制链接]
  • TA的每日心情
    开心
    2012-10-14 19:24
  • 签到天数: 6 天

    [LV.2]偶尔看看I

    发表于 2012-8-19 05:18:23 | 显示全部楼层 |阅读模式

    马上注册,下载丰富资料,享用更多功能,让你轻松玩转阳光石油论坛。

    您需要 登录 才可以下载或查看,没有账号?欢迎注册

    x
    解决方案

    Range.Find方法查找每个包含“#”的单元格,并将其中的“#”字符设置字体属性——Superscript,表示上标显示。为了体现程序的通用性,允许用户自定义需要上标显示的字符,以及让程序对单元格逐个字符检查,将每一个“#”都上标显示。



    操作方法


    步骤1 确定活动工作表为“生产表”,按<Alt+F11>组合键打开VBE窗口

    步骤2 单击菜单“插入”→“模块”,并录入以下代码:


    Sub 替换指字符标示为上标()

    Dim rng As Range, i As Integer, FirstSrt As String, inputt As String

    inputt = InputBox("请指定需要上标显示的字符,只有一个字符", "指定字符", "#")'指定需要上标的字符

    Application.ScreenUpdating = False'关闭屏幕更新,从而提速

    Set rng = Cells.Find(inputt, LookAt:=xlPart, LookIn:=xlFormulas)'开始查找

    If Not rng Is Nothing Then'如果找到

    First = rng.Address'记录首个符合条件的单元格的地址

    Do'循环查找,直到返回第一个找到的单元格时停止

    For i = 1 To Len(rng)'循环检查每一个字符

    '如果某字符等于用户输入的字符,则将它上标显示

    If Mid$(rng, i, 1) = Left(inputt, 1) Then rng.Characters(Start:=i, Length:=1).Font.Superscript = True

    Next

    Set rng = Cells.FindNext(rng)'查找一下个

    Loop Until rng.Address = First
          End If

    Application.ScreenUpdating = True'恢复屏幕更新

    End Sub




    步骤3 光标置于代码中任意位置,并按<F5>键执行,表中所有表示机台号的“#”都自动上标显示。




    29&#8209;2 #标示为上标

    原理分析


    Range.Find方法的“LookAt”参数设置为“xlPart”可以实现模糊查找,将包括“#”的单元格逐个找到。而Characters属性可以定位于单元格中部分字符串,配合MID$函数可以逐个字符检查,并对符合条件的字符标示为上标。

    知识扩展


    Superscript表示上标,Subscript表示下标字符。但上标和下标都只对文本生效,如果是数值,需要将其数字格式转换成文本后再执行标示。

    如果需要对“M2”中的“2”进行上标,则可以改用以下代码:


    Sub M后面的2标示为上标()
              Dim rng As Range, i As Integer, FirstSrt As String, inputt As String

    Application.ScreenUpdating = False'关闭屏幕更新,从而提速

    Set rng = Cells.Find("M2", LookAt:=xlPart, LookIn:=xlFormulas)'开始查找

    If Not rng Is Nothing Then'如果找到

    First = rng.Address'记录首个符合条件的单元格的地址

    Do'循环查找,直到返回第一个找到的单元格时停止

    For i = 2 To Len(rng)'循环检查每一个字符,从第二位开始

    '如果某字符等于2且前一位是“M”,则将它上标显示

    If Mid$(rng, i, 1) = "2" And Mid$(rng, i - 1, 1) = "M" Then rng.Characters(Start:=i, Length:=1).Font.Superscript = True

    Next

    Set rng = Cells.FindNext(rng)'查找一下个

    Loop Until rng.Address = First
       
    ?
    End If

    Application.ScreenUpdating = True'恢复屏幕更新

    End Sub



    评分

    参与人数 1贡献 +2 收起 理由
    卢和萍 + 2 希望楼主可以写写自己的编程心得^_^

    查看全部评分

  • TA的每日心情
    开心
    2021-11-1 03:35
  • 签到天数: 956 天

    [LV.10]以坛为家III

    发表于 2014-12-9 13:08:03 | 显示全部楼层
    支持楼主顶顶顶顶顶顶顶

    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 欢迎注册

    本版积分规则

    QQ|Archiver|手机版|小黑屋|阳光石油网 ( 鲁ICP备2021003870号-1 )

    GMT+8, 2025-1-9 06:55 , Processed in 0.120086 second(s), 27 queries .

    Powered by Discuz! X3.4 Licensed

    Copyright © 2001-2021, Tencent Cloud.

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