文字操作 Like演算子で英語数字漢字ひらがなカタカナを判別する文字列をキーワード毎に分ける

※より実装に近く表示させる為、コードの改行を避けています。スマホ等で閲覧される際は向きを変えてご覧ください。

※実装するバージョンによってはバージョンアップの仕様により動作しないコードもあります。実装には動作確認の上ご使用下さい。

Option Explicit


Private Function LetterNo(letter As StringAs Byte
'****************************************************
'Like演算子で英語数字漢字ひらがなカタカナを判別する
'****************************************************
'英語[1]・数字[2]・漢字[3]
'全角ひらがな大[4]・全角ひらがな小[4]
'全角カタカナ大[5]・全角カタカナ小[5]
'長音ー[0]・その他[6]を返す
'※引数letterには1文字だけ
'※返り値はバイト数
'※長音[ー]で始まるひらがなカタカナは無いとみなす。
'※特殊文字は対象外[6]する

If letter = "_" Then LetterNo = 6: Exit Function
If letter Like "[A-Z]" = True Then LetterNo = 1: Exit Function
If letter Like "[a-z]" = True Then LetterNo = 1: Exit Function
If letter Like "[A-z]" = True Then LetterNo = 1: Exit Function
If letter Like "[0-9]" = True Then LetterNo = 2: Exit Function
If letter Like "[0-9]" = True Then LetterNo = 2: Exit Function
If letter Like "[一-龠]" = True Then LetterNo = 3: Exit Function
If letter Like "[あ-ん]" = True Then LetterNo = 4: Exit Function
If letter Like "[ア-ン]" = True Then LetterNo = 5: Exit Function
If letter = "ー" Then LetterNo = 0: Exit Function

LetterNo = 6

End Function


Function LetterKeyword(LongLetter As String)
'****************************************************
'文字列をキーワード毎に分ける
'****************************************************
'※特殊文字は除外する
'※1文字は除外する
Dim i As Long
Dim NowNumber As Byte       '現在番号
Dim FncNo As Byte           '関数から得た番号
Dim PreviousNumber As Byte  '前の番号
Dim MemoryNumber As Byte    '記憶番号
Dim ExclusionNumber As Byte '除外番号
Dim TmpLetter As String     '仮の文字
Dim Character As String     '処理中の1文字
Dim Spl As Variant

PreviousNumber = 9: MemoryNumber = 9 '初期化
ExclusionNumber = 9                  '初期化
    For i = 1 To Len(LongLetter)
        Character = Mid(LongLetter, i, 1)
        FncNo = LetterNo(Character) 'Function LetterNo
            '長音[ー]処理
            If FncNo = 0 Then
                NowNumber = MemoryNumber
            ElseIf FncNo = 6 Then
                ExclusionNumber = ExclusionNumber + 1
                NowNumber = ExclusionNumber
                MemoryNumber = ExclusionNumber
            Else
                NowNumber = FncNo
                MemoryNumber = FncNo
            End If
            '区切り処理
            If NowNumber <> PreviousNumber Then
                TmpLetter = TmpLetter & "," & Character
                PreviousNumber = NowNumber
            Else
                TmpLetter = TmpLetter & Character
            End If
    Next i
Spl = Split(TmpLetter, ",")
TmpLetter = "" '初期化
    For i = LBound(Spl) To UBound(Spl)
        '※1文字は除外する
        If Not Len(Spl(i)) <= 1 Then
            TmpLetter = TmpLetter & Spl(i) & ","
        End If
    Next i
LetterKeyword = TmpLetter
End Function


Private Sub test()
Dim str As String
str = "XP_Office_2000/[XP]/2003用SP統合ソフト_SP+メーカーOffice_2000編"
MsgBox LetterKeyword(str)
Debug.Print LetterKeyword(str)
'XP,Office,2000,XP,2003,SP,統合,ソフト,SP,メーカー,Office,2000,
End Sub


文字操作 0~9・a~z・あ~ん・ア~ンのようなグループに属するか判断するLike演算子

 

 

 

2000年01月01日|[VBサンプルコード]:[文字操作]