• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:定義域関数の抽出と連結表示について)

定義域関数の抽出と連結表示について

30246kikuの回答

  • 30246kiku
  • ベストアンサー率73% (370/504)
回答No.2

#1です > 1.種別groupが空白の場合、#エラーが表示されます。 #1 で提示した Public Function GetCode20(iNum As Long) As String は、NULL を受け取れません。なので、クエリから呼び出す際にエラーになったと思います。 NULL を受け取れるようにするのなら Variant である必要があります。 Public Function GetCode20(iNum As Variant) As String NULL の扱いがあることから SQL 部分をそれなりに処理追加します。 If (IsNull(iNum)) Then   rs.Source = "SELECT TOP 20 code FROM T_code WHERE 種別group Is Null ORDER BY code;" Else   rs.Source = "SELECT TOP 20 code FROM T_code WHERE 種別group = " & iNum & " ORDER BY code;" End If > 3.TOP 20を削除するとすべて表示されます。ループ部分で20件カウントという表示方法 変数の宣言部分で Dim i As Integer を追記しているとします。 例えば、ループのところで以下のように記述します。   i = 0   While ((Not rs.EOF) And (i<20))     sRet = sRet & " " & rs("code")     rs.MoveNext     i = i + 1   Wend とか   i = 0   Do While (Not rs.EOF)     sRet = sRet & " " & rs("code")     rs.MoveNext     i = i + 1     If( i >= 20 ) Then Exit Do   Loop > 2.種別groupの数が100件以上有る場合、同一データが抽出されてしまうのですが、 > 種別group_2を追加して複合検索、またさらに検索条件を複数追加する時はどのようにすればよろしいでしょうか すみません。テーブル構造等イメージできてません。 そもそも、#1 の回答であっていたのか、わからなくなっています。 素の構造と素のサンプルデータを提示いただければ、回答できるかもしれません。

ta_003
質問者

お礼

迅速なご回答本当にありがとうございます。 #1 #3 両方ともクリアできました。 徐々に勉強しながら進めて下ります。 問題の#2ですが、ご教授していただきましたことで実際に入力していくと どんどんエスカーレートしてしまい本題がご指摘どおりずれていってしまいました。 大変申し訳ございません。

ta_003
質問者

補足

テーブル構造をお伝えさせていただきます。おかげさまで理想にかなり近づきました。 今度は、複合検索後のcode抽出をし始まりの番号を1つずつずらしていきたいのですが・・・ DMaxなどで動作をさせるのでしょうか。私の言葉の説明不足でここで初めて定義域関数ということにつながると思うのですが・・・ 抽出項目 1.種別group_1 同一グループで最大20個のcodeを抽出 ここまでOKです。 2.sold 欠番を飛ばしてつめて抽出(表示codeから外したいです) 3.種別group_2 最初のcode番号を変えたいです(300件くらいの同一データの分割) 4.rinkフィールドでcodeを1つずつずらして表示したいです) テーブル名1 [T_cart_category] フィルード名1 code (データ型・・・数値 長整数型) フィルード名2 sold (データ型・・・テキスト型) テーブル名2 [T_code] フィルード名1 ID  (データ型・・・オートナンバー) フィルード名2 code (データ型・・・数値 長整数型) フィルード名3 種別group_1 (データ型・・・数値 長整数型) テーブル名3 [T_cart_item] フィルード名1 code (データ型・・・数値 長整数型) フィルード名2 種別group_2 (データ型・・・数値 長整数型) クエリ名 [C_code] フィルード名1 [T_category]![code] フィルード名2 rink: GetCode20([T_code]![種別group]) 大変お手数をおかけいたします、再度ご教授よろしくお願いいたします。

関連するQ&A

  • Accessのクエリで、CStr関数を使った項目のグループ化と抽出のエラー

    アクセスで「TEST1」という名のクエリでCStr関数を使って数値を文字型にしている「項目1」という名のフィールドがあります。(他にもフィールドはあります) 別のクエリ(「TEST2」)で、「TEST1」クエリを使って、「項目1」フィールドをグループ化し、さらに抽出条件に『 "1" 』と入れて実行したところ、 『集計関数の一部として指定された式 '[TEST1].項目1="1"' を含んでいないクエリを実行しようとしました。』 とメッセージが出て実行できませんでした。 ◎ 数値を文字型にしたものをグループ化しさらに抽出条件で絞り込みたいのですが、どうしたらいいのでしょうか? 「TEST1」クエリをテーブルにしないで実行したいのですが。。。 わかる方がいらっしゃったら、教えてください。よろしくお願いします。

  • クエリ抽出において2つのフィールド(テキスト型と数値型)の間に指定の数値を入れたい

    テーブルからクエリの抽出の際に、テーブルの2つのフィールドの間に“0000”を付けて表示させる方法を探しています。 テーブルは以下のようなものです。 ====================================================== 種別コード コード 書名    その他各フィールドあり     A    1 子犬物語     A    2 子猫物語     B    1 鯨の一生 ====================================================== クエリでは種別コードとコードをくっつけたいのですがその際に“A00001”というように固有コード(→新規フィールド名)を作りたいのですが方法を教えてください。  

  • エクセルの関数について

    下記のような作業をしてくれる関数が知りたいと思います。 たとえば、「1・3・9・15・46・87」という数値データのフィールドがあったとします。範囲を100としたときに、出ていない数値を抽出し、その個数を表示する関数が必要です。前期の例でいうと、出てない数値は、2・4・5・6・7・8・10・11…ということになり、その個数は94です。こうした作業は、関数でできるものなのでしょうか。詳しい方、教えてください。よろしくお願いします。

  • クエリで抽出したデータに書き込みたい

    どうしても分からなくなってしまったので、質問させていただきます。 以前、連番フィールドだけのテーブルを作りたいと質問して以下のような回答を頂きました。もちろん回答内容で連番フィールドの作成はできました。 Private Sub Sample1()   Dim rs As New ADODB.Recordset   Dim i As Integer   rs.Open "ZZZZ連番テーブル", CurrentProject.Connection, adOpenForwardOnly, adLockOptimistic   For i = 1 To 9999     rs.AddNew     rs("仮想ID") = "ZZZZ" & Format(i, "0000")     rs.Update   Next   rs.Close End Sub そして今回は、また連番を振りたいのですが 今回は条件が加わっていまして、元テーブルからまずクエリで既存データの登録番号を昇順(空き番号ではないが番号が所々飛んでいるもの)で抽出します。 この虫食いのように飛んでいる番号を綺麗に連番にしようと思い、まずは別フィールドに変更したい連番のフィールドを作成したいのですが。 これがうまくいきません。 上に記述したVBAでは既にレコードがあるデータにAddNewが有効でないのは分かるのですが、 どのようにすれば元テーブルから抽出クエリ(昇順で抽出したデータ)を使って 別フィールドに連番を振ることができるのでしょうか? フィールドを書き換えるのではなく別フィールドに連番を振るだけなのですが・・・

  • Accessのクエリのデータ抽出のエラー?について

    お世話になります。 Accessのクエリでのデータ抽出について教えてください。 テーブルからフィールドを商品コードと出荷日の2つを選択し、 集計を使用して、商品コードでグループ化して、出荷日で最大にします。 すると、抽出条件で商品コードを指定すると抽出できるのですが、抽出条件で 指定せずすべてのデータを抽出すると出てこない商品コードがあります。 たとえば[A]という商品コードを抽出条件に指定すると抽出できるのですが、 抽出条件で指定せずすべてのデータを抽出するとこの[A]という商品コードが 抽出されません。 何が理由なのかお分かりになりましたらどうぞよろしくお願いいたします。 当方SQLがわかりませんのでクエリのデザインビューでご説明いただけますと 幸いです。

  • エクセル グループ員の内容を判別する関数

    次のエクセルの関数を教えてください グループ名は数字6桁です。 グループの構成員は1~6人で、決まっていません。 構成員の種別を0,1,2,3,4,#n/aの5種類に分けました。 各グループの内、構成員が0と1、もしくは1だけの種別で構成されているグループを割り出したいのです。 例 列A      列B グループ名   構成員 123456     0 123456     1 123456     0 111111     0 111111     0 222222     2 222222     0 222222     1 333333     1 333333     1 444444     #n/a 444444     1 444444     1 555555     3 555555     4 666666     1 この場合は、抽出されるグループは次のものです。 123456 333333 666666 関数でできるでしょうか。

  • accessクエリの抽出条件

    access初心者です。 フィールド:「年」 数値型 フィールド:「月」 数値型 があり クエリの抽出条件に 年:2001 月:11 でクエリが実行できます。 これを当月分をクエリ実行できるように 年:year(date()) 月:month(date()) のように入れて当月のレコードを抽出したいのですが 「式に未定義関数dateがあります」というメッセージが出ます。どこが間違っているか助言をいただけると助かります。

  • Access 抽出クエリーについての条件

    先の投稿に重複しますが、 それぞれ異なるテーブルについて、 クエリーで、、 Between #5:00# And #19:00# Between 500 And 1900 上記の方法等で同じ数値ではなく、 期間に幅をもたせて一致としそれぞれの 一致データを抽出するクエリーは つくれますか? もちろん抽出対象のテーブル、列はそれぞれ同じ書式です。 > between関数を使って、 フィールドのデータ型が日付/時刻型の場合 抽出条件欄に、 > 5:00から19:00を抽出したい、 Between #5:00# And #19:00# > 5:00から25:00を抽出したい、 Between #5:00# And #23:59# OR Between #0:00# And #1:00# Access の日付/時刻型では、25:00 というような表現はできないので、上記のように分割することになります。 > また上記がテキストだった場合も、 > 500から1900を抽出したい フィールドがテキスト型の場合、テキスト比較になり数値比較とは異なる抽出結果になるので、 フィールドに Val([テキスト型フィールド]) と式を設定して数値型に変換します。このの抽出条件に、 Between 500 And 1900 と設定します。 通報する

  • ACCESSクエリーの抽出条件について

    OS WIN7 ACCESS 2007使用です。 クエリーの抽出条件について何ですが、テーブルにコードというフィールドがありまして、そこには数値が入力されています。 コード 1 2 3 4 5 ・ ・ このテーブルを元に選択クエリーを作りたいのですが、条件としてコードの値に2と3両方がある場合、2のレコードだけを表示せず、どちらか一方の数値だけの場合またはどちらもない場合は、全てのレコードを表示するようにしたいのです。 抽出条件はどのように書けばよいのでしょうか? いろいろ試したのですが、うまくいきません。 どなたかお助け下さい。

  • Accessでの日付の表示と抽出

    (1)日付型の連結テキストボックスに入力し、データを保存していきたいのですが、入力するとき"2003"と年度だけ入力するだけで、"2003/10/26"と保存されていくようにしたいのですが、どのようにしたらテキストボックスに年度だけの表示&入力にできますでしょうか。 (2)クエリの年度のフィールドにおいて、現在の年度を抽出条件に入力して抽出したいのですが、抽出条件欄にどのように入力すれば現在の年度がとれますでしょうか? 大変初歩的な質問で申し訳ありませんが、よろしくお願いいたします。