Excel 中的复杂条件文本格式
Complex conditional text formatting in Excel
我需要在 Excel 电子表格中有条件地将文本加粗。逻辑如下:
对于每条记录,我需要将 E 列中与 B 列中的人名对应的姓氏首字母加粗(其格式为姓氏、名字)。 E 列中的所有姓氏首字母均以逗号分隔。请注意,E 列中可能有两个相同的姓氏首字母不同。我需要遍历包含 1,000 多条记录的电子表格。示例如下:
A
B
C
D
E
value
Smith, Joseph
value
value
Jones K, Jenkins T, Smith J, Hines L, Abdhel B, Higgins M
value
Roberts, Anna
value
value
Taylor B, Starbert K, Helmann E, Santoro P, Stebnitz M, Hamilton A, Brown P, Palmer A, Roberts A, Stanton J
value
Chen, Jennifer
value
value
Anderson B, Chen J, Flanders C, Chen P, Aberdeen T, Daniels P
- 对于第一个记录,E 列中的“Smith J”必须根据 B 列中的“Smith, Joseph”加粗。
- 对于第二条记录,E 列中的“Roberts A”必须根据 B 列中的“Roberts, Anna”加粗。
- 对于第三条记录,“Chen J”必须根据 B 列中的“Chen,Jennifer”加粗 -- 请注意,E 列中还有另一个“Chen”(“Chen P”)不能加粗。
非常感谢任何帮助。
比安卡,
欢迎使用 Whosebug。
我想不出使用 UI 条件格式中的公式来执行此操作的方法。
但是,下面的宏将完成任务。
Option Explicit
Sub BoldPartString()
Dim lRowCntr As Long
Dim iSStrLen As Integer
Dim iStart As Integer
Dim zSearchStr As String
lRowCntr = 1
Do
'Determine the part of the Col B value to use to search Col E
zSearchStr = Left(Cells(lRowCntr, "B"), InStr(Cells(lRowCntr, "B"), ",") - 1) & _
Mid(Cells(lRowCntr, "B"), InStr(Cells(lRowCntr, "B"), ",") + 1, 2)
'Find the number of characters you'll have to format once the string is found in Col E
iSStrLen = Len(zSearchStr)
'Search Col E for the value in zSearchStr
If (InStr(Cells(lRowCntr, "E"), zSearchStr) > 0) Then
'Find the starting character location in Col E
iStart = InStr(Cells(lRowCntr, "E"), zSearchStr)
'Apply the Bold FontStyle to the substring using previously calculated Start/Stop values
Cells(lRowCntr, "E").Characters(iStart, iSStrLen).Font.FontStyle = "Bold"
End If
'Move to next row
lRowCntr = lRowCntr + 1 'Next Row
Loop Until Cells(lRowCntr, "A") = ""
End Sub
我需要在 Excel 电子表格中有条件地将文本加粗。逻辑如下:
对于每条记录,我需要将 E 列中与 B 列中的人名对应的姓氏首字母加粗(其格式为姓氏、名字)。 E 列中的所有姓氏首字母均以逗号分隔。请注意,E 列中可能有两个相同的姓氏首字母不同。我需要遍历包含 1,000 多条记录的电子表格。示例如下:
A | B | C | D | E |
---|---|---|---|---|
value | Smith, Joseph | value | value | Jones K, Jenkins T, Smith J, Hines L, Abdhel B, Higgins M |
value | Roberts, Anna | value | value | Taylor B, Starbert K, Helmann E, Santoro P, Stebnitz M, Hamilton A, Brown P, Palmer A, Roberts A, Stanton J |
value | Chen, Jennifer | value | value | Anderson B, Chen J, Flanders C, Chen P, Aberdeen T, Daniels P |
- 对于第一个记录,E 列中的“Smith J”必须根据 B 列中的“Smith, Joseph”加粗。
- 对于第二条记录,E 列中的“Roberts A”必须根据 B 列中的“Roberts, Anna”加粗。
- 对于第三条记录,“Chen J”必须根据 B 列中的“Chen,Jennifer”加粗 -- 请注意,E 列中还有另一个“Chen”(“Chen P”)不能加粗。
非常感谢任何帮助。
比安卡,
欢迎使用 Whosebug。
我想不出使用 UI 条件格式中的公式来执行此操作的方法。
但是,下面的宏将完成任务。
Option Explicit
Sub BoldPartString()
Dim lRowCntr As Long
Dim iSStrLen As Integer
Dim iStart As Integer
Dim zSearchStr As String
lRowCntr = 1
Do
'Determine the part of the Col B value to use to search Col E
zSearchStr = Left(Cells(lRowCntr, "B"), InStr(Cells(lRowCntr, "B"), ",") - 1) & _
Mid(Cells(lRowCntr, "B"), InStr(Cells(lRowCntr, "B"), ",") + 1, 2)
'Find the number of characters you'll have to format once the string is found in Col E
iSStrLen = Len(zSearchStr)
'Search Col E for the value in zSearchStr
If (InStr(Cells(lRowCntr, "E"), zSearchStr) > 0) Then
'Find the starting character location in Col E
iStart = InStr(Cells(lRowCntr, "E"), zSearchStr)
'Apply the Bold FontStyle to the substring using previously calculated Start/Stop values
Cells(lRowCntr, "E").Characters(iStart, iSStrLen).Font.FontStyle = "Bold"
End If
'Move to next row
lRowCntr = lRowCntr + 1 'Next Row
Loop Until Cells(lRowCntr, "A") = ""
End Sub