- ベストアンサー
ACCESSで必要ない文字を消す方法
列の中には「L321111」のようなリース契約番号と「買取」と「(海外)」という文字が記載されています。 例: L321111 買取 (海外) L231444 上記のL~始まる文字以外を空欄にしたいのですが、買取は消えるのですが(海外)を消すためにはどのように構文に追加すればいいでしょうか? クエリで下記の構文を記載しました 式1:IIf(IsNull([リース契約番号]),Null,Replace([リース契約番号],"買取",""))
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
質問の意味を激しく誤解していたみたい。。。 各レコードに 1|L321111 2|買取 3|海外) 4|L231444 を 1|L321111 2| 3| 4|L231444 なら 式1:iif(instr(1,[リース契約番号],"L",0)=1 and isnumeric(mid([リース契約番号],2)),[リース契約番号],"") では?
その他の回答 (4)
- 山田 太郎(@f_a_007)
- ベストアンサー率20% (955/4574)
例えば、図のようなテーブル[T1]があるとします。それを、図の[選択クエリ]のような結果を得たいということでしょうか? 添付図の選択クエリのSQLは次のようです。 SELECT T1.id, XferSuji([a]) AS 契約番号 FROM T1 WHERE Len(XferSuji([a]))<>0; WHERE 文を省けば、全ての行が表示されます。 先に示したやり方でもOKですが、'L'と言うマジックナンバーをクエリに埋め込むことになります。そういう不味さを取り除くためには、次のように標準モジュールに XferSuji() のような独自関数を追加するしかありません。これですと、多少は汎用性もあり、かつ、データの変更('L'以外も追加)などに耐えうると思います。 Option Compare Database Option Explicit Public Function XferSuji(ByVal strText As Variant) As String Dim I As Integer ' For Next 用 Dim L As Integer ' 受け取った文字列の文字数 Dim strChar As String ' 一つひとつの文字を格納する変数 Dim strReturn As String ' 戻り値 L = Len(strText & "") For I = 1 To L strChar = Mid(strText, I, 1) If LenB(StrConv(strChar, vbFromUnicode)) = 1 Then If strChar >= "0" And strChar <= "9" Then strReturn = strReturn & strChar End If Else strReturn = "" Exit For End If Next I XferSuji = strReturn End Function
- m3_maki
- ベストアンサー率64% (296/460)
とにかく 「L」 で始まるもの以外は空欄にする、ということなら 式1: IIf([リース契約番号] Like 'L*',[リース契約番号],Null)
- NotFound404
- ベストアンサー率70% (288/408)
パターンは大文字の L があって その後には桁数も含めて任意の数字が連なり かつ改行の直前にある ということでしょうか? 私に回答できるかは分かりませんが こんなパターンが有ったりしたら難しそうです。 L321111 ←取る L2240 ←取る (海外)←取らない L231X ←取らない l001 ←取らない LL123←取らない Q1234←取らない L2240 X←取らない(L1234 の後に半角スペース後また文字が) 再注 L2240←取らない 買取 と (海外) だけを消すならReplace関数をネスト(二段階に)すれば・・ と思いますが、そうでもなさそうですね。
補足
いろいろとありがとうございます。 基本的には、買取と(海外)の文字だけ空欄にして、他の数値が入っているものはすべて表示にしたいのでReplaceでできるかな?と思ったのですが、買取しか消えないので(海外)も消せる方法が解ればと思っています。私の入力方法が悪いのかもしれませんがうまくいきませんでした。
- 山田 太郎(@f_a_007)
- ベストアンサー率20% (955/4574)
お礼
ありがとうございます。できました。ほんとうに助かりました。