【问题标题】:Concatenated cells with a conditional formatting adjustment具有条件格式调整的连接单元格
【发布时间】:2014-03-12 12:54:42
【问题描述】:

我正在尝试连接两个单元格并根据字符串中是否存在“U”来格式化子字符串。我查看了其他几个线程来构建下面的代码,但它在 .characters 命令行中挂起。

连接也是基于 B、C 和 D 列中的值比较相同的迭代。在连续连接期间红色字符是否会保留在原位,还是我最好尝试根据结果字符串中带有 U 的部分来格式化最终字符串?

例如,如果 H 列的值要在下面的循环中按如下顺序连接在一起:

  1. 7/11/2012 A & vbCrLf & 8/09/2014 A U
  2. 7/11/2012 A & vbCrLf & 8/09/2014 A U & vbCrLf & 18/09/2013 A
  3. 7/11/2012 A & vbCrLf & 8/09/2014 A U & vbCrLf & 18/09/2013 A & vbCrLf & 7/02/2014 A U

非常感谢任何帮助。 TIA。

Sub CustomFormat()

' CustomFormat Macro


Dim LR As Long, Rw As Long, FinishPoint As Integer

LR = Range("A" & Rows.Count).End(xlUp).Row

For Rw = LR To 1 Step -1

    If Range("B" & Rw).Value = Range("B" & Rw - 1).Value And _
    Range("C" & Rw).Value = Range("C" & Rw - 1).Value And _
    Range("D" & Rw).Value = Range("D" & Rw - 1).Value Then
        Range("H" & Rw - 1).Value = Range("G" & Rw - 1).Value & vbCrLf & Range("G" &   Rw).Value
    End If

    If InStr(1, Range("G" & Rw - 1).Value, "U") Then
        FinishPoint = Len(Range("G" & Rw - 1).Value)
        With Range("H" & Rw - 1).Value
            With .Characters(1, FinishPoint).Font.Color = vbRed
            End With
        End With
    End If

Next Rw

【问题讨论】:

    标签: excel formatting string-concatenation vba


    【解决方案1】:

    这个应该可以的:

    Sub CustomFormat()
        Dim LR As Long, Rw As Long, i As Byte
        Dim FinishPoint As Integer, StartPoint As Integer
    
        LR = Range("A" & Rows.Count).End(xlUp).Row
    
        For Rw = LR To 2 Step -1
    
            If Range("B" & Rw).Value = Range("B" & Rw - 1).Value And _
                    Range("C" & Rw).Value = Range("C" & Rw - 1).Value And _
                    Range("D" & Rw).Value = Range("D" & Rw - 1).Value Then
    
                Range("H" & Rw - 1).Value = Range("G" & Rw - 1).Value & vbCrLf & Range("G" & Rw).Value
    
                If InStr(1, Range("G" & Rw - 1).Value, "U") Then
                    FinishPoint = Len(Range("G" & Rw - 1).Value)
                    With Range("H" & Rw - 1)
                        .Characters(1, FinishPoint).Font.Color = vbRed
                    End With
                End If
                If InStr(1, Range("G" & Rw).Value, "U") Then
                    StartPoint = Len(Range("G" & Rw - 1).Value) + 2
                    FinishPoint = Len(Range("G" & Rw).Value) + StartPoint
                    With Range("H" & Rw - 1)
                        .Characters(StartPoint, FinishPoint).Font.Color = vbRed
                    End With
                End If
            End If
        Next Rw
    End Sub
    

    注意,InStr(1, Range("G" & Rw - 1).Value, "U") 区分大小写。如果单元格包含u,则返回0。你可以改成这个:InStr(1, UCase(Range("G" & Rw - 1).Value), "U")

    【讨论】:

    • 感谢您的回复 Simoco。我已经根据我的要求调整了您的代码,并且运行良好。
    • 显然我花了太长时间来编辑第一条评论...我已经根据我的要求调整了您的代码并且它运行良好,但是我认为可能会出现的第二个问题已经发生。一旦连接的下一次迭代完成,红色格式就会被删除。根据我原始帖子中的编号步骤,它适用于步骤 1,然后在步骤 2 中删除红色格式并仅在步骤 3 中将其重新应用于“7/02/2014 A U”子字符串。我需要所有子字符串一个 U 保留红色格式。任何进一步的建议将不胜感激。
    • 不确定我理解你的意思,但试试我更新的答案
    猜你喜欢
    • 2012-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多