- 締切済み
アクセスDBファイルの複数テーブルの文字列を簡単に置換するには?
アクセスのデータベースファイル内30テーブルほどの データがあります。 そのデータ内にあるひとつの文字(例えばABC)という 文字列があり,それを別の文字列(例:1000)に一括して 置き換えたいのですが,今のところ,一つ一つテーブルを 開いて置換コマンドを使って文字列を入力しています。 しかし、データベース内にあるABCと言う変数は計算に 使用するためその都度変更する必要があるため、とても面倒に感じています。 アクセスだけでこの作業はできるのでしょうか。 もし、できなければ外部プログラムでなにか良いものが あるでしょうか。ご教授ください。 よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- ARC
- ベストアンサー率46% (643/1383)
以下のような内容のモジュールを作成して、 ReplaceField をマクロなどに登録して実行してください。 どうやってマクロに登録するの?とか やってみたけど動かない… とかがあれば、補足をお願いします。 Public Function ReplaceField() 'TODO:置換するテーブル名、置換するフィールド名を適当に書き換えてください。 Dim FndStr As String Dim RepStr As String FndStr = InputBox("検索する文字列を入力して下さい") RepStr = InputBox("置換後の文字列を入力して下さい") Call ReplaceFieldSub("置換するテーブル名1", "置換するフィールド名", FndStr, RepStr) Call ReplaceFieldSub("置換するテーブル名2", "置換するフィールド名", FndStr, RepStr) Call ReplaceFieldSub("置換するテーブル名3", "置換するフィールド名", FndStr, RepStr) Call ReplaceFieldSub("置換するテーブル名4", "置換するフィールド名", FndStr, RepStr) Call ReplaceFieldSub("置換するテーブル名5", "置換するフィールド名", FndStr, RepStr) End Function Private Function ReplaceFieldSub(TableName As String, FieldName As String, FndStr As String, RepStr As String) As Long Dim SQL As String SQL = "UPDATE " & TableName _ & " SET " & FieldName & " = ReplaceStr([" & FieldName & "],'" & FndStr & "','" & RepStr & "');" CurrentDb.Execute SQL End Function Public Function ReplaceStr(ByRef SrcString As Variant, FndStr As String, RepStr As String) As String Dim StrPos As Long, SrcStart As Long Dim RepLen As Long, FndLen As Long, SrcLen As Long, DiffLen As Long ReplaceStr = CStr(Nz(SrcString, "")) SrcStart = 1 RepLen = Len(RepStr): FndLen = Len(FndStr): DiffLen = RepLen - FndLen FndLen = FndLen - 1: SrcLen = Len(ReplaceStr) Do StrPos = InStr(SrcStart, ReplaceStr, FndStr, vbBinaryCompare) If StrPos = 0 Then Exit Do ReplaceStr = Left$(ReplaceStr, StrPos - 1) & RepStr _ & Right$(ReplaceStr, SrcLen - StrPos - FndLen) SrcLen = SrcLen + DiffLen: SrcStart = StrPos + RepLen Loop End Function
- yaasan
- ベストアンサー率22% (2724/12278)
mnabeさんと重なるところがありますが、変換するデータが "ABC"という文字列を"1000"という文字列に変換するので あれば、クエリーの中にある更新クエリーで抽出条件を "ABC"にして、レコードの更新を"1000"にすると一度に 変換できます。それをテーブルごとに作成しマクロで順番 にクエリーを動かしていけば、初めに作成するときは時間 がかかりますが、二度目からはマクロ一つ動かすだけで できますよ。 また、文字列"ABC-BBD"の中の"ABC"を"1000"に変換して "1000-BBD"にしたい場合はmnabeさん同様に補足をください。
- mnabe
- ベストアンサー率33% (427/1283)
変換の方法はいくらでもありますが、その前に一つ確認。 変換するデータは、 フィールドAにある"ABC"ってデータを、"1000"に変換でOKなのでしょうか? それとも、フィールドAにある、"ABC-BBD"の"ABC"を、"1000"に変換なのでしょうか? 前者なら、テーブル毎に UPDATE テーブル名 SET テーブル名.フィールドA = '1000' を実行すれば変換出来ます。後者は、書くのが面倒なので割愛。後者の場合には、補足下さいね(^^;
補足
皆さん,早速の回答,有り難うございました。 説明不足だったのですが、 "ABC-BBD"の"ABC"を、"1000"に変換する ということをしたかったのです。 すいませんでした。