• ベストアンサー
  • すぐに回答を!

Accessでの置換

Access97を使用しています。 置換のマクロ化って出来ますか。 具体的に言うとボタン一つで 「電話番号」のハイフンを消したいのです。 今はテーブルを開いて編集-置換で検索する文字列に 「-」、置換後の文字列に何も入れずにすべて置換しています。 Excelですと「SUBSTITUTE」という関数が一番近いのですが、 Accessでそれに準ずるものってあるのでしょうか? イベントプロシージャでの記述で教えて いただけると一番助かります。

共感・応援の気持ちを伝えよう!

  • 回答数6
  • 閲覧数706
  • ありがとう数6

質問者が選んだベストアンサー

  • ベストアンサー
  • 回答No.1

私は以下のような関数を定義して置換をしています。 ---- Public Function Replace(ByVal vSrc As Variant, ByVal strTarget As String, ByVal strNew As String) As Variant Dim strWork As String Dim intCharAt As Integer Dim intStart As Integer intStart = 1 strWork = vbNullString Do intCharAt = InStr(intStart, vSrc, strTarget, vbBinaryCompare) If intCharAt = 0 Then Replace = strWork & Mid$(vSrc, intStart) Exit Function End If strWork = strWork & Mid$(vSrc, intStart, intCharAt - intStart) & strNew intStart = intCharAt + Len(strTarget) Loop End Function ---- 実際の置換はこういうイメージでしょうか。 dim rst as Recordset set rst = CurrentDB.openRecordset("対象のテーブル") Do until rst.EOF rst.Edit rst![電話番号] = Replace(rst![電話番号], "-", "") rst.update rst.moveNext loop rst.close

共感・感謝の気持ちを伝えよう!

質問者からの補足

ありがとうございました!!!! 動きました! ですが、一点・・・。 Null値のとき「Nullの使い方が不正です」と出てしまいます。

その他の回答 (5)

  • 回答No.6

電話番号フィールドにNullではなく空文字だけ入っているのであれば If rst![電話番号] <> "" Then rst![電話番号] = Replace(rst![電話番号], "-", "") End If で問題ないと思います。 Nullが入る可能性があるのであれば If rst![電話番号] <> "" or Not IsNull(rst![電話番号])Then rst![電話番号] = Replace(rst![電話番号], "-", "") End If としても良いと思います。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

本当に度々ありがとうございました。 色々勉強になりました。

  • 回答No.5

No.3の補足です。 Null判定はこっちの方が良いかもしれません。 違いはテーブルのフィールドに、空白文字列の格納を許可しているかどうかです。 If IsNull(vSrc) Then Replace = Null Exit Function End If

共感・感謝の気持ちを伝えよう!

  • 回答No.4

No.1で回答したものです。一回で解決できなくてすみません。 置換対象文字列のNull判定を行えば解決すると思います。 Null判定を入れたプロシージャはこのようなものになります。 -------------------- Public Function Replace(ByVal vSrc As Variant, ByVal strTarget As String, ByVal strNew As String) As Variant Dim strWork As String Dim intCharAt As Integer Dim intStart As Integer If IsNull(vSrc) Then Replace = vbNullString Exit Function End If intStart = 1 strWork = vbNullString Do intCharAt = InStr(intStart, vSrc, strTarget, vbBinaryCompare) If intCharAt = 0 Then Replace = strWork & Mid$(vSrc, intStart) Exit Function End If strWork = strWork & Mid$(vSrc, intStart, intCharAt - intStart) & strNew intStart = intCharAt + Len(strTarget) Loop End Function

共感・感謝の気持ちを伝えよう!

質問者からのお礼

ご丁寧にありがとうございます。 独自でやったやり方としては置換の部分を If rst![電話番号] <> "" Then rst![電話番号] = Replace(rst![電話番号], "-", "") End If として、一応動くことは動いたのですが 問題あるでしょうか?

  • 回答No.3
  • imogasi
  • ベストアンサー率27% (4633/16578)

#2で回答を入れたものです。レコードの更新は#1の方の解答にある「rst.update」です。私の場合では 「rs.update」です。それと私は-を*に置換しましたが 全く-を削除するなら「””」で上手く行くでしょう。 または”*” &を削除してください。 データベース名も意味ありげで良くなかったと思います。 「取引銀行B」は適当に名前を別につけてください。結果的に#1の方の解答と良く似ています。変数名を長くするか 短くするかで、随分感じは違っていますが。エクセルと使える関数が一致して欲しいです。どうぞよろしく。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

度々すみません。 ちゃんと見ればわかることでしたね。 No.1の方と考え方としては同じってことがわかりました。 どうせ見てもわからないと決めつけていました。すみません。 色々勉強になり、本格的に色々勉強したいなと思いました。 ありがとうございました。

  • 回答No.2
  • imogasi
  • ベストアンサー率27% (4633/16578)

アクセスで第1列に電話番号を入力して、データベースを作りました。市外・市内・電話番号の区切りは勿論「-」で区切って作ります。 モジュールに下記を作ります。そして実行します。 あえて「レコードを更新して」いないので本番では改良してください。 私の癖でMsgBoxを確認のため入れていますが、不要時には削除してください。数件のデータでテスト確認済み。 Sub test01() Dim p As Integer Dim l As Integer Dim s As String '---- Dim db As Database Dim rs As Recordset Set db = OpenDatabase("取引銀行B") Set rs = db.OpenRecordset("電話番号") '-------- Do While Not rs.EOF l = Len(rs!番号) s = rs!番号 '---- p01: p = InStr(1, s, "-", 1) If p = 0 Then GoTo p02 s = Mid(s, 1, p - 1) & "*" & Mid(s, p + 1, l - p) MsgBox s GoTo p01 '---- p02: ' ここに更新ステップを入れる rs.MoveNext Loop rs.Close Set rs = Nothing db.Close Set db = Nothing '------- End Sub 結局、置換する関数は見つかりませんでした。文字列探索の関数もInstrだけでした。(AC2000VBAハンドブック等調べた) InstrBの方が適当かもしれませんので、考えてください。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

ありがとうございます。 更新ステップを入れるとはどうすればいいのでしょう? VBAは初心者なもので・・すみません。

関連するQ&A

  • テーブルを使った置換

    Access2002 Accessでクエリ実行時に特定の文字列を置換したいと思っています。 今までは置換する文字列が1つだけだったので、replace関数を使って直接置換する文字列を書いていたのですが、置換する文字列が今後増えてきそうなのでテーブルで管理したいと思っています。 置換用テーブル 元 ,置換後 000022,002078 000218,002403 000447,002703 クエリは単純な選択クエリなのですが、上記のようなテーブルを使ってクエリ実行時に文字を置換する方法がわかりません。 よろしくお願いします。

  • Excelで置換が意図したようにできない(ハイフンを消したい)

    Excel97です。 電話番号のデータからハイフンを取りたいので 置換で検索する文字列に「-」、置換後の文字列に 何も入れないで置換を押したら頭1ケタの0(ゼロ)まで 消えてしまいました。書式設定は文字列にしました。 ハイフンを消す方法は他にもあるとは思いますが、 どうして上記のような現象になってしまうのか 知りたいです。お願いします。

  • 文字列に含まれているダブルクォーテーション( ")を置換する

    文字列に含まれているダブルクォーテーションを除きたいのですが、これをSubstitute関数で置換しようとしてもうまくいきません。ダブルクォーテーションが文字列を指定するために使われるせいだと思うのですが、"を文字列として指定する方法はあるのでしょうか? よろしくお願いします。

  • 参照文字列から検索文字列を置きの件

    >SUBSTITUTE(SUBSTITUTE(文字列,検索文字1,置換文字1),検索文字2,置換文字2)  上記の関数は8桁以上は出来ません、他の方法の関数があれば、  よろしくお願いします。(13桁)  尚、マクロ以外でできますか。  例、 A-福岡      B-佐賀

  • 【Access】文字の置換の方法???

    Accessのテーブルに入力したメールアドレスのデータの一部の文字だけを「置換」の方法を使って変更したいのですが、ワイルドカードの使い方がよくわかりません。 たとえば… 「aaaaaa@t.vodafone.ne.jp」「bbbbb@t.vodafone.ne.jp」「ccccc@t.vodafone.ne.jp」などのデータの@より前の文字列はそのままで「@t.vodafone.ne.jp」だけを「@docomo.ne.jp」に一度に変更したいのです。 置換のダイアログボックスの「検索する文字列」と「置換後の文字列」に入力する文字列を教えて下さい。

  • 文字の置換のVBA

    こんばんは。 下記の文字列の置換をマクロ(VBA)で出来ますでしょうか。 今は関数(SUBSTITUTE)を繰り返して処理しているのですが、1度で出来る方法がありましたら教えて下さい。 100 ABC-23d=3,4 → 100ABC23D3.4 (1)スペース削除 (2)小文字を大文字へ (3)"-" "=" など数字とアルファベット以外を削除 (4)","→ "." (カンマをドットへ変換) 宜しくお願いします。

  • 文字列の置換

    文字列を下記のように置換したいのですが ABC123 → AB123D (上記で固定でなく123の数字は変わっていきます) SUBSTITUTEでABCをABには置換できるのですが 数字の後にCをDの位置に移動させる なにか計算式や関数などありますか? これができるならば さらにネストすることはできますか? (上記のような変化をするイレギュラーの置換は式の中で1つだけです) =SUBSTITUTE(SUBSTITUTE・・・・ よろしくおねがいします。 エクセル2000でもできるやり方を希望します。

  • エクセルの置換機能について

    (1)エクセル2000でA1~A100まで1000~1099が入力されています。 (2)A101~A200にも同様に1000~1099が入力されています。 〔編集〕→〔置換〕の機能を用いて、(2)の1000~1099を1100~1199に直したいところですが、検索する文字列に「10」、置換後の文字列に「11」とし、「すべて置換」をクリックし置換後の結果を見ると当然(2)の「1010」→「1111」となっています。 このようにならないように「1010」→「1110」なるような置換のテクニックはありますか? 使うテクニックは関数を使わず置換で行いたいのですが、ご存知の方がいらっしゃいましたらお願いします。

  • マクロで書式ごと置換

    マクロで書式ごと置換 いつもお世話になります。 今回は標記の件についてお伺いしたく質問を投稿させていただきました。 現在、[D5:CN93]に配置している文字列データを記号に置換する作業をおこなっています。置換マクロに関してはreplaceを使用し、今のところ問題なく動いています。作業工程としては、上記の範囲にあるデータの一覧を作成し、どのデータをどのような記号に置き換えたいかの一覧を附します。 例)  [A1](置換したい記号)   [B1](置換したい文字列)      ○          イチゴ      ◆          バナナ    [D5:CN93]置換対象の文字列例    イチゴ,バナナ マクロでは置換したい文字列、置換したい記号の値をreplace関数に与えて、上記の範囲にあるセル1つ1つに置換をかけていく、というものです。 今までは、文字列の書式は問題ではなかったのですが(置換後に一括変換)、上のほうから「イチゴを赤い○、バナナを黄色い◆のように、色をつけられないか」といわれました。 置換ウィザードを試してみたのですが、セル全体の文字列の色が変わってしまいうまくいきませんでした。 またreplaceで色情報も置換する方法もわかりません(無いのかもしれませんが)・・・ そこで「色情報を持たせたまま、文字列の一部を置換」する方法を教えてください。 これまでのデータを使用したいので、データは以下のように並んでいます。  [A1](置換したい記号)   [B1](置換したい文字列)     赤色の○         イチゴ     黄色の◆         バナナ    [D5:CN93]置換対象の文字列   イチゴ,バナナ

  • < >を含む文字列のエクセルでの置換について

    < >を含む文字列のエクセルでの置換についておしえてください。 < や >を含むhtmlの文字列のSUBSTITUTE置換で悩んでいます。 < や >は数式の大なり、小なりと認識されるので置換ができないということですよね? これを置換するいい方法はないのでしょうか? たとえばhtmlテキストに含まれる<table width="800">という文字を <table width="600"><h1>時計</h1>に置き換えたいというような感じです。 エクセルに詳しくないもので出来るのかどうかよくわかりませんが とても困っているので教えていただけましたら助かります(>_<) よろしくお願いいたします。