'分付还他了。 怎么理解?
'最后一个字全匹配也跟你示例不一样
Option Explicit
Sub test()
Dim i, j, k, arr, brr, crr, mark, t, tt, ttt, a, s, temp, dic
Set dic = CreateObject("scripting.dictionary")
s = "?。,:;、"
mark = Split("? 。 , : ; 、 !")
With Sheets("韵脚")
crr = .Range("a2:b" & .Cells(Rows.Count, "a").End(xlUp).Row)
End With
With Sheets("问题")
arr = .Range("a2:a" & .Cells(Rows.Count, "a").End(xlUp).Row)
End With
For i = 1 To UBound(arr, 1)
temp = arr(i, 1)
For j = 0 To UBound(mark)
arr(i, 1) = Replace(arr(i, 1), mark(j), "|")
Next
t = Split(Replace(arr(i, 1), Space(1), vbNullString), "|")
For j = 0 To UBound(t) - 1
a = Right(t(j), 1)
dic(a) = dic(a) + 1
Next
arr(i, 1) = temp
Next
For i = 1 To UBound(arr, 1)
temp = arr(i, 1)
For j = 0 To UBound(mark)
arr(i, 1) = Replace(arr(i, 1), mark(j), "|")
Next
t = Split(Replace(arr(i, 1), Space(1), vbNullString), "|")
ReDim tt(UBound(t), 1), ttt(UBound(t))
For j = 0 To UBound(t) - 1
a = Right(t(j), 1)
For k = 1 To UBound(crr, 1)
If InStr(crr(k, 2), a) Then
tt(j, 0) = a: tt(j, 1) = k
Exit For
End If
Next k, j
For j = 0 To UBound(tt)
For k = 0 To UBound(tt)
If k <> j Then
If tt(j, 1) = tt(k, 1) Then ttt(j) = 1: Exit For
End If
Next k, j
For j = 0 To UBound(t) - 1
If ttt(j) = 1 Or dic(tt(j, 0)) > 1 Then
t(j) = Left(t(j), Len(t(j)) - 1) & crr(tt(j, 1), 1)
Else
t(j) = Left(t(j), Len(t(j)) - 1) & "●"
End If
Next
tt = vbNullString
For j = 1 To Len(temp) - 1
If InStr(s, Mid(temp, j, 1)) Then
tt = tt & Mid(temp, j, 1)
End If
Next
For j = 0 To UBound(t)
t(j) = t(j) & Mid(tt, j + 1, 1)
Next
arr(i, 1) = Join(t, vbNullString) & "。"
Next
Sheets("问题").[c2].Resize(UBound(arr, 1), 1) = arr
End Sub |