[[20070606135131]] 『ふりがなの濁点』(ひでのり) >>BOT

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『ふりがなの濁点』(ひでのり)
・Excelの表の中の濁点をとるには?
(例)
 ひでのり→ひてのり

 こんな事ができちゃったりします?(関数とかで・・・)


 =JIS(SUBSTITUTE(ASC(PHONETIC(A1)),"゙",""))
 説明、まず半角カタカナにして濁音を削除、それを元に戻す。
 (半角カタカナだと濁音、半濁音が1バイト扱いになる)
 BJ


 衝突しました。

 通常の関数だけでは思いつかなかったので、ユーザー定義関数を作ってやってみました。
 Alt+F11を押して、挿入-->標準モジュールを選択し、出てきた画面に下記のコードをコピペして閉じて下さい。
'----
Function HiraKana(txt As String, Optional a As Boolean = False) As String
    If a Then
        HiraKana = StrConv(txt, vbHiragana)
    Else
        HiraKana = StrConv(txt, vbKatakana)
    End If
End Function
'----

 その後、A1にそのひらがながあるとして、
 =HiraKana(JIS(SUBSTITUTE(ASC(HiraKana(A1)),CHAR(222),"")),TRUE)
 と入力してみるとどうなりますか?
 (ROUGE)

「ヴ」を「ウ」に変換しないのは、Ascの仕様で「ヴ」を半角に変換してくれないからかな?
StrConv(txt,vbNarrow)だと、「ヴ」も半角に変換してくれますね。

半角カタカナへ変換してから、濁点文字を除去する、という方針ですと、「ゞ」(ひらがな),「ヾ」(カタカナ)から濁点を除去できないので、例外処理が必要になりそうです。
※PHONETIC関数は、カタカナでふりがなをふると思っていましたが、「ゞ」は「ヾ」に置換しないなあ、ソートのとき問題ないのかしら?

単純に考えると、濁音と清音の対応配列を用意して、対象文字列から一文字取り出して濁音ならば対応する清音に置き換える、というマクロを書くことになるでしょう。

で、Unicode依存文字に、「う」「ワ」「ヰ」「ヱ」「ヲ」に濁点つきの文字がありますが、これらをExcel VBAで扱うにはVBE内で文字化けしてしまうので、文字コードで照合する感じでしょうか。

もう一点、気になるのは、濁音を清音にする対象文字列がカタカナだけからなる文字列なのかどうか。ひらがなの濁音も清音にしたいとなると、カタカナ、ひらがなを区別した処理になりますね。

ユーザー定義関数として2つ作ってみました。

'ゞ,ヾの置換はしないタイプ

Function RemoveDakuten(txt As String, Optional fExtend As Boolean = False) As String

    Dim str As String   '濁音(半濁音)を清音にしたカタカナ主体文字列
    Dim katakanaTxt As String   '濁音・半濁音のままのカタカナ主体文字列
    Dim strDst As String    '元のtxt文字列から濁点・半濁点を清音に変換した文字列。

    str = txt
    strDst = txt
    katakanaTxt = StrConv(txt, vbKatakana) '全角カタカナへ変換

    i = Len(txt)
    If (i > 0) Then
        str = StrConv(katakanaTxt, vbNarrow) '半角カタカナへ変換
        str = Replace(str, Chr(222), "") '濁点除去
        If (fExtend = True) Then
            str = Replace(str, Chr(223), "") '半濁点除去
        End If
        str = StrConv(str, vbWide) '全角カタカナへ変換

        For j = 1 To i
            If (Mid(str, j, 1) <> Mid(katakanaTxt, j, 1)) Then
                If (InStr("ヴ", Mid(katakanaTxt, j, 1)) = 1 Or InStr(StrConv(Mid(katakanaTxt, j, 1), vbHiragana), Mid(txt, j, 1)) <> 1) Then
                    strDst = Mid(strDst, 1, j - 1) & Mid(str, j, 1) & Mid(txt, j + 1, i - j)
                Else
                    strDst = Mid(strDst, 1, j - 1) & StrConv(Mid(str, j, 1), vbHiragana) & Mid(txt, j + 1, i - j)
                End If
            End If
        Next
    End If
    RemoveDakuten = strDst

End Function

Function ReplaceDakuon(txt As String, Optional fExtend As Boolean = False) As String

    Dim strDst As String    '元のtxt文字列から濁音(半濁音)を清音に変換した文字列。
    Dim seionStr1 As String, seionStr2 As String
    Dim dakuonStr As String, handakuonStr As String

    dakuonStr = "がぎぐげござじずぜぞだぢづでどばびぶべぼゞヴガギグゲゴザジズゼゾダヂヅデドバビブベボヾ"
    seionStr1 = "かきくけこさしすせそたちつてとはひふへほゝウカキクケコサシスセソタチツテトハヒフヘホヽ"
    handakuonStr = "ぱぴぷぺぽパピプペポ"
    seionStr2 = "はひふへほハヒフヘホ"
    strDst = txt

    i = Len(txt)
    If (i > 0) Then

        For j = 1 To i
            iFound = InStr(dakuonStr, Mid(txt, j, 1))
            If iFound > 0 Then
                strDst = Mid(strDst, 1, j - 1) & Mid(seionStr1, iFound, 1) & Mid(txt, j + 1, i - j)
            ElseIf (fExtend = True) Then
                iFound = InStr(handakuonStr, Mid(txt, j, 1))
                If iFound > 0 Then
                    strDst = Mid(strDst, 1, j - 1) & Mid(seionStr2, iFound, 1) & Mid(txt, j + 1, i - j)
                End If
            End If
            Select Case AscW(Mid(txt, j, 1))
            'Unicode依存文字への対応
            Case &H30F7
                strDst = Mid(strDst, 1, j - 1) & "ワ" & Mid(txt, j + 1, i - j)
            Case &H30F8
                strDst = Mid(strDst, 1, j - 1) & "ヰ" & Mid(txt, j + 1, i - j)
            Case &H30F9
                strDst = Mid(strDst, 1, j - 1) & "ヱ" & Mid(txt, j + 1, i - j)
            Case &H30FA
                strDst = Mid(strDst, 1, j - 1) & "ヲ" & Mid(txt, j + 1, i - j)
            Case &H3094
                strDst = Mid(strDst, 1, j - 1) & "う" & Mid(txt, j + 1, i - j)
            End Select
        Next
    End If
    ReplaceDakuon = strDst
End Function

(まーまあ)


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.