• 締切済み

Accessで複数(200件程)の置換

Accessで一つのフィールドの文字を置換えたいです。 置換えるものが数件なら更新クエリで Replace(Replace([フィールド1],"あ","a"),"い","i") とネストすればいいだけだと思いますが、置換えたいものが200件程あり、置換元のレコードも17万件程あります。 どの方法が簡潔で負荷も少ないでしょうか? いろいろなサイトを見ましたが、結局どれがいいか分からずじまいです。 ベストな方法を教えて下さい。 よろしくお願いします。

みんなの回答

  • SePapa
  • ベストアンサー率50% (47/94)
回答No.2

こんにちは。 再度質問頂いたようですので回答します。 >このように200行ほどReplaceをネストせず並べて一度にクエリを実行できるということでしょうか? >もしそうならそのやり方を教えてほしいです。 このご質問の意味が不明なのですが、 クエリは何行あったとしても、並べて書けば一括で実行可能な はずですが、クエリの実行の仕方(画面?)を質問されてるのでしょうか。 ACCESS2007であれば作成タブからクエリデザイン選択すると クエリのタブが開くと思います。 そこを選択した状態にてデザインタブからSQL表示ボタン押下するとSQL文を直接指定できる画面に切り替わりますので、 そこにエクセルで作成したクエリを全行コピーして 貼り付けて実行ボタン押下すればOKなはずです。 (やり方はいろいろあるので一例です) ちなみに私であれば REPLACEするときは update テーブル1 set [フィールド1]=replace([フィールド1],"あ","a"); というようにUPDATEと組み合わせますが。 一度お試しください。

shanti_kei
質問者

お礼

再度ご説明いただきありがとうございます!! >クエリは何行あったとしても、並べて書けば一括で実行可能な はずですが そうなんですね。とんちんかんな質問をしてすみませんでした。 状況を説明させていただくと、 デザインビューでReplaceを並べて書いた → エラー デザインビューでReplaceを数件ネストして書いた → OK SQL文を編集 → 上手くいかず(どこが違っているかわからず) という訳でどうしたものかと思っていました。 そもそもデザインビューでReplaceを並べて書いても実行できない、と思い込んでしまったのが良くなかったですね。 SQL文が適しているようですので、アドバイスいただいた通り作成してみたいと思います。 どうもありがとうございました。

  • SePapa
  • ベストアンサー率50% (47/94)
回答No.1

こんにちは。 私もよくそういう作業が必要になりますが、 そのときはエクセルでクエリを作成しています。 置換前をB列、置換後の文字をD列にすべてセットします。 本文にあったようなクエリを作成したいのであれば、 A列にはたとえば 『Replace([フィールド1],"』 の文字を全ての行にコピーして入力します。 C列には 『","』 E列には 『");』 とします。 そして、セルF1にはA1からE1の 全ての文字を連結する関数を指定します。 =CONCATENATE(A1,B1,C1,D1,E1) F1の関数をすべてF列の行にコピーすれば まとめてクエリが完成するので それをACCESS側に文字列として コピーして実行します。 一度お試しください。

shanti_kei
質問者

補足

早速の回答ありがとうございます!! ただ、わたしがお聞きしたいのはその方法です。 クエリで一度で済ますのにネスト以外の方法はあるのか? それよりもSQL文の方が良いのか?もしくはVBAが一番簡潔なのか? または自作関数を作る方が効率が良い、とかそういうことです。 そして出来ればその文の書き方も教えていただければと思います。 SePapaさんの回答から推測すると Replace([フィールド1],"あ","a"); Replace([フィールド1],"い","i");  . [省略]  . Replace([フィールド1],"ん","n"); このように200行ほどReplaceをネストせず並べて一度にクエリを実行できるということでしょうか? もしそうならそのやり方を教えてほしいです。 ちなみにSePapaさんの方法は私もよくやります。 私の場合、CONCATENATEよりも早く入力出来るので =A1&B1&C1&D1&E1 のように&で繋ぎます。

関連するQ&A

  • Accessで、1つの項目に複数の置換えを1度でするには?

    Access2003で、1つの項目に複数の置換えを1で実行したいのですが、どうすればいいのでしょうか? 編集メニューの『置換』を使うのではなく、クエリやマクロで実行したいのです。 どんどん溜めているデータを定期的に決まった文字を1度に変換できるようにしたいのです。 例えば、[会社名]フィールドに入っている  「株式会社」 を 「(株)」 に、  「有限会社」 を 「(有)」 に、  「法人会社」 を 「(法)」 に、…続く…、などと置換えしたいのです。 更新クエリで、『Replace([会社名],"株式会社","(株)")』 と1つなら置換えできたのですが、複数置換えしたい場合は、同様のクエリをその数だけ作ってマクロで続けて実行させるという方法しかないのでしょうか? できればクエリを増やしたくないので、他にいい方法がありましたら、教えて下さい。

  • Access 置換を更新クエリで組めませんか?

    フィールドに「123万円」とあるのを、万円を除いた数字だけ(123)にしたいです。 置換しようとしたところ、1件ずつだとうまくいきますが、『すべて置換』を選択すると エラーがでます。件数が多いため、1件ずつ置換なんてしていられません。 更新クエリで置換することはできないのでしょうか?

  • ACCESS【更新クエリの中断ができない】

    ACCESS初心者です。質問がわかりにくかったらすみません。 ACCESSの更新クエリで、レコードのカンマをスペースに置き換える式を作りました。 クエリを実行すると、 ”更新クエリを実行すると、テーブルのデータが更新されます” と、メッセージが表示され”はい”で次に進むと ”*件のレコードが更新されます。”と正確な件数が表示されます。 ただ、ここでやはり中断したいと思い、”いいえ”を選択しても、 レコードは更新されてしまいます。何故でしょうか?教えてください。 ______________________ フィールド:     型名 テーブル:      データ統合 レコードの更新:  Replace([型名],","," ") 抽出条件:     Like"*,*"

  • 複数の文字を置換した場合はフィールドを分けるしかないですか?

    Replace関数は1つのフィールドに対して1つしか使えないのでしょうか? フィールド「タイトル」の「あ」と「い」を置換したい場合、 式1: Replace([タイトル],"あ","あああ") 式2: Replace([タイトル],"い","いいい") と、ふたつフィールドを作成するしかないのでしょうか? 式3: Replace([タイトル],"あ","あああ") and Replace([タイトル],"い","いいい") という風にしたら 「指定した式の構文が正しくありません」というエラーになってしまいます。 この例えは2つだからいいですが Replaceを使いたい文字が複数ある場合もフィールドに対して1つずつしか置換できないのでしょうか? 当方アクセス2003です。 よろしくお願いします。

  • アクセス 置換 どちらが早いのでしょうか?

    アクセスで一つのテーブルに対して30回更新クエリでデータを置換するのと ADOで30回データを置換するのでは、 どちらが早いのでしょうか? どちらもReplaceを使います。

  • ACCESSでコピーしたレコードのフィールド置換作業の繰返しを簡素化したいです

    ACCESS2000を使っています。テーブルには必ず「Nenndo」というフィールド名(数値型十新型)で西暦4桁が入力されています。(このフィールドはキーにもインデックスにもなってません)たとえば、 T_M001テーブルのNendoフィールドに2007が入力されたレコードが340件 T_M002テーブルのNendoフィールドに2004が入力されたレコードが823件 こんな感じでNendoフィールドがあるテーブルが沢山あります。 これらのテーブルのNendoフィールドに格納されているレコードをコピー置換作業して2004から2008までのデータを作成したいです。 T_M001であれば2007が入力されてるレコードをコピーして、貼付たレコードNendoフィールドの2007を2004へ置換、また2007のレコードをコピーして2005へを繰り返の作業してます。レコード数は340件が1360件増えて1700件。 テーブルが沢山あって作業に苦慮してます。 ACCESSのモジュールでもマクロでも構いませんので対応策等ご教授願います。

  • 検索と置換でチェックを外すことはできないですか?

    アクセスのYesno型のフィールドで 検索と置換でチェックを外すことはできないですか? チェックが入った状態で 検索する文字列:-1 置換後の文字列:0 にしましたが、何も起こりませんでした。 こういう時は更新クエリをするしかないのでしょうか?

  • ACCESSのエラーで質問です。

    ACCESSでクエリを作成して、テーブルの内容を置換していますが、下記のエラーが出てしまいます。 #エラー やりました作業としては、フィールド内に入っている情報を置換したい為、クエリで別フィールドを作成して、そこの値を置換するようにしています。 VBというフィールドに「移」と入っていたらウィルスバスターライセンス移管と変換し、「1」入っていたらウィルスバスターライセンス購入となるようにする為です。 ただし、空欄もあるのですがその空欄に上記のような#エラーが出てしまいます。 ビルドを使用して、VB(1): Replace(Replace([vb],"移","ウィルスバスターライセンス移管"),"1","ウィルスバスターライセンス購入")と入力しました。 移と1は問題なく変換されたのですが、空欄のところが#エラーとなってしまいます。何か解決方法はありますか?

  • アクセスの更新クエリの質問です。

    ちなみにAccess2007を使用しています。 A,B,C,Dというフィールドが有り、AフィールドにはCodeが入っています。 Bフィールドには"bb"という言葉、Cフィールドには"cc"という言葉にそれぞれ書き換え、Aフィールドには、今から更新する1レコードを抽出するため、更新クエリ実行時に、パラメーターを入力するように設定しました。 しかし、更新するレコードは、全45000件中、6000件くらいあり、いちいちコードを入れるのが大変です。 もともと、書き換えるためのコードリストがエクセルデータとして有り、Accessにインポートすれば、コードリストをAccessのテーブルにする事も出来ます。このテーブルを使って簡単に、書き換えることは出来ないものなのでしょうか?

  • アクセスのクエリで

    あるテーブルはエクセルからインポートしていますが、全てのフィールドが空白というレコードが多数存在します。 これをクエリで(他に方法があればどの様な方法でもよいです)全てのフィールドが空白のレコードは表示しない様にする事はできますか? これを更新クエリにして、新しく全て空白のフィールドのレコードが無いテーブルを新たに作ろうと考えています。 教えて下さい。よろしくお願いします。

専門家に質問してみよう