- 締切済み
Accessで複数(200件程)の置換
Accessで一つのフィールドの文字を置換えたいです。 置換えるものが数件なら更新クエリで Replace(Replace([フィールド1],"あ","a"),"い","i") とネストすればいいだけだと思いますが、置換えたいものが200件程あり、置換元のレコードも17万件程あります。 どの方法が簡潔で負荷も少ないでしょうか? いろいろなサイトを見ましたが、結局どれがいいか分からずじまいです。 ベストな方法を教えて下さい。 よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- SePapa
- ベストアンサー率50% (47/94)
こんにちは。 再度質問頂いたようですので回答します。 >このように200行ほどReplaceをネストせず並べて一度にクエリを実行できるということでしょうか? >もしそうならそのやり方を教えてほしいです。 このご質問の意味が不明なのですが、 クエリは何行あったとしても、並べて書けば一括で実行可能な はずですが、クエリの実行の仕方(画面?)を質問されてるのでしょうか。 ACCESS2007であれば作成タブからクエリデザイン選択すると クエリのタブが開くと思います。 そこを選択した状態にてデザインタブからSQL表示ボタン押下するとSQL文を直接指定できる画面に切り替わりますので、 そこにエクセルで作成したクエリを全行コピーして 貼り付けて実行ボタン押下すればOKなはずです。 (やり方はいろいろあるので一例です) ちなみに私であれば REPLACEするときは update テーブル1 set [フィールド1]=replace([フィールド1],"あ","a"); というようにUPDATEと組み合わせますが。 一度お試しください。
- SePapa
- ベストアンサー率50% (47/94)
こんにちは。 私もよくそういう作業が必要になりますが、 そのときはエクセルでクエリを作成しています。 置換前をB列、置換後の文字をD列にすべてセットします。 本文にあったようなクエリを作成したいのであれば、 A列にはたとえば 『Replace([フィールド1],"』 の文字を全ての行にコピーして入力します。 C列には 『","』 E列には 『");』 とします。 そして、セルF1にはA1からE1の 全ての文字を連結する関数を指定します。 =CONCATENATE(A1,B1,C1,D1,E1) F1の関数をすべてF列の行にコピーすれば まとめてクエリが完成するので それをACCESS側に文字列として コピーして実行します。 一度お試しください。
補足
早速の回答ありがとうございます!! ただ、わたしがお聞きしたいのはその方法です。 クエリで一度で済ますのにネスト以外の方法はあるのか? それよりもSQL文の方が良いのか?もしくはVBAが一番簡潔なのか? または自作関数を作る方が効率が良い、とかそういうことです。 そして出来ればその文の書き方も教えていただければと思います。 SePapaさんの回答から推測すると Replace([フィールド1],"あ","a"); Replace([フィールド1],"い","i"); . [省略] . Replace([フィールド1],"ん","n"); このように200行ほどReplaceをネストせず並べて一度にクエリを実行できるということでしょうか? もしそうならそのやり方を教えてほしいです。 ちなみにSePapaさんの方法は私もよくやります。 私の場合、CONCATENATEよりも早く入力出来るので =A1&B1&C1&D1&E1 のように&で繋ぎます。
お礼
再度ご説明いただきありがとうございます!! >クエリは何行あったとしても、並べて書けば一括で実行可能な はずですが そうなんですね。とんちんかんな質問をしてすみませんでした。 状況を説明させていただくと、 デザインビューでReplaceを並べて書いた → エラー デザインビューでReplaceを数件ネストして書いた → OK SQL文を編集 → 上手くいかず(どこが違っているかわからず) という訳でどうしたものかと思っていました。 そもそもデザインビューでReplaceを並べて書いても実行できない、と思い込んでしまったのが良くなかったですね。 SQL文が適しているようですので、アドバイスいただいた通り作成してみたいと思います。 どうもありがとうございました。