[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『ふりがなの濁点』(ひでのり)
こんな事ができちゃったりします?(関数とかで・・・)
=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.