[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『ふりがなの濁点』(ひでのり)
こんな事ができちゃったりします?(関数とかで・・・)
=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)
半角カタカナへ変換してから、濁点文字を除去する、という方針ですと、「ゞ」(ひらがな),「ヾ」(カタカナ)から濁点を除去できないので、例外処理が必要になりそうです。
※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.