|
本帖最后由 opiona 于 2018-3-11 12:59 编辑
根据指正,进行了修改
完整代码见附件:
寻找相同韵脚.rar
(31.54 KB, 下载次数: 6)
多次出现的韵脚,显示数字
只出现一次的,用圆圈替换
- Sub opiona()
-
- Set SH1 = Worksheets("问题")
- Set SH2 = Worksheets("韵脚")
-
- Rem 全部韵脚和汉字放入数组
- ARR_YUNJIAO = SH2.Range("A2:B" & SH2.Range("A65536").End(3).Row).Value
-
- For IROW = 2 To SH1.Range("A65536").End(3).Row
- Rem 按照标点符号拆分
- ARX = Split(GetRegStr(SH1.Cells(IROW, 1).Value, "[一-龥]+[^0-9A-Za-z一-龥 ]", 0), "|")
-
- Rem 寻找全部韵脚汉字
- ReDim CRX(0)
- CLEN = 0
- For X = 0 To UBound(ARX)
- StrA = Mid(ARX(X), Len(ARX(X)) - 1, 1) '//包括标点符号的倒数第二个
- For I = 1 To UBound(ARR_YUNJIAO, 1)
- If InStr(ARR_YUNJIAO(I, 2), StrA) > 0 Then
- Rem 记录此韵脚
- ReDim Preserve CRX(CLEN)
- CRX(CLEN) = ARR_YUNJIAO(I, 1)
- CLEN = CLEN + 1
- Exit For
- End If
- Next
- Next
-
- For X = 0 To UBound(ARX)
- StrA = Mid(ARX(X), Len(ARX(X)) - 1, 1) '//包括标点符号的倒数第二个
- Rem 查找汉字对应的韵脚
- XX = 0
- For I = 1 To UBound(ARR_YUNJIAO, 1)
- If InStr(ARR_YUNJIAO(I, 2), StrA) > 0 Then
- Rem 记录此韵脚
- StrB = ARR_YUNJIAO(I, 1)
- For Z = 0 To UBound(CRX)
- If StrB = CRX(Z) Then
- XX = XX + 1 '//记录此韵脚出现的次数
- End If
- Next
- Exit For
- End If
- Next
- Rem 2个及以上则用韵脚符号替换韵脚汉字
- If XX > 1 Then
- ARX(X) = Mid(ARX(X), 1, Len(ARX(X)) - 2) & Replace(Mid(ARX(X), Len(ARX(X)) - 1, 1), StrA, StrB) & Mid(ARX(X), Len(ARX(X)), 1)
- Else
- Rem 只有一个 则是:●
- ARX(X) = Mid(ARX(X), 1, Len(ARX(X)) - 2) & Replace(Mid(ARX(X), Len(ARX(X)) - 1, 1), StrA, "●") & Mid(ARX(X), Len(ARX(X)), 1)
- End If
- Next
-
- Rem 将拆分后的数组,还原为字符串
- SH1.Cells(IROW, 2).Value = Join(ARX, "")
-
- Rem 标注韵脚符号的颜色
- BRX = Split(GetRegStr(SH1.Cells(IROW, 2).Value, "[★][0-9]+", 0), "|")
- StratInt = 1
- For X = 0 To UBound(BRX)
- INTLEN = InStr(StratInt, SH1.Cells(IROW, 2).Value, BRX(X))
- SH1.Cells(IROW, 2).Characters(Start:=INTLEN, Length:=Len(BRX(X))).Font.Color = -16776961
- StratInt = INTLEN + Len(BRX(X))
- Next
-
- Next
-
- End Sub
复制代码
|
评分
-
1
查看全部评分
-
|