【问题标题】:Is there a way to split contents of a cell which has part of its text strikenthrough?有没有办法拆分具有部分文本删除线的单元格的内容?
【发布时间】:2015-11-11 22:13:29
【问题描述】:

我知道如果我检查 Font 的删除线属性,例如 range("C1").Font.Strikethrough,如果所有单元格都是删除线,我将拥有 True,如果不是,我将拥有 False,但在这样的单元格中检查它:



属性的结果是Null

现在,知道了这一点,有没有办法识别内容单元格的一部分是否是“删除线”,然后解析它以便我可以用其他文本替换?

我知道我可以检查每个字符(查看此example)如果它具有活动属性但是,我怎么知道文本的哪一部分是删除线,然后用另一个文本替换该文本?

【问题讨论】:

  • 你想用什么来代替它?它是在所有单元格中都相同,还是您要用相同的文本替换它,只是没有删除?
  • 与另一个文本可能来自另一个单元格。如果它是相同的文本但没有删除,我认为我可以使用这样的东西:example
  • Range("c1").Characters(start,length ).font.strikethrough,可能是一个不错的起点,但您需要循环起点,长度为 1。然后您可以从 1 到现在使用 MID 并添加您的替换

标签: excel vba strikethrough


【解决方案1】:

所以我在考虑如何做到这一点,并想出了以下功能。

Function strkThr(t As Range) As String
Dim i As Long
Dim y As Boolean
Dim temp As String

y = False
temp = ""
For i = 1 To Len(t.Value)
    If Not t.Characters(i, 1).Font.Strikethrough = y Then
        temp = temp & "|"
        If y Then
            y = False
        Else
            y = True
        End If
    End If
    If Not y Then
        temp = temp & Mid(t, i, 1)
    End If
Next

strkThr = temp
End Function


Sub replace()
Dim cel As Range
For Each cel In Range("A1:A100")
    cel.Value = strkThr(cel)
    cel.Value = replace(cel.Value, "||", YOURVALUE)
Next cel
End Sub

该函数用“||”替换每组删除线文本。然后在子中您将替换“||”具有想要的价值。

【讨论】:

  • 聪明的解决方法。所以你搜索任何带有删除线的字符,用更容易处理的东西替换它,然后替换它,对吗?
  • @Kronos 是的,它放了一个“|”在组的开头和一个“|”在小组的最后。并且中间的所有内容都被跳过。你最终得到“||”代替整个组,然后将其替换为您想要的值。
  • 你知道为什么 .Characters.Font.Strikethrough 有效,但如果我使用 Left().Font.Strikethrough 无效?我知道 Left 返回一个字符串,但是,您知道是否有另一种方法可以检查子字符串是否具有删除线属性?
  • 我所做的所有研究都表明,要获取或设置字符的格式属性,需要使用字符。
  • 但是有人可以通过某种方式获取子字符串来设置这些字符的属性吗?
猜你喜欢
  • 2010-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-13
  • 2011-02-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多