- ベストアンサー
ACCESSで必要ない文字を消す方法
山田 太郎(@f_a_007)の回答
- 山田 太郎(@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
関連するQ&A
- ACCESSで質問です。
ACCESSの更新クエリで、特定のセルないの情報を下記のように変更したいのですが リースステータスというセル内には、48と買取と買取(海外)の3つの文字が入っています。 48と書いてあるものだけをリース中と表示させ、その他の買取と買取(海外)と書かれるいるものは 空欄にしたいのですが、下記の構文だけだと買取と買取(海外)の文字は残ってしまうので、買取と買取(海外)の文字を削除する構文を追加したいです。 リースステータス(1): IIf(IsNull([区分]),Null,Replace([区分],"48","リース中"))
- ベストアンサー
- その他MS Office製品
- 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)’を 含んでいないクエリを実行しようとしました。というエラーがでます。; 調べても調べてもうまくできません。ご教授お願いいたします。
- 締切済み
- SE・インフラ・Webエンジニア
- 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と"*"の両方とするような記述方法はありますでしょうか? ご教示の程よろしくお願い致します。
- ベストアンサー
- その他MS Office製品
- 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の不備でしょうか? どなたかアドバイスをお願いします。
- ベストアンサー
- オフィス系ソフト