例えば「ホツトコーヒー」→「ホットコーヒー」や「リヨクチヤ」→「リョクチャ」のように大文字で入力されているツ、ヨ、ヤ、アを通常表記通りのッ、ョ、ャ、ァに置き換えたい場合、何かいい方法はあるでしょうか?
以前の書き込み等を参考にしながら、
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つではなく複数あるのですが・・・。
何とかもう少しスマートにならないでしょうか?
お願いします。
(ちなみに、置き換えるカタカナは処理前も処理後もすべて半角です)
No.1ベストアンサー
- 回答日時:
必要な処理をユーザー定義関数にすれば、多少は簡潔になります。
具体的には、
(1) 必要なだけReplace関数を実行し、複数回置換する。
(2) 文字列の始端~終端まで1文字ずつ文字コードを読み、指定条件にマッチする場合のみ置換する。
処理速度は、数文字~数10文字程度の文字列なら、(2)の方が速く、サイズの大きい文字列では、(1)の方が速くなります。
また、Accessでは、JetのSQLにVBA関数 ( システム定義/ユーザー定義 ) を埋め込んで実行することが可能で ( 詳細な説明は長くなるので割愛しますが、まあ乱暴に言ってしまえば、ストアドファンクションと同じようなものと理解してください ) 、Recordsetをループして処理するより、ExecuteメソッドでUPDATE文を実行した方が高速に処理できます。
この速度の差は、レコードが数10~数100件程度のオーダーなら無視できるレベルですが、数万~数10万件以上のオーダーになると、大差が出ます。
以上、ご参考まで・・・。
この回答への補足
早々の回答ありがとうございます。
>Recordsetをループして処理するより、ExecuteメソッドでUPDATE文を実行した方が高速に処理できます
とはどういうコードになるのでしょうか?
すみません、VBAは初心者なもので・・・。
例えば、置換のデータを別テーブルで持っておいて、それを参照しながら目的のテーブルのフィールドを置き換えるなんてことはできるのでしょうか?
早々のご回答ありがとうございました。
使わざるを得ないので使ってますが、Accessは奥が深すぎです。
また困ったことがあればよろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Access(アクセス) アクセス レポートを開いたときにパラメーターの自動入力がしたい 4 2022/11/30 11:21
- PHP PostgreSQLからCSV形式でエクスポートする際にカラム内の改行をとる方法 1 2023/02/22 10:05
- BTOパソコン dz60 1 2023/06/11 15:27
- Access(アクセス) Accessのテキストボックスの入力文字制限 1 2023/01/18 20:43
- Visual Basic(VBA) エクセルのマクロについて教えてください。 4 2023/07/03 09:11
- Visual Basic(VBA) エクセルのマクロについて教えてください。 7 2023/07/04 09:18
- Visual Basic(VBA) Excel VBA 教えてください。 VBA初心者です。 詳しい方がいましたら教えてください。 下記 3 2023/04/25 11:22
- Visual Basic(VBA) Excel VBA メール作成について 本文の中にExcel でコピーした図を上下に2つ 貼り付けを 2 2023/06/14 01:48
- Visual Basic(VBA) 入力ボックスが繰り返しポップアップして止まらない。 下記コードでファイル名の変更をしたいのですが、変 1 2022/09/08 11:27
- Access(アクセス) Accessで、『"A"以外の場合"--"に置き換える』という作業をしたいのですが、良い方法はありま 1 2022/06/07 19:30
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「ご処理進めて頂きますようお...
-
エクセルで、日付を入力すると...
-
switch の範囲指定
-
VBAでループ内で使う変数名を可...
-
【Excel】特定の文字を含むセル...
-
VBの質問#if 0 then ってどう...
-
DoEventsがやはり分からない
-
findは動くがfindnextがマクロ...
-
EXCEL VBA マクロ 実行する度に...
-
Do~Loopした回数をカウントしたい
-
UMLでの例外処理
-
Loadイベント中にほかのイベン...
-
メルカリのメルカードで買い物...
-
VBAでセルに値が入力されるまで...
-
ビープ音を連続して鳴らす
-
インタラクティブの反対語は?
-
NULLを含むフィールド値の条件分岐
-
セルの値が0はクリアするマクロ
-
JDBCでの大量データ検索でResul...
-
2重のDo~Loopは?
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「ご処理進めて頂きますようお...
-
メルカリのメルカードで買い物...
-
エクセルで、日付を入力すると...
-
VBAでループ内で使う変数名を可...
-
【Excel】特定の文字を含むセル...
-
EXCEL VBA マクロ 実行する度に...
-
switch の範囲指定
-
DoEventsがやはり分からない
-
VBの質問#if 0 then ってどう...
-
UMLでの例外処理
-
Do~Loopした回数をカウントしたい
-
VB.NET Excelを読み込んでDataT...
-
月度は何て読みますか?
-
findは動くがfindnextがマクロ...
-
リョウ・・・量?料?
-
VBA SaveChanges 上書きされない
-
iD
-
Select Case文でこのようなこと...
-
Loadイベント中にほかのイベン...
-
セルの値が0はクリアするマクロ
おすすめ情報