web-dev-qa-db-ja.com

VBAへのアクセス|文字列の一部を別の文字列で置き換える方法

あるWordを別のWordに置き換えるコードを作成しようとしています。例:AvenueをAveに、NorthをNに置き換えます。MSAccessを使用しています。SQLREPLACE関数を使用できますが、VBAでAccessモジュールを使用してこれを行い、関数を他の列にアタッチできます。

これからどこから始めればいいかわかりませんので、どんな入力でも大歓迎です。

41
Asynchronous

AccessのVBA関数を使用します Replace(text, find, replacement)

Dim result As String

result = Replace("Some sentence containing Avenue in it.", "Avenue", "Ave")
60
Mitch Wheat

私はこのスレッドを読んでいたので、OPにとって確実にタイムリーではなくなったとしても、情報を追加したいと思います。

上記のBiggerDonは、「北」を「N」で置き換えることの難しさを指摘しています。 「アベニュー」から「アベニュー」にも同様の問題が存在します(たとえば、「アベニューオブザアメリカズ」は「アベニューオブザアメリカズ」になります:理解できるが、OPが望むものではない可能性があります)。

Replace()関数は完全にコンテキストフリーですが、アドレスはそうではありません。完全なソリューションには、コンテキストを正しく解釈するための追加のロジックが必要であり、必要に応じてreplace()を適用します。

データベースには一般に住所が含まれているため、米国内の住所に適用されるOPの問題の一般化されたバージョンは、コーディング精度サポートシステム(CASS)によって対処されています(ユーモア!)。 CASSは、米国の住所を受け入れ、米国郵政公社によって設定された標準を満たすためにそれを完成または修正するデータベースツールです。ウィキペディアのエントリ https://en.wikipedia.org/wiki/Postal_address_verification には基本があり、詳細は郵便局で入手できます。 https://ribbs.usps.gov /index.cfm?page=address_info_systems

3
Dave 2.71828

これに似た関数を使用することもできます。これにより、値を変更したいさまざまな場合に追加できます。

Public Function strReplace(varValue As Variant) as Variant

    Select Case varValue

        Case "Avenue"
            strReplace = "Ave"

        Case "North"
            strReplace = "N"

        Case Else
            strReplace = varValue

    End Select

End Function

その後、SQLは次のようになります。

SELECT strReplace(Address) As Add FROM Tablename
2
Matt Donnan

文字列「North」は通りの名前の始まりかもしれないので、例えば「Northern Boulevard」では、通りの方向は常に通り番号と通り名の間にあり、通り番号と通り名から分離されています。

Public Function strReplace(varValue As Variant) as Variant

Select Case varValue

    Case "Avenue"
        strReplace = "Ave"

    Case " North "
        strReplace = " N "

    Case Else
        strReplace = varValue

End Select

End Function
2
BiggerDon