<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)]