001,G1,犬 猫 馬
002,G1,犬 猫
003,G2,猫 馬
004,G2,犬 猫
ジャンルがG1かつ、「犬」というワードが入っているワードを削除したいと思います。ただし、「犬」のみを削除したいです。以下のように書きかえたいと思っています。
001,G1,猫 馬
002,G1,猫
003,G2,猫 馬
004,G2,犬 猫
Access2003,VBAで行うとしたらどのようにしたら上記の事が実現可能でしょうか?
VBS でなくとも クエリでできるとは思いますが、VBSでやる例です。
(内容は SQL を実行するだけですが。)
「*犬」というパターンを避けるために、面倒ですがパターンを4つに分けてみました。
(Replaceを重ねればひとつにもできそうですが、この方がわかりやすいと思いましたので分けました。)
また例示のスペースが全角になっているのでコードもそのようになっています。
半角の場合は変更してください。
Sub Update_RemoveDOG() DoCmd.SetWarnings WarningsOn:=False Dim SQL As String '// 途中にある場合 SQL = "UPDATE TABLE1 SET ワード = Replace( ワード, "" 犬 "","" "" ) WHERE ワード LIKE ""* 犬 *""" DoCmd.RunSQL SQL '// 最後にある場合 SQL = "UPDATE TABLE1 SET ワード = Replace( ワード, "" 犬"","""" ) WHERE ワード LIKE ""* 犬""" DoCmd.RunSQL SQL '// 最初にある場合 SQL = "UPDATE TABLE1 SET ワード = Replace( ワード, ""犬 "","""" ) WHERE ワード LIKE ""犬 *""" DoCmd.RunSQL SQL '// 犬だけの場合 SQL = "UPDATE TABLE1 SET ワード = Replace( ワード, ""犬"","""" ) WHERE ワード=""犬""" DoCmd.RunSQL SQL DoCmd.SetWarnings WarningsOn:=True End Sub
※人によって、まだ好みが違うので、過去のシステムの修正時には意外と盲点だったり。
http://msdn.microsoft.com/ja-jp/library/cc948692.aspx
ADO接続のSQLのLike演算子が少々違うので。
http://macoto.blog.so-net.ne.jp/2009-04-14
まぁ、SQL文1発よりも、レコードセットを回して1つ1つ調べて.Updateのほうが処理のイメージつかめそうですが。
単純にやると、
001,G1,犬 猫 馬
が
001,G1, 猫 馬
になりそう(笑)
すいません、追加質問で、ワードの区切りには必ず空白があるんですか?
VBAでADO,DAOどちらを使用しているかをあわせてコメントに書いてもらえると、回答がつきやすいと思ったり。
※個人的にはプロのSQLで一発変換も見てみたいけど。
もしそれまで考慮するなら結構面倒ですね。
できるならテーブルを正規化した方がいいと思います。下みたいに。
001,G1,犬
001,G1,猫
001,G1,馬
002,G1,犬
002,G1,猫
…
使用しているバージョンが2003以降でない場合は、コメントください。
VBA の標準関数を使用することで対応できます。
ちなみに、やりたい事はフォームにワードとジャンルのテキストボックスを配置。入力されたワードとジャンルをキーに入力されたワードを選択したジャンルから削除したいと思っています。
SQL の後ろに
& " AND ジャンル = ""G1"""
を追加してください。