• ベストアンサー

Accessでの置換

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

  • yuko6
  • お礼率90% (445/491)

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

  • ベストアンサー
  • tomo-yuki
  • ベストアンサー率39% (11/28)
回答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

yuko6
質問者

補足

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

その他の回答 (5)

  • tomo-yuki
  • ベストアンサー率39% (11/28)
回答No.6

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

yuko6
質問者

お礼

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

  • tomo-yuki
  • ベストアンサー率39% (11/28)
回答No.5

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

  • tomo-yuki
  • ベストアンサー率39% (11/28)
回答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

yuko6
質問者

お礼

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

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

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

yuko6
質問者

お礼

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

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

アクセスで第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の方が適当かもしれませんので、考えてください。

yuko6
質問者

お礼

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

関連するQ&A

  • AccessのデータをVBを使って置換する

    (1)VisualBasic6.0を用いて、Access2000のデータベースに接続します。 (2)データベースの中のテーブル(テーブル名:T-カレンダー)にあるフィールド(フィールド名:コード)に保存されているデータの一部分を置換したい。(⇒途中のアルファベットを変更したい。)(例;置換前:123FFF789 置換後:123III789)  テーブルを直接開いて、フィールドにカーソルをあわせて、”編集メニュー”の『検索と置換』から行っても出来るのですが、Accessを触らないでVBから作ったフォームから変更(置換)をさせたい。  ◇フォームに2つテキストボックスを作って、「検索する文字列」と「置換後の文字列」を入力し、『変換』ボタンを押したら、データが置換される、という流れ。   一回きりの置換でなくて、何回でも同じフィールド内のデータを置換したい。   SQLのREPLACE関数を用いて出来るかな、とは思っているのですが、どのように作成すればよろしいのでしょうか。  また他のやり方でシンプルな方法があればお教えください。

  • テーブルを使った置換

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

  • 住所録をアクセスからエクセルへエクスポートした時に…

    アクセスからエクセルへテーブルのデータをエクスポートした時に、画面上では見えませんが、数式バーを見ると文字列の先頭に「'」がつきますよね。 これを削除するにはどうしたらいいでしょうか。 置換やCLEAN関数・SUBSTITUTE関数ではダメみたいなんです。

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

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

  • 文字の置換の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でもできるやり方を希望します。

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

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

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

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

  • Access2002の検索、置換について

    Access2002の検索、置換について教えてください。 メールアドレスを入力しているフィールドの中でアドレスの先頭文字が「a」で始まるアドレスを大文字「A」で始まるアドレスにしたいと思います。 置換ボタンを押して「検索する文字列」には「a」と入力しました。 ところが「abc@dd*.ne.jp」も検索されますが、「ccca@dd*.ne.jp」も検索で出てきます。「a」で始まるもののみ置換したいのですが・・・。 これは出来ないのでしょうか? 次へ検索ボタンで一つ一つ確認をしながら置換するしかしょうがないのでしょうか?

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

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

専門家に質問してみよう