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

このQ&Aのポイント
  • Win XP Access2002で、クエリ上で同一種別groupで20個のcodeを抽出し連結したい。
  • 抽出するデータは、同一種別の中で常時最大20個で、欠番を含め約30000件ある。
  • VBAもしくはSQLで簡単な関数による連結方法を教えてほしい。
回答を見る
  • ベストアンサー

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

Win XP Access2002を使用しております。 クエリ上でrinkというフィールドに同一種別groupで20個のcodeを抽出して半角スペースを入れ連結したいのですがどのような関数を使えばよろしいのでしょうか。 同一種別の中で抽出し常時最大20個(10個の場合有り)のデータが必要です。 codeは、欠番を含め30000件くらいあります。 何となく Mid  DMax かなと思っているのですが、 レコードの連結は出来てもフィールドの検索方法が解かりません。 VBAもしくはSQLは基本のみでユーザー定義関数がやっと出来る程度なので 出来ることであれば簡単な関数を望んでいるのですが・・・・・・・ テーブル名 T_code フィルード名1 ID  (データ型・・・オートナンバー) フィルード名2 code (データ型・・・数値) フィルード名3 種別group (データ型・・・数値) 選択クエリ名 C_code フィールド名1 code : [T_code]![code] フィールド名2 rink : ?????? 表示フィールド最終表示例 種別01で20個のデータ抽出後の連結 (" "&" "&・・・・・・・・・) code code code code code code code code code code code code code code code 例1 種別 01 が連番の場合 00001 00002 00003 00004 00005 00006 00007 00008 00009 00010 00011 00012 00013 00014 00015 00016 00017 00018 00019 00020 欠番発生時詰めて20個の抽出 00001 00002 00003 00005 00006 00007 00009 00011 00012 00013 00014 00015 00016 00017 00018 00019 00020 00021 00022 00023 例2 種別 012 が連番の場合 00101 00102 00103 00104 00105 00106 00107 00108 00109 00110 00111 00112 00113 00114 00115 00116 00117 00118 00119 00120 欠番発生時詰めて20個の抽出 00102 00103 00104 00105 00106 00107 00108 00110 00111 00112 00113 00115 00118 00119 00121 00122 00123 00125 00128 00130 ご教授願えれば光栄です。よろしくお願いいたします。

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

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

#4です 近いと思われるものを2パターンで、 新規mdbでサンプル取り込み後、確認してみてください。 (サンプル部分をメモ帳とかに貼り付け保存後、インポート) > 番号をずらすことが出来ればと これは理解できてません。 1)グループ1とグループ2でグループ化 2)指定 code を基準とした生成 共通) 元となるテーブルのサンプルを以下とします。 テーブル名:T6 フィールド名:code, sold, syuG1, syuG2 sold のみテキスト型、その他は長整数 テーブルサンプル(インポートしやすいように:見にくいです) "code","sold","syuG1","syuG2" 1,,1,1 2,,1,1 3,"完売",1,1 4,,1,2 5,,2,2 6,,2,2 7,"完売",2,2 8,,2,3 9,,3,3 10,"完売",3,3 11,,3,3 12,"完売",3,4 13,"完売",4,4 14,,4,4 15,,4,4 16,"完売",4,5 17,,5,5 18,,5,5 19,,5,5 20,,5,6 グループ1テーブル テーブル名:T6_G1 "syuG1","内容" 1,"AAAA" 2,"BBBB" 3,"CCCC" 4,"DDDD" 5,"EEEE" グループ2テーブル テーブル名:T6_G2 "syuG2","内容" 1,"aaaa" 2,"bbbb" 3,"cccc" 4,"dddd" 5,"eeee" 6,"ffff" 1)グループ1とグループ2でグループ化 標準モジュールにユーザ定義関数を記述(以下例) Public Function GetCode20Pat1(vG1 As Variant, vG2 As Variant) As String   Dim rs As New ADODB.Recordset   Dim sSql As String   Dim sRet As String   Dim i As Integer   On Error Resume Next   sRet = ""   sSql = "SELECT code FROM T6 WHERE (Nz(sold,'') <> '完売')"   If (IsNull(vG1)) Then     sSql = sSql & " AND (syuG1 Is Null) "   Else     sSql = sSql & " AND (syuG1 = " & vG1 & ")"   End If   If (IsNull(vG2)) Then     sSql = sSql & " AND (syuG2 Is Null) "   Else     sSql = sSql & " AND (syuG2 = " & vG2 & ")"   End If   sSql = sSql & " ORDER BY code;"   i = 0   rs.Source = sSql   rs.Open , CurrentProject.Connection, adOpenForwardOnly, adLockReadOnly   While ((Not rs.EOF) And (i < 20))     sRet = sRet & " " & rs("code")     rs.MoveNext     i = i + 1   Wend   rs.Close   If (Len(sRet) > 0) Then sRet = Mid(sRet, 2)   GetCode20Pat1 = sRet End Function クエリのSQLビューに以下記述(貼り付け&保存:どちらでも) SELECT Min(T6.code) AS code , T6.syuG1, First(T6_G1.内容) AS 内容1 , T6.syuG2, First(T6_G2.内容) AS 内容2 , GetCode20Pat1(T6.[syuG1],T6.[syuG2]) AS rink FROM (T6 LEFT JOIN T6_G1 ON T6.syuG1 = T6_G1.[syuG1]) LEFT JOIN T6_G2 ON T6.syuG2 = T6_G2.[syuG2] WHERE (Nz([T6].[sold],"")<>"完売") GROUP BY T6.syuG1, T6.syuG2 ORDER BY Min(T6.code); とか SELECT Q1.code , Q1.syuG1, T6_G1.内容 AS 内容1 , Q1.syuG2, T6_G2.内容 AS 内容2 , Q1.rink FROM ((SELECT Min(T6.code) AS code , T6.syuG1, T6.syuG2, GetCode20Pat1(T6.[syuG1],T6.[syuG2]) AS rink FROM T6 WHERE (Nz([T6].[sold],"")<>"完売") GROUP BY T6.syuG1, T6.syuG2) AS Q1 LEFT JOIN T6_G1 ON Q1.syuG1 = T6_G1.syuG1) LEFT JOIN T6_G2 ON Q1.syuG2 = T6_G2.syuG2 ORDER BY Q1.code; このクエリを実行すると以下の表示に code...syuG1.....内容1....syuG2.....内容2.....rink 1..........1..........AAAA..........1..........aaaa..........1 2 4..........1..........AAAA..........2..........bbbb..........4 5..........2..........BBBB..........2..........bbbb..........5 6 8..........2..........BBBB..........3..........cccc..........8 9..........3..........CCCC..........3..........cccc..........9 11 14.........4..........DDDD..........4..........dddd..........14 15 17.........5..........EEEE..........5..........eeee..........17 18 19 20.........5..........EEEE..........6..........ffff..........20 左の code は、グループ1とグループ2でグループ化した際の最小 code になります。 (完売は除く) このグループ1とグループ2でグループ化すると、以下の様な表示にはなりません > 1  01 クリスマス  01 リース  1 2 3 4 5 6 7 8 ~ > 15  01 クリスマス  01 リース        15(最初の番号) ~ > 10  01 クリスマス   02 ファイバーツリー  10 11 15 18 ~ > 30  01 クリスマス   02 ファイバーツリー 30(最初の番号)~ ↓上記での1,2行目が1つに、3,4行目が1つになります > 1  01 クリスマス  01 リース  1 2 3 4 5 6 7 8 ~ > 10  01 クリスマス   02 ファイバーツリー  10 11 15 18 ~ 2)指定 code を基準とした生成 左の code に表示するものを別テーブルで指定する例 rink は、指定された code のグループ1とグループ2が同じものを完売除きで、指定された code 以上で生成 code を指定するテーブルサンプル テーブル名:T6_1 "code" 1 5 10 15 20 標準モジュールに以下ユーザ定義関数を記述 Public Function GetCode20Pat2(iCode As Long) As String   Dim rs As New ADODB.Recordset   Dim sSql As String   Dim sRet As String   Dim i As Integer   On Error Resume Next   sRet = ""   sSql = "SELECT Q1.code FROM T6 AS Q1 INNER JOIN "   sSql = sSql & "(SELECT * FROM T6 WHERE code = " & iCode & ") AS Q2 "   sSql = sSql & "ON (Q1.syuG1 = Q2.syuG1 AND Q1.syuG2 = Q2.syuG2 AND Q1.code >= Q2.code)"   sSql = sSql & " WHERE (Nz(Q1.sold,'') <> '完売')"   sSql = sSql & " ORDER BY Q1.code;"   i = 0   rs.Source = sSql   rs.Open , CurrentProject.Connection, adOpenForwardOnly, adLockReadOnly   While ((Not rs.EOF) And (i < 20))     sRet = sRet & " " & rs("code")     rs.MoveNext     i = i + 1   Wend   rs.Close   If (Len(sRet) > 0) Then sRet = Mid(sRet, 2)   GetCode20Pat2 = sRet End Function クエリのSQLビューに以下記述(貼り付け&保存) SELECT T6_1.code , T6.syuG1, T6_G1.内容 AS 内容1 , T6.syuG2, T6_G2.内容 AS 内容2, GetCode20Pat2(T6_1.code) AS rink FROM ((T6_1 INNER JOIN T6 ON T6_1.code = T6.code) LEFT JOIN T6_G1 ON T6.syuG1 = T6_G1.[syuG1]) LEFT JOIN T6_G2 ON T6.syuG2 = T6_G2.[syuG2] ORDER BY T6_1.code; このクエリを実行すると以下の表示に code...syuG1....内容1....syuG2.....内容2....rink 1..........1..........AAAA..........1..........aaaa..........1 2 5..........2..........BBBB..........2..........bbbb..........5 6 10.........3..........CCCC..........3..........cccc..........11 15.........4..........DDDD..........4..........dddd..........15 20.........5..........EEEE..........6..........ffff..........20 code = 10 のところは、code = 10 自体が完売なので、rink は 11 から また、rink 生成は指定された code 以上と条件付けているので code = 9 は除外 ※ 各クエリでSQLビュー記述後は、デザインビューで設定を確認してください。  (デザインを見ればどのような指定になっているかわかりやすいと思います) ※ rink 作成時の20件抽出は、ループのところでカウントしています。  (サンプルは20件以下なので、TOP 20 では得られませんでした) ※※ #1の回答をベースにするなら、1)でしょうか ※※ サンプルテーブル内のデータを書き換えて、いろいろ確認してみてください ※※ これで完とは思っていないので

ta_003
質問者

お礼

お礼のお言葉大変遅くなりました。 ご回答頂いた件につきましてそのとおりインポートして出来ました。 実際の私のテープル構成に問題が有り只今悪戦苦闘しております。 お時間が多少必要なのでお礼のみ先にさせて頂くご無礼をお許しください。 いつも迅速な初心者相手にとて親切な細かいご回答本当に感謝しております。 今後ともよろしくお願いいたします。

その他の回答 (4)

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

#3です > テーブル名 [T_code] > フィルード名1 ID  (データ型・・・オートナンバー) > フィルード名2 code (データ型・・・数値 長整数型) > フィルード名3 sold (データ型・・・テキスト型) > フィルード名4 種別group_1 (データ型・・・数値 長整数型) > フィルード名5 種別group_2 (データ型・・・数値 長整数型) いきなり1テーブルにされた形で説明いただいても、・・・ これから1テーブルのもので考えられますか。 > クエリ名 [C_code] > フィルード名1 [T_ccode]![code] > フィルード名2 rink: GetCode20([T_code]![種別group]) > code   group_1     group_2        rink > 1  01 クリスマス  01 リース  1 2 3 4 5 6 7 8 ~ ここで、T_ccode は新しいテーブルでしょうか。 この例を解釈しようとすると、 group_1 , group_2 を表示するクエリ記述部分がありませんが、 code = 1 の group_1 , group_2 と同じ code (完売でない)を 1 スタートで rinkとして20件? code = 10 なら 10 スタートで? で、code = 1 はどこから持ってくる? soldは "完売" っていう文字列? 近いですか

ta_003
質問者

お礼

何度もご多忙中にも関わらずご回答いただき誠にありがとうございます。 昨日、VBAの本を読んで勉強して下りましたらADOの説明がありSQLで抽出をする内容がありました。定義域関数など関係が無いのですね、混乱させてしまい大変申し訳ございませんでした。

ta_003
質問者

補足

早速のご回答ありがとうございます。 むちゃくちゃ近いです。 >>いきなり1テーブルにされた形で説明いただいても、・・・ これから1テーブルのもので考えられますか。 大変申し訳ございません。各テーブルの関連の説明が私には難しいので 新しくテーブルを作成し1つにまとめさせていただきました。 同一テーブルに5つのフィールドが有るとして考えていただきたいのですが よろしいでしょうか。 >>ここで、T_ccode は新しいテーブルでしょうか。 大変申し訳ございません。フィールド名を入れ忘れました。 フィルード名1 code :[T_ccode]![code] >>code = 1 の group_1 , group_2 と同じ code (完売でない)を 1 スタートで rinkとして20件? code = 10 なら 10 スタートで? 言葉が足りずご迷惑をおかけしております。 そのとおりでございます。  1  01 クリスマス  01 リース  1 2 3 4 5 6 7 8 ~ 15  01 クリスマス  01 リース   15 16 17 18 19 20 ~ >code = 1 はどこから持ってくる? #1でのご回答のままで構いません。最初は、group_1のみの抽出条件のため 私のお伝えの仕方が悪く同一データが表示されてしまいました。そこでgroup_2を追加して さらは番号をずらすことが出来ればと思って下ります。 >soldは "完売" っていう文字列? そのとおりでございます。 今後ともよろしくお願いいたします。

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

#2です > 2.sold 欠番を飛ばしてつめて抽出(表示codeから外したいです) > 3.種別group_2 最初のcode番号を変えたいです(300件くらいの同一データの分割) > 4.rinkフィールドでcodeを1つずつずらして表示したいです) 各テーブルの関連付けがわかりません。 欠番がどのように構成されているのか、 種別group_2 最初のcode番号 の最初とは、 codeを1つずつずらして 何を基準にどうずらすとか、などなど イメージできてません。 前回までは20件でしたが3~5件くらいにして、 クエリを完結させる各テーブルのサンプルを提示ください。 クエリでの結果は最低2パターンは欲しいです。

ta_003
質問者

お礼

ご回答ありがとうございます。 今回も説明不足で大変お手数をおかけ致します。 趣旨の説明が出来ておらずご迷惑をおかけしております。 よろしくお願いいたします。

ta_003
質問者

補足

#2についての最度説明をさせて頂きます。 > 2.sold 欠番を飛ばしてつめて抽出(表示codeから外したいです) > 3.種別group_2 最初のcode番号を変えたいです(300件くらいの同一データの分割) > 4.rinkフィールドでcodeを1つずつずらして表示したいです) 商品の在庫管理と同時にショッピングカートに使用して下ります。 商品が完売(sold)になった場合は、詰め次の商品(code)を抽出したい。 同一種別商品(group_1)が多いので違う種別商品(group_2)でと細分し抽出したい。 お勧め商品として(rinkに最大20個抽出)を表示したい。 テーブル名 [T_code] フィルード名1 ID  (データ型・・・オートナンバー) フィルード名2 code (データ型・・・数値 長整数型) フィルード名3 sold (データ型・・・テキスト型) フィルード名4 種別group_1 (データ型・・・数値 長整数型) フィルード名5 種別group_2 (データ型・・・数値 長整数型) クエリ名 [C_code] フィルード名1 [T_ccode]![code] フィルード名2 rink: GetCode20([T_code]![種別group]) code   group_1     group_2        rink 1  01 クリスマス  01 リース  1 2 3 4 5 6 7 8 ~ 15  01 クリスマス  01 リース        15(最初の番号) ~ 10  01 クリスマス   02 ファイバーツリー  10 11 15 18 ~ 30  01 クリスマス   02 ファイバーツリー 30(最初の番号)~ 50  01 クリスマス  03 ブランチツリー   50 51 55 57 ~ (code 52 53 54 56 は完売) 101  03 かばん    01 セカンドバック  101 102 104 105 ~ 115  03 かばん    01 セカンドバック  115(最初の番号)~ 151  03 かばん    02 パイロットケース 151 155 157 159 ~ 200  03 かばん    02 パイロットケース 200(最初の番号)~ 211  03 かばん    03 ブリーフケース 211 215 240 250 ~ (code 103 152 153 154 156 158は完売) >種別group_2 最初のcode番号 の最初とは、 表示レコードのcodeです。 15  01 クリスマス  01 リース        15(最初の番号) ~ 30  01 クリスマス   02 ファイバーツリー 30(最初の番号)~ 115  03 かばん    01 セカンドバック  115(最初の番号)~ 200  03 かばん    02 パイロットケース 200(最初の番号)~ >何を基準にどうずらすとか 各レコードのcodeを基準に+1(欠番含めずに)ずつずらしたい。 このようなご説明でイメージできますでしょうか。 大変お手数をおかけしております。よろしくお願いいたします。

  • 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]) 大変お手数をおかけいたします、再度ご教授よろしくお願いいたします。

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

以下、未検証ですが動けば、 ユーザ定義関数を作成し、クエリでグループ化した際の 種別group の code 順で 20件とり、1つの文字列として返すものにします。 (種別group が長整数だったとした場合) ユーザ定義関数例:標準モジュールに記述) Public Function GetCode20(iNum As Long) As String   Dim rs As New ADODB.Recordset   Dim sRet As String   On Error Resume Next   sRet = ""   rs.Source = "SELECT TOP 20 code FROM T_code WHERE 種別group = " & iNum & " ORDER BY code;"   rs.Open , CurrentProject.Connection, adOpenForwardOnly, adLockReadOnly   While (Not rs.EOF)     sRet = sRet & " " & rs("code") '    sRet = sRet & " " & Format(rs("code"),"00000") ' 必要なら数値の5桁化     rs.MoveNext   Wend   rs.Close   If (Len(sRet) > 0) Then sRet = Mid(sRet, 2)   GetCode20 = sRet End Function ※駄目だったら、TOP 20 を削除し、ループ部分で20件カウントすれば良いと思います クエリ記述例) SELECT 種別group, GetCode20(種別group) AS code20 FROM T_code GROUP BY 種別group; ※ ADO の例なので、参照設定は忘れずに ※ 関数名は適宜変更してください ※ 意味合い違ったらごめんなさい

ta_003
質問者

お礼

このたびは、大変お世話になりました。 その後、テープル構造の正規化と今回の処理についてもう少し吟味しなければならないという結論に至りました。 今回は、多大なお時間を費やして頂きまして本当にありがとうございました。

ta_003
質問者

補足

速のご回答ありがとうございました。 とても感謝しております。VBAという言語はすごいですね。 ありがとうございました。 もう少し深くご教授してい頂きたいのでよろしいでしょうか。 1.種別groupが空白の場合、#エラーが表示されます。 多分初歩的な事だと思うのですが 文字列で計算がされているという事はわかります。 テーブル名 T_code フィルード名1 ID  (データ型・・・オートナンバー) フィルード名2 code (データ型・・・数値 長整数型) フィルード名3 種別group (データ型・・・数値 長整数型) 2.種別groupの数が100件以上有る場合、同一データが抽出されてしまうのですが、 種別group_2を追加して複合検索、またさらに検索条件を複数追加する時はどのようにすればよろしいでしょうか。 現状 code group_1 group_2 rink 00199  8  1 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 00228  8  2 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 00231  8  1 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 00260  8  3 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 今後(重複codeはなし) code group_1 group_2 rink 00199  8  1 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 00228  8  2 228 229 230 295 296 297 300 311 00231  8  1 231 232 233 234 235 236 237 238 239 240 241 370 371 375 385 397 451 452 455 456 00260  8  3 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 286 287 298 299 3.TOP 20を削除するとすべて表示されます。ループ部分で20件カウントという表示方法も教えていただけますでしょうか。 大変お手数をおかけいたしますがよろしくお願いいたします。

関連する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)クエリの年度のフィールドにおいて、現在の年度を抽出条件に入力して抽出したいのですが、抽出条件欄にどのように入力すれば現在の年度がとれますでしょうか? 大変初歩的な質問で申し訳ありませんが、よろしくお願いいたします。