2014-03-12 27 views
0

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

串联也是迭代的,基于B,C和D列中的值比较是相同的。在连续的连接过程中,红色字符会保持原位吗?还是我最好试图根据结果字符串的部分格式化最后一个字符串?

如果例如H柱的值将被在环中序列连接在一起下面如下:

  1. 2012年7月11日阿& vbCrLf & 2014年8月9日AU
  2. 7/11/2012 & vbCrLf & 2014年8月9日AU & vbCrLf & 18/09/2013甲
  3. 2012年7月11日阿& vbCrLf & 2014年8月9日AU & vbCrL ˚F& 18/09/2013一个& vbCrLf & 2014年7月2日。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 

回答

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")

+0

感谢您的回复Simoco。我已经根据我的要求调整了代码,并且它运行良好。 –

+0

很明显,我花了太长时间来编辑第一条评论......我已经根据我的要求调整了代码,它运行良好,但是我认为可能出现的第二个问题已经发生。一旦下一次串联迭代完成,红色格式化将被删除。根据我的原始文章中的编号步骤,它适用于步骤1,然后在步骤2中删除红色格式并仅在步骤3中将其重新应用于“7/02/2014 AU”子字符串。我需要所有子字符串U保留红色格式。任何进一步的意见将不胜感激。 –

+0

不知道我明白你的意思,但尝试我更新的答案 –