アプリ版:「スタンプのみでお礼する」機能のリリースについて

例えば「ホツトコーヒー」→「ホットコーヒー」や「リヨクチヤ」→「リョクチャ」のように大文字で入力されているツ、ヨ、ヤ、アを通常表記通りのッ、ョ、ャ、ァに置き換えたい場合、何かいい方法はあるでしょうか?
以前の書き込み等を参考にしながら、

Public Function okikae()
Dim rst As DAO.recordset
Set rst = CurrentDb.OpenRecordset("SHOHIN")
Do Until rst.EOF
rst.Edit
rst![KANA] = Replace(rst![KANA], "ホツト", "ホット")
rst![KANA] = Replace(rst![KANA], "リヨクチヤ", "リョクチャ")
rst.Update
rst.MoveNext
Loop
rst.Close
MsgBox "終了"
End Function

というコードを作成し、正常に動作したのですが、これだと「rst![KANA] = Replace(rst![KANA], "○○", "××")」の○○と××に入れるべきパターンがありすぎて、長くなってしまいます。
かと言って、ここを一文字にしてしまうと、置き換えてはいけない文字まで置き換わってしまいますよね。

地道に「rst![KANA] = Replace(rst![KANA], "○○", "××")」を書くしかないでしょうか?フィールドも「KANA」1つではなく複数あるのですが・・・。
何とかもう少しスマートにならないでしょうか?

お願いします。
(ちなみに、置き換えるカタカナは処理前も処理後もすべて半角です)

A 回答 (1件)

必要な処理をユーザー定義関数にすれば、多少は簡潔になります。


具体的には、

(1) 必要なだけReplace関数を実行し、複数回置換する。
(2) 文字列の始端~終端まで1文字ずつ文字コードを読み、指定条件にマッチする場合のみ置換する。

処理速度は、数文字~数10文字程度の文字列なら、(2)の方が速く、サイズの大きい文字列では、(1)の方が速くなります。
また、Accessでは、JetのSQLにVBA関数 ( システム定義/ユーザー定義 ) を埋め込んで実行することが可能で ( 詳細な説明は長くなるので割愛しますが、まあ乱暴に言ってしまえば、ストアドファンクションと同じようなものと理解してください ) 、Recordsetをループして処理するより、ExecuteメソッドでUPDATE文を実行した方が高速に処理できます。
この速度の差は、レコードが数10~数100件程度のオーダーなら無視できるレベルですが、数万~数10万件以上のオーダーになると、大差が出ます。

以上、ご参考まで・・・。

この回答への補足

早々の回答ありがとうございます。

>Recordsetをループして処理するより、ExecuteメソッドでUPDATE文を実行した方が高速に処理できます

とはどういうコードになるのでしょうか?
すみません、VBAは初心者なもので・・・。

例えば、置換のデータを別テーブルで持っておいて、それを参照しながら目的のテーブルのフィールドを置き換えるなんてことはできるのでしょうか?

補足日時:2003/10/15 10:59
    • good
    • 0
この回答へのお礼

早々のご回答ありがとうございました。
使わざるを得ないので使ってますが、Accessは奥が深すぎです。
また困ったことがあればよろしくお願いします。

お礼日時:2003/10/16 12:42

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!