2014-03-12 44 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

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