用Excel工作表中的HTML标记替换上标和斜体
我需要去掉上标和斜体,在单词/字母周围添加一个HTML标记 例如: 我的短语有一个上标1,还有一个斜体字 应转换为:用Excel工作表中的HTML标记替换上标和斜体,html,excel,vba,superscript,italic,Html,Excel,Vba,Superscript,Italic,我需要去掉上标和斜体,在单词/字母周围添加一个HTML标记 例如: 我的短语有一个上标1,还有一个斜体字 应转换为: My phrase has a superscript<sup>1</sup> and also has an <i>italic</i> word. 我的短语有上标1和斜体字。 我已经找到了一个“解决方案”(它位于上标和斜体的位置并存储其位置),但它有很多问题。我要让它工作一段时间: Sub TagSubstitution()
My phrase has a superscript<sup>1</sup> and also has an <i>italic</i> word.
我的短语有上标1和斜体字。
我已经找到了一个“解决方案”(它位于上标和斜体的位置并存储其位置),但它有很多问题。我要让它工作一段时间:
Sub TagSubstitution()
Dim lngStart_i As Long
Dim lngFinish_i As Long
Dim lngStart_sup As Long
Dim lngFinish_sup As Long
Dim n As Long
Dim k_i As Long
Dim k_sup As Long
Dim rngCell As Range
Dim rngConstants As Range
Dim cellAddress As String
On Error Resume Next
Set rngConstants = ActiveSheet.UsedRange.SpecialCells(xlCellTypeConstants)
On Error GoTo 0
If Not rngConstants Is Nothing Then
Application.ScreenUpdating = False
For Each rngCell In rngConstants.Cells
Dim listStart_i() As Long, X_i As Long
Dim listFinish_i() As Long, Y_i As Long
Dim listStart_sup() As Long, X_sup As Long
Dim listFinish_sup() As Long, Y_sup As Long
X_i = 0
Y_i = 0
X_sup = 0
Y_sup = 0
ReDim Preserve listStart_i(X)
ReDim Preserve listFinish_i(Y)
ReDim Preserve listStart_sup(X)
ReDim Preserve listFinish_sup(Y)
lngStart_i = 0
lngStart_sup = 0
For n = 1 To Len(rngCell.Value) + 1
If rngCell.Characters(n, 1).Font.Italic Then
If lngStart_i = 0 Then
lngStart_i = n
ReDim Preserve listStart_i(0 To X_i)
listStart_i(X_i) = lngStart_i
X_i = X_i + 1
End If
ElseIf lngStart_i <> 0 Then
If Not rngCell.Characters(n, 1).Font.Italic Then
lngFinish_i = n
ReDim Preserve listFinish_i(0 To Y_i)
listFinish_i(Y_i) = lngFinish_i
Y_i = Y_i + 1
lngStart_i = 0
End If
End If
If rngCell.Characters(n, 1).Font.Superscript Then
If lngStart_sup = 0 Then
lngStart_sup = n
ReDim Preserve listStart_sup(0 To X_sup)
listStart_sup(X_sup) = lngStart_sup
X_sup = X_sup + 1
End If
ElseIf lngStart_sup <> 0 Then
If Not rngCell.Characters(n, 1).Font.Superscript Then
lngFinish_sup = n
ReDim Preserve listFinish_sup(0 To Y_sup)
listFinish_sup(Y_sup) = lngFinish_sup
Y_sup = Y_sup + 1
lngStart_sup = 0
End If
End If
Next n
If listStart_i(0) <> 0 Then
Dim sup_addition_i As Integer
sup_addition_i = 0
For k_i = LBound(listStart_i) To UBound(listStart_i)
start_value = listStart_i(k_i) + sup_addition_i
finish_value = listFinish_i(k_i) + sup_addition_i
If Len(rngCell.Value) > 255 Then
content_len = finish_value + 1 - start_value
before_content = Left(rngCell, start_value - 1)
after_content = Right(rngCell, Len(rngCell.Value) + content_len - finish_value)
after_content = Left(after_content, content_len - 1)
end_content = Right(rngCell, Len(rngCell.Value) + 1 - finish_value)
rngCell = before_content & "<i>" & after_content & "</i>" & end_content
Else
rngCell.Characters(start_value, 0).Insert "<i>"
rngCell.Characters(finish_value + 3, 0).Insert "</i>"
End If
sup_addition_i = 7 * (k_i + 1)
Next k_i
rngCell.Font.Italic = False
If listStart_sup(0) <> 0 Then
Dim sup_addition_sup As Integer
sup_addition_p = 0 - sup_addition_i
For k_sup = LBound(listStart_sup) To UBound(listStart_sup)
start_value = listStart_sup(k_sup) + sup_addition_sup
finish_value = listFinish_sup(k_sup) + sup_addition_sup
If Len(rngCell.Value) > 255 Then
content_len = finish_value + 1 - start_value
before_content = Left(rngCell, start_value - 1)
after_content = Right(rngCell, Len(rngCell.Value) + content_len - finish_value)
after_content = Left(after_content, content_len - 1)
end_content = Right(rngCell, Len(rngCell.Value) + 1 - finish_value)
rngCell = before_content & "<sup>" & after_content & "</sup>" & end_content
Else
rngCell.Characters(start_value, 0).Insert "<sup>"
rngCell.Characters(finish_value + 5, 0).Insert "</sup>"
End If
sup_addition_sup = 11 * (k_sup + 1) - sup_addition_i
Next k_sup
rngCell.Font.Superscript = False
End If
End If
Next rngCell
Application.ScreenUpdating = True
End If
End Sub
子标记替换()
暗淡的开始和我一样长
朦胧的幻想
暗淡的开始时间
暗淡的lng完成时长
长
暗淡的k_i和你一样长
调暗k_sup的长度
Dim rngCell As范围
变暗rngConstants作为范围
将单元格地址设置为字符串
出错时继续下一步
设置rngConstants=ActiveSheet.UsedRange.SpecialCells(xlCellTypeConstants)
错误转到0
如果不是rngConstants,则不算什么
Application.ScreenUpdating=False
对于RNGConStats.单元格中的每个rngCell
Dim listStart_i()长度相同,X_i长度相同
淡色列表完成时长,你长
Dim listStart_sup()长度相同,X_sup长度相同
Dim listFinish_sup()长度相同,Y_sup长度相同
X_i=0
Y_i=0
X_sup=0
Y_sup=0
ReDim保存列表开始i(X)
重读保存列表完成i(Y)
重拨保留列表开始\u支持(X)
重播保存列表完成\u支持(Y)
lngStart_i=0
lngStart_sup=0
对于n=1到Len(rngCell.Value)+1
如果为rngCell.Characters(n,1).Font.Italic,则
如果lngStart_i=0,则
lngStart_i=n
重拨保留列表开始\u i(0到X\u i)
listStart_i(X_i)=lngStart_i
X_i=X_i+1
如果结束
如果没有,那么
如果不是rngCell.Characters(n,1).Font.Italic,则
lngFinish_i=n
重拨保存列表完成\u i(0到Y\u i)
listFinish_i(Y_i)=lngFinish_i
Y_i=Y_i+1
lngStart_i=0
如果结束
如果结束
如果为rngCell.Characters(n,1).Font.Superscript,则
如果lngStart_sup=0,则
lngStart_sup=n
重拨保留列表开始支持(0到X支持)
listStart_sup(X_sup)=lngStart_sup
X_sup=X_sup+1
如果结束
如果没有,那么
如果不是rngCell.Characters(n,1).Font.Superscript,则
lngFinish\u sup=n
重拨保存列表完成(0到Y)
listFinish_sup(Y_sup)=lngFinish_sup
Y_sup=Y_sup+1
lngStart_sup=0
如果结束
如果结束
下一个
如果listStart_i(0)0,则
Dim sup_加法_i作为整数
辅助加法i=0
对于k_i=LBound(listStart_i)到UBound(listStart_i)
开始值=列表开始i(k_i)+辅助添加i
完成值=列表完成i(k_i)+辅助添加i
如果Len(rngCell.Value)>255,则
内容长度=完成长度值+1-开始长度值
前\u内容=左(rngCell,开始\u值-1)
后内容=右(rngCell,Len(rngCell.Value)+内容\u Len-完成\u值)
内容后=左(内容后,内容列-1)
结束内容=右侧(rngCell,Len(rngCell.Value)+1-结束内容值)
rngCell=内容前和内容后和内容结束
其他的
rngCell.Characters(起始值,0)。插入“”
rngCell.Characters(完成值+3,0)。插入“”
如果结束
辅助加法=7*(k_i+1)
下一个k_i
rngCell.Font.Italic=False
如果listStart_sup(0)0,则
Dim sup_加法_sup为整数
sup_addition_p=0-sup_addition_i
对于k_sup=LBound(listStart_sup)到UBound(listStart_sup)
起始值=列表起始值上限(k上限)+上限添加值上限
完成值=列表完成支持(k支持)+支持添加
如果Len(rngCell.Value)>255,则
内容长度=完成长度值+1-开始长度值
前\u内容=左(rngCell,开始\u值-1)
后内容=右(rngCell,Len(rngCell.Value)+内容\u Len-完成\u值)
内容后=左(内容后,内容列-1)
结束内容=右侧(rngCell,Len(rngCell.Value)+1-结束内容值)
rngCell=内容前和内容后和内容结束
其他的
rngCell.Characters(起始值,0)。插入“”
rngCell.Characters(完成值+5,0)。插入“”
如果结束
附加附加附加附加=11*(k附加+1)-附加附加附加
下一个k_sup
rngCell.Font.Superscript=False
如果结束
如果结束
下一个rngCell
Application.ScreenUpdating=True
如果结束
端接头
这段代码的问题是,当我在同一个单元格上同时有上标和斜体时,我会遇到这样的问题,即在插入斜体后,上标的位置与以前不同。所以我把每个标签都放错了
Sub AdicionarTags()
Dim xSh As Worksheet
Application.ScreenUpdating = False
For Each xSh In Worksheets
xSh.Select
Call TagItalic
Call TagSuperscript
Next
Application.ScreenUpdating = True
End Sub
Sub TagItalic()
Dim lngStart As Long
Dim lngFinish As Long
Dim n As Long
Dim k As Long
Dim rngCell As Range
Dim rngConstants As Range
Dim cellAddress As String
On Error Resume Next
Set rngConstants = ActiveSheet.UsedRange.SpecialCells(xlCellTypeConstants)
On Error GoTo 0
If Not rngConstants Is Nothing Then
Application.ScreenUpdating = False
For Each rngCell In rngConstants.Cells
Dim listStart() As Long, X As Long
Dim listFinish() As Long, Y As Long
X = 0
Y = 0
ReDim Preserve listStart(X)
ReDim Preserve listFinish(Y)
lngStart = 0
For n = 1 To Len(rngCell.Value) + 1
If rngCell.Characters(n, 1).Font.Italic Then
If lngStart = 0 Then
lngStart = n
ReDim Preserve listStart(0 To X)
listStart(X) = lngStart
X = X + 1
End If
ElseIf lngStart <> 0 Then
If Not rngCell.Characters(n, 1).Font.Italic Then
lngFinish = n
ReDim Preserve listFinish(0 To Y)
listFinish(Y) = lngFinish
Y = Y + 1
lngStart = 0
End If
End If
Next n
If listStart(0) <> 0 Then
Dim sup_addition As Integer
sup_addition = 0
For k = LBound(listStart) To UBound(listStart)
start_value = listStart(k) + sup_addition
finish_value = listFinish(k) + sup_addition
content_len = finish_value + 1 - start_value
before_content = Left(rngCell, start_value - 1)
after_content = Right(rngCell, Len(rngCell.Value) + content_len - finish_value)
after_content = Left(after_content, content_len - 1)
end_content = Right(rngCell, Len(rngCell.Value) + 1 - finish_value)
rngCell = before_content & "<i>" & after_content & "</i>" & end_content
sup_addition = 7 * (k + 1)
Next k
rngCell.Font.Italic = False
End If
Next rngCell
Application.ScreenUpdating = True
End If
End Sub
Sub TagSuperscript()
Dim lngStart As Long
Dim lngFinish As Long
Dim n As Long
Dim k As Long
Dim rngCell As Range
Dim rngConstants As Range
Dim cellAddress As String
On Error Resume Next
Set rngConstants = ActiveSheet.UsedRange.SpecialCells(xlCellTypeConstants)
On Error GoTo 0
If Not rngConstants Is Nothing Then
Application.ScreenUpdating = False
For Each rngCell In rngConstants.Cells
Dim listStart() As Long, X As Long
Dim listFinish() As Long, Y As Long
X = 0
Y = 0
ReDim Preserve listStart(X)
ReDim Preserve listFinish(Y)
lngStart = 0
For n = 1 To Len(rngCell.Value) + 1
If rngCell.Characters(n, 1).Font.Superscript Then
If lngStart = 0 Then
lngStart = n
ReDim Preserve listStart(0 To X)
listStart(X) = lngStart
X = X + 1
End If
ElseIf lngStart <> 0 Then
If Not rngCell.Characters(n, 1).Font.Superscript Then
lngFinish = n
ReDim Preserve listFinish(0 To Y)
listFinish(Y) = lngFinish
Y = Y + 1
lngStart = 0
End If
End If
Next n
If listStart(0) <> 0 Then
Dim sup_addition As Integer
sup_addition = 0
For k = LBound(listStart) To UBound(listStart)
start_value = listStart(k) + sup_addition
finish_value = listFinish(k) + sup_addition
content_len = finish_value + 1 - start_value
before_content = Left(rngCell, start_value - 1)
after_content = Right(rngCell, Len(rngCell.Value) + content_len - finish_value)
after_content = Left(after_content, content_len - 1)
end_content = Right(rngCell, Len(rngCell.Value) + 1 - finish_value)
rngCell = before_content & "<sup>" & after_content & "</sup>" & end_content
sup_addition = 11 * (k + 1)
Next k
rngCell.Font.Superscript = False
End If
Next rngCell
Application.ScreenUpdating = True
End If
End Sub
Option Explicit
Sub remove_italics_and_superscripts()
Dim i As Long, j As Long, rng As Range, z As String
For Each rng In ActiveSheet.UsedRange
For i = 1 To Len(rng)
If rng.Characters(i, 1).Font.Superscript = True Then
For j = 0 To Len(rng) - i
If rng.Characters(j + i, 1).Font.Superscript = False Then Exit For
Next j
z = z & "<sup>" & Mid(rng.Value, i, j) & "</sup>"
ElseIf rng.Characters(i, 1).Font.Italic = True Then
For j = 0 To Len(rng) - i
If rng.Characters(j + i, 1).Font.Italic = False Then Exit For
Next j
z = z & "<i>" & Mid(rng.Value, i, j) & "</i>"
Else
z = z & Mid(rng.Value, i, 1)
j = 1
End If
i = i + j - 1
Next i
rng.Offset(, 1).Value = z 'didn't immediately see where you output, so just out to the next column to the right
z = ""
Next rng
End Sub