VBA怎么改变单元格某些字符串的格式但不改变其他字符串的格式

VBA怎么改变单元格某些字符串的格式但不改变其他字符串的格式

如下表为格式修改前与修改后的字符串,怎么通过VBA代码在不改变其他字符串格式的情况下,对其中特定的字符串格式进行修改。

img

如下所示代码为录制宏后删减无用代码所得。这串代码中FormularR1C1先将字符串都改为默认的黑色了,不具有普遍性,换了一组字符串就无法使用了。

个人的想法是先将格式储存为一串数字或代码再修改部分特定的格式数字代码,通过默认的黑色修改格式以达到目的,或者将原格式的字符串保存下来,再通过字符串的拆分和连接进行修改。奈何本人水平有限,还请各巨佬指教。亦或者通过Python是如何改变Excel单元格某些字符串的格式但不改变其他字符串的格式的。

在此谢过!

Sub3()
'
'3'

'
    Range("D1").Select
    ActiveCell.FormulaR1C1 = _
        "ABC6007NED04001" & Chr(10) & "ABC6007NED04002" & Chr(10) & "ABC6007NED04003" & Chr(10) & "ABC6007NED04005" & Chr(10) & "ABC6007NED04007"
    With ActiveCell.Characters(Start:=14, Length:=2).Font
        .Color = -16776961
    End With

    With ActiveCell.Characters(Start:=28, Length:=4).Font
        .Color = -16776961
    End With

    With ActiveCell.Characters(Start:=43, Length:=5).Font
        .Color = -16776961
    End With

    With ActiveCell.Characters(Start:=49, Length:=15).Font
        .Color = -16776961
    End With

    With ActiveCell.Characters(Start:=78, Length:=2).Font
        .Color = -16776961
    End With
End Sub


在Excel中开始记录宏,手动完成所需功能,结束记录宏,按Alt+F11键,查看刚才记录的宏对应的VBA代码。

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/7612631
  • 以下回答来自chatgpt:

    首先,我们需要明确您希望如何修改特定字符串的格式。这里有几个可能的方案:

    1. 修改字体颜色:

      • 使用 Font.Color 属性可以改变字体的颜色。
      • 您可以将特定字符串的格式保存为一组数字或代码,然后根据需要修改字体颜色。
    2. 修改字体样式:

      • 使用 Font.FontStyle 属性可以改变字体的样式,例如粗体、斜体等。
      • 您可以将特定字符串的格式保存为一组数字或代码,然后根据需要修改字体样式。
    3. 修改单元格背景色:

      • 使用 Interior.Color 属性可以改变单元格的背景色。
      • 您可以将特定字符串的格式保存为一组数字或代码,然后根据需要修改单元格背景色。

    接下来,我将为您展示如何使用VBA在不改变其他字符串格式的情况下,修改单元格中特定字符串的格式。请参考以下代码:

    Sub ModifyStringFormat()
        Dim cell As Range
        Dim searchString As String
        Dim startPos As Long
        Dim endPos As Long
    
        ' 设置要查找和修改的字符串
        searchString = "特定字符串"
    
        ' 迭代每个单元格,查找并修改特定字符串的格式
        For Each cell In Selection
            startPos = InStr(cell.Value, searchString) ' 查找字符串的起始位置
            If startPos > 0 Then ' 如果找到了字符串
                endPos = startPos + Len(searchString) - 1 ' 计算字符串的结束位置
                With cell.Characters(startPos, endPos - startPos + 1).Font ' 获取要修改的字符串部分的字体属性
                    .Color = RGB(255, 0, 0) ' 设置字体颜色为红色
                    .Bold = True ' 设置为粗体
                    ' 修改其他字体属性...
                End With
            End If
        Next cell
    End Sub
    

    在上述代码中,我们首先定义了要查找和修改的字符串 searchString,然后使用 InStr 函数查找字符串在单元格中的起始位置。如果找到了字符串,我们通过 Characters 属性来获取字符串部分的字体对象,并对其进行格式修改。

    此外,如果希望修改其他字体属性,您可以使用 Font 对象的其他属性,例如 .Bold 控制粗体属性。

    值得注意的是,上面的代码是基于活动单元格区域进行操作的,您可以根据您的需要进行调整。

    如果希望使用Python来修改Excel单元格中特定字符串的格式,可以使用openpyxl库。以下是使用Python的示例代码:

    from openpyxl import load_workbook
    from openpyxl.styles import Font, PatternFill
    
    def modify_string_format(file_path, sheet_name, search_string):
        wb = load_workbook(file_path)
        ws = wb[sheet_name]
    
        # 遍历每个单元格
        for row in ws.iter_rows():
            for cell in row:
                if cell.value and search_string in cell.value:
                    start_pos = cell.value.index(search_string)
                    end_pos = start_pos + len(search_string)
                    font = Font(color="FF0000", bold=True)  # 设置红色粗体字体
                    pattern_fill = PatternFill(fgColor="00FFFF00")  # 设置背景色为浅绿色
                    cell.font = font
                    cell.fill = pattern_fill
    
        wb.save(file_path)
        wb.close()
    

    使用上述函数时,传入文件路径、工作表名称和要查找的字符串即可实现相应修改。请注意,此处我们修改了字体颜色和单元格的背景色,您可以根据需要进行调整。

    不过,要使用Python修改Excel文件,您可能需要先安装openpyxl库。可以通过以下命令进行安装:

    pip install openpyxl
    

    希望以上解决方案对您有所帮助。如果您有任何问题,请随时提问。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^