在Excel单元格中查找和格式化子string

作为Excel编程的新手,我在网上search了一个可以在Excel中使用的函数/ UDF / VBA,以便在单元格中查找子string,并在该单元格中加粗/彩色。

下面有这种表格。 – 列A包含要部分格式化的文本, – 列B包含我正在查找的子string, – 列C包含string(A)中子string(B)的位置,

ABC 1 ABCDEFGHIJKLM FGHI 6-9 2 NOPQRSTUVWXYZ UVWXY 8-12 ... 

在这里,我需要获得:

  ABC 1 ABCDE**FGHI**JKLM FGHI 6-9 2 NOPQRST**UVWXY**Z UVWXY 8-12 ... 

是否可以将其应用于整个列而不是仅行。

任何帮助或build议将不胜感激。 谢谢 !

 ' just add a loop and some checkings Sub t() Dim heightA As Long Dim heightB As Long Dim height As Long Dim i As Long heightA = Cells(Rows.Count, 1).End(xlUp).Row heightB = Cells(Rows.Count, 2).End(xlUp).Row If heightA < heightB Then height = heightA Else height = heightB End If If height > 1 Then For i = 1 To height Range("A" & i).Font.Bold = False ''Replace the formula with the full string Range("A" & i) = Range("A" & i).Value 'Find the starting position of the string in B within the string produced by the formula If Range("B" & i).Value <> "" Then myPos = InStr(1, Range("A" & i).Value, Range("B" & i).Value, 1) If myPos > 0 Then 'Bold the string from B column Range("A" & i).Characters(myPos, Len(Range("B" & i).Value)).Font.Bold = True End If End If Next i End If End Sub 

编辑 :使用MASTER_STR,SUBSTR1,POS1(开始 – 结束),SUBSTR2,POS2等格式的位置

 Sub t() Dim heightA As Long Dim heightB As Long Dim height As Long Dim i As Long Dim length As Long Dim tmp Dim width As Long heightA = Cells(Rows.Count, 1).End(xlUp).Row heightB = Cells(Rows.Count, 2).End(xlUp).Row If heightA < heightB Then height = heightA Else height = heightB End If If height > 1 Then For i = 1 To height Range("A" & i).Font.Bold = False ''Replace the formula with the full string Range("A" & i) = Range("A" & i).Value 'Find the starting position of the string in B within the string produced by the formula width = Cells(i, Columns.Count).End(xlToLeft).Column If width >= 3 Then For j = 3 To width Step 2 If Cells(i, j).Value <> "" Then tmp = Split(Cells(i, j).Value, "-") myPos = CLng(tmp(0)) length = CLng(tmp(1)) - myPos + 1 'myPos = InStr(1, Range("A" & i).Value, Range("B" & i).Value, 1) If myPos > 0 Then 'Bold the string from B column Range("A" & i).Characters(myPos, length).Font.Bold = True End If End If Next j End If Next i End If End Sub 

样本input

 ABCDEFG A 1-1 C 3-5 ABCDEFG A 1-1 C 3-3