[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『英字とカタカナの混同する並び替え』(nana7)
たとえば「ジェ」と「J」があるとするとアルファベットが先にきてしまいますが全部混同して読みで並べ替えって方法ありますか?
ユーザーの望みは果てしなく続く。たしかにそうだと思いますし私もそうしてほしい。 ユニークなのは認めます、が、こればっかりは無理でしょう。 (kazu)
解決済み?のようですが、
ローマ字風な発音での比較でよければ、無料ダウンロードにある [なお]さん開発、[sousui]さん改良、ついでに[ramrun]追加の、 ヘボン式+IME式 ユーザー関数を記念にあげときます。
カタカナをローマ字(英字)にする関数です。 その名もケートゥーローマ(笑)。 (ramrun)
Function k2roma(ByVal rng As Range) ' おおむねヘボン式 + IME式 ' 長音表記は場合分けが難しいので文字の通りに変換 ' (「しろうず」と書かれたときに しろ-うず と発音するのか,しろーず と発音するかは不明なので) ' 撥音はB,M,Pの前ではMになる。他はNに変換。 ' 促音は子音を重ねて表記するが,子音がCだった場合は CTに。 ' はっちょう → HATCHOU ' 長音記号は母音を重ねることにしているが,ヘボン式的にはたぶん無視するのが正しい。
Dim c As Range Dim mozi, mozi1, mozi2, mozi3, moziR, R As String Dim mozisuu As Integer Dim sokuon, hatsuon As Boolean
'文字読み込み処理 For Each c In rng mozi = WorksheetFunction.Asc(c.Value) If mozi = "" Then k2roma = "" Exit Function End If mozisuu = Len(mozi)
'前より変換 For i = 1 To mozisuu mozi1 = Mid(mozi, i, 1) mozi2 = Mid(mozi, i + 1, 1) mozi3 = Mid(mozi, i + 2, 1)
If Asc(mozi1) > 165 And Asc(mozi1) < 224 Then '半角カタカナかどうか判断
' 以下 変換表 Select Case mozi1 Case "ッ" '促音だった場合 sokuon = True GoTo 30 Case "ン" '撥音だった場合 hatsuon = True If i = mozisuu Then R = N Else GoTo 30 End If Case "ー" '長音記号 R = Right(moziR, 1) ' 一応,母音を重ねることにする 'R="" '長音記号は無視する場合
Case "ア" R = "A" Case "イ" R = "I" Case "ウ" Select Case mozi2 Case "゙" Select Case mozi3 Case "ァ" R = "VA" i = i + 2 Case "ィ" R = "VI" i = i + 2 Case "ェ" R = "VE" i = i + 2 Case "ォ" R = "VO" i = i + 2 Case "ャ" R = "VYA" i = i + 2 Case "ュ" R = "VYU" i = i + 2 Case "ョ" R = "VYO" i = i + 2 Case Else R = "VU" i = i + 1 End Select Case "ァ" R = "WHA" i = i + 1 Case "ィ" R = "WHI" i = i + 1 Case "ェ" R = "WHE" i = i + 1 Case "ォ" R = "WHO" i = i + 1 Case Else R = "U" End Select Case "エ" R = "E" Case "オ" R = "O"
Case "カ" If mozi2 = "゙" Then R = "GA" i = i + 1 Else R = "KA" End If Case "キ" Select Case mozi2 Case "゙" Select Case mozi3 Case "ャ" R = "GYA" i = i + 2 Case "ィ" R = "GYI" i = i + 2 Case "ュ" R = "GYU" i = i + 2 Case "ェ" R = "GYE" i = i + 2 Case "ョ" R = "GYO" i = i + 2 Case Else R = "GI" i = i + 1 End Select Case "ャ" R = "KYA" i = i + 1 Case "ィ" R = "KYI" i = i + 1 Case "ュ" R = "KYU" i = i + 1 Case "ェ" R = "KYU" i = i + 1 Case "ョ" R = "KYO" i = i + 1 Case Else R = "KI" End Select Case "ク" Select Case mozi2 Case "゙" Select Case mozi3 Case "ァ" R = "GWA" i = i + 2 Case "ィ" R = "GWI" i = i + 2 Case "ゥ" R = "GWU" i = i + 2 Case "ェ" R = "GWE" i = i + 2 Case "ォ" R = "GWO" i = i + 2 Case Else R = "GU" i = i + 1 End Select Case "ァ" R = "QWA" i = i + 1 Case "ィ" R = "QWI" i = i + 1 Case "ゥ" R = "QWU" i = i + 1 Case "ェ" R = "QWE" i = i + 1 Case "ォ" R = "QWO" i = i + 1 Case "ャ" R = "QYA" i = i + 1 Case "ュ" R = "QYU" i = i + 1 Case "ョ" R = "QYO" i = i + 1 Case Else R = "KU" End Select Case "ケ" If mozi2 = "゙" Then R = "GE" i = i + 1 Else R = "KE" End If
Case "コ" If mozi2 = "゙" Then R = "GO" i = i + 1 Else R = "KO" End If
Case "サ" If mozi2 = "゙" Then R = "ZA" i = i + 1 Else R = "SA" End If Case "シ" Select Case mozi2 Case "゙" Select Case mozi3 Case "ャ" R = "JA" i = i + 2 Case "ィ" R = "JYI" i = i + 2 Case "ュ" R = "JU" i = i + 2 Case "ェ" R = "JE" i = i + 2 Case "ョ" R = "JO" i = i + 2 Case Else R = "JI" i = i + 1 End Select Case "ャ" R = "SHA" i = i + 1 Case "ィ" R = "SYI" i = i + 1 Case "ュ" R = "SHU" i = i + 1 Case "ョ" R = "SHO" i = i + 1 Case Else R = "SHI" End Select Case "ス" Select Case mozi2 Case "゙" R = "ZU" i = i + 1 Case "ァ" R = "SWA" i = i + 1 Case "ィ" R = "SWI" i = i + 1 Case "ゥ" R = "SWU" i = i + 1 Case "ェ" R = "SWE" i = i + 1 Case "ォ" R = "SWO" i = i + 1 Case Else R = "SU" End Select Case "セ" If mozi2 = "゙" Then R = "ZE" i = i + 1 Else R = "SE" End If Case "ソ" If mozi2 = "゙" Then R = "ZO" i = i + 1 Else R = "SO" End If
Case "タ" If mozi2 = "゙" Then R = "DA" i = i + 1 Else R = "TA" End If Case "チ" Select Case mozi2 Case "゙" Select Case mozi3 Case "ャ" R = "JA" i = i + 2 Case "ィ" R = "DYI" i = i + 2 Case "ュ" R = "JU" i = i + 2 Case "ェ" R = "DYE" i = i + 2 Case "ョ" R = "JO" i = i + 2 Case Else R = "JI" i = i + 1 End Select Case "ャ" R = "CHA" i = i + 1 Case "ィ" R = "CYI" i = i + 1 Case "ュ" R = "CHU" i = i + 1 Case "ェ" R = "CHE" i = i + 1 Case "ョ" R = "CHO" i = i + 1 Case Else R = "CHI" End Select Case "ツ" Select Case mozi2 Case "゙" R = "ZU" i = i + 1 Case "ァ" R = "TSA" i = i + 1 Case "ィ" R = "TSI" i = i + 1 Case "ェ" R = "TSE" i = i + 1 Case "ォ" R = "TSO" i = i + 1 Case Else R = "TSU" End Select Case "テ" Select Case mozi2 Case "゙" Select Case mozi3 Case "ャ" R = "DHA" i = i + 2 Case "ィ" R = "DHI" i = i + 2 Case "ュ" R = "DHU" i = i + 2 Case "ェ" R = "DHE" i = i + 2 Case "ョ" R = "DHO" i = i + 2 Case Else R = "DE" i = i + 1 End Select Case "ャ" R = "THA" i = i + 1 Case "ィ" R = "THI" i = i + 1 Case "ュ" R = "THU" i = i + 1 Case "ェ" R = "THE" i = i + 1 Case "ョ" R = "THO" i = i + 1 Case Else R = "TE" End Select Case "ト" Select Case mozi2 Case "゙" Select Case mozi3 Case "ァ" R = "DWA" i = i + 2 Case "ィ" R = "DWI" i = i + 2 Case "ゥ" R = "DWU" i = i + 2 Case "ェ" R = "DWE" i = i + 2 Case "ォ" R = "DWO" i = i + 2 Case Else R = "DO" i = i + 1 End Select Case "ァ" R = "TWA" i = i + 1 Case "ィ" R = "TWI" i = i + 1 Case "ゥ" R = "TWU" i = i + 1 Case "ェ" R = "TWE" i = i + 1 Case "ォ" R = "TWO" i = i + 1 Case Else R = "TO" End Select Case "ナ" R = "NA" Case "ニ" Select Case mozi2 Case "ャ" R = "NYA" i = i + 1 Case "ィ" R = "NYI" i = i + 1 Case "ュ" R = "NYU" i = i + 1 Case "ェ" R = "NYE" i = i + 1 Case "ョ" R = "NYO" i = i + 1 Case Else R = "NI" End Select Case "ヌ" R = "NU" Case "ネ" R = "NE" Case "ノ" R = "NO"
Case "ハ" Select Case mozi2 Case "゙" R = "BA" i = i + 1 Case "゚" R = "PA" i = i + 1 Case Else R = "HA" End Select Case "ヒ" Select Case mozi2 Case "゙" Select Case mozi3 Case "ャ" R = "BYA" i = i + 2 Case "ィ" R = "BYI" i = i + 2 Case "ュ" R = "BYU" i = i + 2 Case "ェ" R = "BYE" i = i + 2 Case "ョ" R = "BYO" i = i + 2 Case Else R = "BI" i = i + 1 End Select Case "゚" Select Case mozi3 Case "ャ" R = "PYA" i = i + 2 Case "ィ" R = "PYI" i = i + 2 Case "ュ" R = "PYU" i = i + 2 Case "ェ" R = "PYE" i = i + 2 Case "ョ" R = "PYO" i = i + 2 Case Else R = "PI" i = i + 1 End Select Case "ャ" R = "HYA" i = i + 1 Case "ィ" R = "HYI" i = i + 1 Case "ュ" R = "HYU" i = i + 1 Case "ェ" R = "HYE" i = i + 1 Case "ョ" R = "HYO" i = i + 1 Case Else R = "HI" End Select Case "フ" Select Case mozi2 Case "゙" R = "BU" i = i + 1 Case "゚" R = "PU" i = i + 1 Case "ァ" R = "FA" i = i + 1 Case "ィ" R = "FI" i = i + 1 Case "ゥ" R = "FU" i = i + 1 Case "ェ" R = "FE" i = i + 1 Case "ォ" R = "FO" i = i + 1 Case "ャ" R = "FYA" i = i + 1 Case "ュ" R = "FYU" i = i + 1 Case "ョ" R = "FYO" i = i + 1 Case Else R = "FU" End Select Case "ヘ" Select Case mozi2 Case "゙" R = "BE" i = i + 1 Case "゚" R = "PE" i = i + 1 Case Else R = "HE" End Select Case "ホ" Select Case mozi2 Case "゙" R = "BO" i = i + 1 Case "゚" R = "PO" i = i + 1 Case Else R = "HO" End Select
Case "マ" R = "MA" Case "ミ" Select Case mozi2 Case "ャ" R = "MYA" i = i + 1 Case "ィ" R = "MYI" i = i + 1 Case "ュ" R = "MYU" i = i + 1 Case "ェ" R = "MYE" i = i + 1 Case "ョ" R = "MYO" i = i + 1 Case Else R = "MI" End Select Case "ム" R = "MU" Case "メ" R = "ME" Case "モ" R = "MO"
Case "ヤ" R = "YA" Case "ユ" R = "YU" Case "ヨ" R = "YO"
Case "ラ" R = "RA" Case "リ" Select Case mozi2 Case "ャ" R = "RYA" i = i + 1 Case "ィ" R = "RYI" i = i + 1 Case "ュ" R = "RYU" i = i + 1 Case "ェ" R = "RYE" i = i + 1 Case "ョ" R = "RYO" i = i + 1 Case Else R = "RI" End Select Case "ル" R = "RU" Case "レ" R = "RE" Case "ロ" R = "RO"
Case "ワ" R = "WA" Case "ヲ" R = "WO" Case "ン" R = "N" Case Else R = "?" End Select Else R = mozi1 End If '' 変換表 終了
If sokuon = True Then '促音処理 sokuon = False If Left(R, 1) = "C" Then R = "T" & R Else R = Left(R, 1) & R End If End If
If hatsuon = True Then '撥音処理 hatsuon = False If Left(R, 1) = "B" Or Left(R, 1) = "M" Or Left(R, 1) = "P" Then R = "M" & R Else R = "N" & R End If End If
moziR = moziR & R 30: Next i
' 変換結果記載 k2roma = moziR Next c
End Function
すんごいコード!
私のニックネームの読み方は? 1)ジュン ゴジュウ サン 2)ジュン ゴー サン 少しひねって 3)ジュン コ サン 少しひねくれて 4)ジュン コー サン 5)ジェイ ユー エヌ ゴー サン(ゴジュウ サン)
このユーザー関数では何番がいいのでしょう??? ん! (jun53)
間違い訂正(汗)。 2)がよろしいかと思います。 (ramrun)
実は未だトライしてません。明日調べてみます。 チョット ドキドキ!! (jun53)
結果報告です。
ジュン ゴジュウ サン JUN GOJUU SAN ジュン ゴー サン JUN GOO SAN ジュン コ サン JUN KO SAN ジュン コー サン JUN KOO SAN ジェイ ユー エヌ ゴー サン JEI YUU ENU GOO SAN ジェイ ユー エヌ ゴジュウ サン JEI YUU ENU GOJUU SAN
おまけで ジュン ゴミ JUN GOMI
以上でした。。。 (jun53)
いろいろありがとうございました。VBAはまったくわかりません><。(nana7)
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.