文字操作 Like演算子で英語数字漢字ひらがなカタカナを判別する文字列をキーワード毎に分ける
※より実装に近く表示させる為、コードの改行を避けています。スマホ等で閲覧される際は向きを変えてご覧ください。
※実装するバージョンによってはバージョンアップの仕様により動作しないコードもあります。実装には動作確認の上ご使用下さい。
Private Function LetterNo(letter As String) As 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演算子 |