<Access97で半角カナをローマ字へ変換、、> 目次 1.はじめの挨拶 2.質問内容 3.サンプル 4.サンプル解説 5.積み残し、残作業項目 6.おわりの挨拶 ---------------------------------------------------------------------------- /* * 1.こんにちは */ こんにちは。 なんか、まだ、かぜぎみのKen3です。う〜ん、体調不良? 今回は、 Access97で半角カナをローマ字へ変換 です。 今回の実行できるサンプル・手順の画像を hosoku/023/index.html で、確認可能にしてあります。画像を見ながら、読んでください。 *テスト環境は、Access97,Excel97 です。 /* * 2.質問内容 */ 読者の人から、質問で、 ---- >教えて欲しいのですが、Excel、 >またはAccessで半角カタカナからヘボン >式ローマ字に変換したいのですが、良い方法はないでしょうか? >変換のテーブルを作るのはいとわないのですが、 >高速に処理する方法はないでしょうか? ---- とメールをいただきました。 チョット変なサンプルですが、見てください。 *あまり、高速じゃないなぁ、、、 /* * 3.サンプル */ 基本構想、、、 マスターテーブルに CODE 文字 ローマ字 濁点 半濁点 202 ハ ha ba pa 203 ヒ hi bi pi 204 フ hu bu pu 205 へ he be pe 206 ホ ho bo po のイメージでデータを入れる。(マスター修正可能) 初期設定で、変数にテーブルデータを読み込む。 変換処理で、 1文字取りだし、変換テーブルを見て、ローマ字をセット 例)ハセガワだったら、ハを取りだし、コード変換 配列の202番目を見て、データをセット ガの時は、濁点の判断をし、 配列の濁点データをセットする。 コードの一発参照なので、ある程度、速いと思うけど、、、 *なんか、キレがイマイチだなぁ、、 '----- ここから サンプルです。 Option Compare Database Option Explicit Type TYPE_HENKANTBL 'ユーザー定義型を定義します。 HEBON As String 'ローマ字 DAKUTEN As String '濁点 HANDAKU As String '半濁点 End Type Public typHENKANTBL(255) As TYPE_HENKANTBL 'もったいないけど、255個取る ' Mst_KanaConv テーブルから、マスターデータを ' グローバル変数、 typHENKANTBL(255)に読み込む ' 一回だけ、前準備で実行 Sub KanaConvInit() 'ローカル変数定義 Dim dbs As Database Dim rstMST As Recordset Dim strSQL As String Dim nIndex As Integer 'データベース指定 Set dbs = CurrentDb 'SELECT文 strSQL = "SELECT * FROM Mst_KanaConv " Set rstMST = dbs.OpenRecordset(strSQL, dbOpenDynaset) '初期値のセット rstMST.MoveFirst '先頭に移動、念のため? 'マスターデータをセットする While rstMST.EOF = False 'アスキーコードの場所にセットする nIndex = rstMST![CODE] typHENKANTBL(nIndex).HEBON = rstMST![ローマ字] & "" typHENKANTBL(nIndex).DAKUTEN = rstMST![濁点] & "" typHENKANTBL(nIndex).HANDAKU = rstMST![半濁点] & "" rstMST.MoveNext '次のデータを読む Wend 'テーブル・データベースをクローズする rstMST.Close dbs.Close End Sub ' 受け取った文字列を1文字毎に調べ、 ' 半角カナをローマ字に変換した結果を返す ' Function KanaConv(strKANA As String) As String Dim nCNT As Integer Dim nIndex As Integer Dim strRET As String 'リターン値 Dim strCHK As String 'チェック用 Dim strNEXT As String 'チェック用(次の文字、濁点、半濁点判定用) strRET = "" 'リターン値の初期化 For nCNT = 1 To Len(strKANA & "") strCHK = Mid(strKANA, nCNT, 1) '1文字取り出す strNEXT = Mid(strKANA, nCNT + 1, 1) '次の文字も取り出す nIndex = Asc(strCHK) 'アスキーコードに変換する 'ア〜ンの範囲か調べる、、 'ア-->177 ン-->221 If 177 <= nIndex And nIndex <= 221 Then '次の文字に濁点゛か半濁点゜があるか、チェックする ' ↓゛と゜は半角で打つ If strNEXT = "゛" Or strNEXT = "゜" Then If strNEXT = "゛" Then '濁点? strRET = strRET & typHENKANTBL(nIndex).DAKUTEN Else '半濁点 strRET = strRET & typHENKANTBL(nIndex).HANDAKU End If nCNT = nCNT + 1 'カウンターを小細工で1つ増やす(濁点・半濁点分) Else 'テーブルに登録されているローマ字をプラスする strRET = strRET & typHENKANTBL(nIndex).HEBON End If Else 'その他の文字 strRET = strRET & strCHK 'そのまま文字を+する End If Next nCNT KanaConv = strRET End Function '----- ここまで /* * 4.サンプル解説 */ ア.テストデータ作りは、エクセルで? hosoku/023/index.html 参照 今回、前準備で、マスターデータを作りますが、 ア〜ンまで、コード・データを入力するの大変です。 そこで、Excel上に A列 B列 c列 d列 e列 CODE 文字 ローマ字 濁点 半濁点 177 =char(a2) a 178 I =char(a3) i 179 =char(a4) u ^^^^^^^^^^^^^^^^ ↑ここは、しかたなく手入力 ↑ドラックして、作成 表を作成します。 次に、範囲選択後、コピーします。 Accessを起動し、テーブルの場所で、右クリック・貼り付け を選択すると、簡単にテーブルの形を作ることができます。 式=char(a2)が値だけ保存されるので、便利では? チョットカゼぎみなので、詳細は、次回に回します。 *質問、ください。。。 /* * 5.積み残し、残作業項目 */ /* * 6.終わりの挨拶 */ 今回、解説無いので、 サンプル画像を見ながら、やってみてください。 *サンプルを実行して、処理を1つ1つ。 では、また。 かぜぎみで調子の悪い三流PGのKen3でした。 *だったら、次回に回せって、、、中途半端で発行するなよ、、、
ここまで、読んでいただきどうもです。ここから下は、三流君のホームページの紹介・案内です
目的の情報が見つかったか?少々心配しつつ、、、
項目別に本音?それとも建て前?的な記事をまとめました。
気になったジャンル↓を選択してください。 |
Blogとリンク:[三流君の作業日記]/ [愚痴(Bookmark)]/ [広告Blog(Bookmark)]