• ベストアンサー

ACCESSで必要ない文字を消す方法

列の中には「L321111」のようなリース契約番号と「買取」と「(海外)」という文字が記載されています。 例: L321111    買取    (海外)    L231444 上記のL~始まる文字以外を空欄にしたいのですが、買取は消えるのですが(海外)を消すためにはどのように構文に追加すればいいでしょうか? クエリで下記の構文を記載しました 式1:IIf(IsNull([リース契約番号]),Null,Replace([リース契約番号],"買取",""))

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

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

質問の意味を激しく誤解していたみたい。。。 各レコードに 1|L321111 2|買取 3|海外) 4|L231444 を 1|L321111 2| 3| 4|L231444 なら 式1:iif(instr(1,[リース契約番号],"L",0)=1 and isnumeric(mid([リース契約番号],2)),[リース契約番号],"") では?

seisei1016
質問者

お礼

ありがとうございます。できました。ほんとうに助かりました。

その他の回答 (4)

回答No.4

例えば、図のようなテーブル[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% (295/459)
回答No.3

とにかく 「L」 で始まるもの以外は空欄にする、ということなら 式1: IIf([リース契約番号] Like 'L*',[リース契約番号],Null)

回答No.2

パターンは大文字の L があって その後には桁数も含めて任意の数字が連なり かつ改行の直前にある ということでしょうか? 私に回答できるかは分かりませんが こんなパターンが有ったりしたら難しそうです。 L321111 ←取る L2240 ←取る (海外)←取らない L231X ←取らない l001 ←取らない LL123←取らない Q1234←取らない L2240 X←取らない(L1234 の後に半角スペース後また文字が) 再注 L2240←取らない 買取 と (海外) だけを消すならReplace関数をネスト(二段階に)すれば・・ と思いますが、そうでもなさそうですね。

seisei1016
質問者

補足

いろいろとありがとうございます。 基本的には、買取と(海外)の文字だけ空欄にして、他の数値が入っているものはすべて表示にしたいのでReplaceでできるかな?と思ったのですが、買取しか消えないので(海外)も消せる方法が解ればと思っています。私の入力方法が悪いのかもしれませんがうまくいきませんでした。

回答No.1

各行の列[リース契約番号]に番号と文字とが混在していて、文字の列のみ””値に変換したいということでしょうか? 仮に、そういうことであれば、添付図を参考にされてください。

seisei1016
質問者

補足

解りにくくてすみません。 列には下記のようにLから始まる数字と買取と(海外)との文字が入力されています。 A列 L13222 L14222 L15132 (海外) 買取 L14335 上記のような感じです。 それをLから始まる数字はそのまま表示させて、買取と(海外)と書かれているとことは空欄に表示したいのですができますでしょうか?

関連するQ&A

  • ACCESSで質問です。

    ACCESSの更新クエリで、特定のセルないの情報を下記のように変更したいのですが リースステータスというセル内には、48と買取と買取(海外)の3つの文字が入っています。 48と書いてあるものだけをリース中と表示させ、その他の買取と買取(海外)と書かれるいるものは 空欄にしたいのですが、下記の構文だけだと買取と買取(海外)の文字は残ってしまうので、買取と買取(海外)の文字を削除する構文を追加したいです。 リースステータス(1): IIf(IsNull([区分]),Null,Replace([区分],"48","リース中"))

  • Access2010 SQL内でのNULL判断

    業務でAccess2010を使用しています。 Accessのコードビルダーで書くINSERT文の中で、ある項目がNULLだったら、1を入れて、 NULLじゃなかったら、その項目の一番大きい値に+1して入れたいのですが、なかなかうまくいきません。 今はこんな感じのinsert文です。 INSERT INTO 職歴詳細 ( 社員番号, 業務番号, 詳細番号, スキル区分, スキルコード ) SELECT '11111', 9,IIF(ISNULL(詳細番号),1,MAX(詳細番号)+1), 1, '01' FROM 職歴詳細 WHERE 社員番号='11111' AND 業務番号=9; しかしこれでは、集計関数の一部として指定された式’IIF(ISNULL(詳細番号),1,MAX(詳細番号)+1)’を 含んでいないクエリを実行しようとしました。というエラーがでます。; 調べても調べてもうまくできません。ご教授お願いいたします。

  • Access2000 抽出について

    どうしてもわからないので教えてください。 選択クエリで、「フリガナ」というフィールドに、 Like IIf(IsNull([Forms]![F_顧客検索]![カナ検索]),"*",[Forms]![F_顧客検索]![カナ検索] & "*") でフォームからクエリを実行させるようにしているのですが、 フリガナが空白のレコードは抽出されてくれません。 「*」でなく、なんと入れればいいのでしょうか? ちなみに他に、「自宅電話番号」というフィールドに、 Like IIf(IsNull([Forms]![F_顧客検索]![電話検索]),"*" & "*",[Forms]![F_顧客検索]![電話検索] & "*") など、似たような感じで抽出をかけています。 よろしくお願いします。

  • ACCESEのビルドの使い方について

    フォームでテキストボックスを2つ作成して、 そのテキストに入力した条件を抽出させるようなことを やりたいのですが、クエリの抽出条件を入れられるところに ビルドで作成すると思いますが.. (テキストボックスごとにフィールドは違うのを見るようにしてます) データ抽出するクエリの作成方法(ビルド)で、 テキストボックスに入力されていない場合、 下記のような構文になると思います。 iif(isnull(forms!フォーム1!date1),,) iif(isnull(forms!フォーム1!date2),,) 上記の処理で、NULL(または入力なし)だった場合、 テキストボックスのクエリの該当フィールドに 作成した抽出条件を無視をするような処理をいれたいのですが、 テキストに入力して抽出してみると 何も抽出できなくて困ってます。 参考になるURLがあったら教えてください

  • Access フォームコンボボックス空白をクエリで抽出したい

    現在access2000を使って、 フォーム1内にコンボボックスを作って コンボボックス内に1,2,3 と項目を入れています。 一方、クエリを使って、上記フォーム内のコンボボックスをつなげて1,2,3をそれぞれ抽出することはできるのですが、 1から3まで全てをiif関数などで 抽出したいと考えてします。 僕が考えた関数は iif(isnull([フォーム1][コンボ1]),is not null ,[フォーム1][コンボ1]) とクエリ抽出条件内に入力すると、結果は、 1、2、3をそれぞれフォームコンボボックスで選択すれば、クエリに反映されるのですが、コンボボックス内を「空白」の状態にすると、1,2,3すべてがクエリで抽出されるのではなく、何も抽出されないという結果になってしまいます。 どうすれば、クエリで1から3すべてを抽出することができるのでしょうか?多分、iif関数内の「空白」は空白として処理されないような気がします。 よろしくお願いします。

  • ACCESSのクエリの抽出

    ACCESS2003を使っています。フォームのコンボボックスに入っているデータを見てクエリで抽出したいと思っています。 フォームのコンボボックスにデータが入っているときは、そのデータで抽出を行い、nullのときは抽出をやめてすべてのデータを表示させたいです。 抽出項目には、null値はありません。 クエリの抽出欄に下記の式を入れましたがうまくいきません。 IIf(IsNull([Forms]![フォーム名]![コンボボックス名])=true , Is Not Null , [Forms]![フォーム名]![コンボボックス名]) コンボボックスにデータが入っている場合は、抽出はうまくいくのですが、nullのときは、何も表示されません。 どこか式が違っているのでしょうか? よろしくお願いします。

  • アクセスのクエリで、式の使い方を教えて下さい

    下記のクエリがあります。 氏名 番号(8桁あり2文字で抽出) Like "80*" Or Like "81*" Or Like "90*" 負担金 金額 不足金 そして 式1: IIf((金額]-[不足金])>=0 Or IsNull([不足金]),True,False) 抽出条件 True としています。 式2で Like "81*"の人で、負担金が600以上の人を追加しようとしましたが出来ませんでした。 方法を教えて下さい。

  • ACCESSでの置換で質問です。

    クエリで特定のフィールドの値を置換するようにしていますが、完全一致ではなく一部に特定の文字があった場合、別の名前に置換したいです。 元データ 契約番号 R00332 R00224 R00553 個人所有 会社所有 上記の契約番号のフィールドを下記のように新しい別フィールドに置換したい。 Rが入っている数字は、部門契約 個人所有は、空欄 会社所有は、空欄 としたいのですが、Replaceで対応しようとしましたがエラーが出てしまい駄目でした。 他に方法ありますでしょうか? また、契約日のフィールドも下記のように変更したいのです。 契約日 1月10日 2月3日 1月3日 1月13日 契約日のフィールドの日付が1月中になっているものは2月1日とし、2月中のものは3月1日と請求日をこれも新しい別フィールドに記載したい。 

  • IIFのTRUE時に、2つのデータを対象としたい

    アクセスで管理簿を作成しています。 テーブル→クエリ→フォームと作成しています。 テーブル    請求の有無 処理状況 ・・・・・・・ 1  未請求      2  請求中     完了 3            未完了 4   済       完了 抽出フォーム  テキストボックス 請求の有無 [select請求の有無]             処理状況  [select処理状況] このようなテーブル、フォームを作っています。 クエリに、 Like IIf(IsNull([Forms]![F_メニュー]![select請求の有無]),"*",[Forms]![F_メニュー]![select請求の有無]) Like IIf(IsNull([Forms]![F_メニュー]![select請求の有無]),Null,[Forms]![F_メニュー]![select請求の有無]) Like IIf(IsNull([Forms]![F_メニュー]![select処理状況]),"*",[Forms]![F_メニュー]![select処理状況]) Like IIf(IsNull([Forms]![F_メニュー]![select処理状況),Null,[Forms]![F_メニュー]![select処理状況]) と2つのフィールドに抽出条件を2行ずつ記載していますが、SQLをみると、 抽出条件が最終的に、    select請求の有無"*" and select処理状況"*" or  select請求の有無Null and select処理状況Null という条件になっており、1行目や3行目の様に、NULL+データありが抽出できません。 Like IIF(IsNull(フォームA), NULL と"*" ,フォームA)                  ↑↑↑  この部分をNULLと"*"の両方とするような記述方法はありますでしょうか? ご教示の程よろしくお願い致します。

  • Access2000 null処理

    Accessのデータベースで商品管理のシステムを作っています。 フォーム上で検索条件を入力し、商品管理のテーブルから商品データを検索するというフォーム、クエリを作ります。 商品管理テーブルの中に 「売上日」という項目があります。 検索項目の1つに売上日があるのですが、以下の状況下でレコードを抽出します。 (1)フォーム上には [売上日S]と[売上日F]があり、[売上日S]以上[売上日F]以下でレコードを抽出。 (2)[売上日S]と[売上日F]がともにnullの場合は全件を表示。 (3)テーブルでは、売上日がnullのことがある。nullは最小値とする。 例えば、フォーム上で [売上日S]がnull [売上日F]が07/01/01ならば、 07/01/01、またはそれ以前に売り上げた商品と、売上日がnullのレコードを抽出。(つまり、 <= 07/01/01 or null になる) よく >= iif(IsNull([forms]![form名]![売上日S]),#1950/01/01#,[forms]![form名]![売上日S]) And <= iif(IsNull([forms]![form名]![売上日F]),#2050/12/31#,[forms]![form名]![売上日F]) を抽出条件にしてnull対応するのですが、これでは、売上日Sがnullのときにnullが含まれず、nullが最小値になりません。 なので クエリ上でもう1つ項目を作り iif(IsNull([売上日]),#1950/01/01#,[売上日]) とし、 この項目を上の抽出条件で抽出するようにしました。 これでうまくいくと思ったのですが、だめでした。 [売上日S]と[売上日F]がともにnullのときはすべて項目が表示されます。 しかし、[売上日S]=null,[売上日F]=07/01/01 のような場合、売上日がnullのものが表示されません。 直接、抽出条件に  >= #1950/01/01# And <= #07/01/01# と打てば、ちゃんと動くし、 売上日S = 07/01/01 売上日F = 07/01/10 のようなときは、ちゃんと抽出されます。 売上日S がnull、売上日Fが非ヌルのときにもちゃんと抽出されるようにするにはどうすればよいのでしょうか? ところで、この不具合は私の記述ミスではないと思うのですがコレはAccess2000の不備でしょうか? どなたかアドバイスをお願いします。

専門家に質問してみよう