例如,我在不同的單元格中有兩個字串
ADSGPINDTDANPR
RGTELDDGIQ ADSGPINDTDANPR Y VPGYY ESQSDDPHFHEK
另一個例子
LADNS T FDDDLDDLTPSKMKPANFKGD
RS LA FDDDLDDLTPSKMKPANFKGD YG
在以下示例中,字符序列也可能與類似序列(如 RGX)有間隙
LA DNS T FDDDLDDLTPSKMKPANFKGD
RS LA FDDDLDDLTPS RGX KMKPANFKGD YG
我想要做的是突出兩個序列,如上面示例中所示的粗體和斜體,但使用 VBA 代碼以顏色顯示。
編輯 :
根據@milo5m 的回答
序列突出顯示如下
MNTVEEVDSEEDEE SAP GSV GSMPSTG SA KYYTNRV P FDMI A
EQP MNTVEEVDSEEDEESAPA
但期望的結果應該是這樣的:
MNTVEEVDSEEDEESAP GSV GSMPSSTGSAKYYTNRVPFDMIA
EQP MNTVEEVDSEEDEESAP A
uj5u.com熱心網友回復:
很高興我們有這兩個作為參考

中的公式C1:
=LET(x,SCAN(,UNIQUE(TOCOL(MID(A1,SEQUENCE(LEN(A1)),SEQUENCE(1,LEN(A1))))),LAMBDA(a,b,TEXTJOIN("*",,MID(b,SEQUENCE(1,LEN(b)),1)))),y,SEARCH(x,B1),z,SORTBY(HSTACK(x,y),LEN(x)*(ISNUMBER(y)),-1),SUBSTITUTE(TAKE(FILTER(z,ISNUMBER(INDEX(z,,2))),1,1),"*",))
上面將識別最長的子字串,其中匹配之間有 0 個間隙。這將是以下宏的輸入:
Sub Test()
Dim ws As Worksheet, lr As Long, x As Long, y As Long, z As Long, a As Long, arr As Variant, s As String
Set ws = ThisWorkbook.Worksheets("Sheet1")
lr = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
arr = ws.Range("A1:C" & lr)
For x = LBound(arr) To UBound(arr)
s = arr(x, 3)
'Format column A:A
ws.Cells(x, 1).Characters(InStr(1, ws.Cells(x, 1).Value, s), Len(s)).Font.Bold = True
ws.Cells(x, 1).Characters(InStr(1, ws.Cells(x, 1).Value, s), Len(s)).Font.Italic = True
'Format column B:B
z = 0
For y = 1 To Len(s)
z = InStr(z 1, ws.Cells(x, 2).Value, Mid(s, y, 1))
ws.Cells(x, 2).Characters(z, 1).Font.Bold = True
ws.Cells(x, 2).Characters(z, 1).Font.Italic = True
Next
Next
End Sub
結果如下所示:

轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/518036.html
標籤:擅长vba
