• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:アクセスにおける一覧データ作成時のテクニックについて。。。)

アクセスにおける一覧データ作成のテクニック

このQ&Aのポイント
  • アクセスにおける一覧データの作成時には、倉庫ナンバーのみを抽出するテクニックがあります。
  • クロス集計を利用して、倉庫ナンバーをカンマ区切りで表示させる方法もあります。
  • この方法を使えば、データの見やすさと効率化を実現できます。

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

  • ベストアンサー
  • DexMachina
  • ベストアンサー率73% (1287/1744)
回答No.6

No.2です。 > 3464:抽出条件でデータ型が一致しません 「商品名」「倉庫ナンバー」が空白(Null)だった場合にエラーになるのかと 当たりをつけてこちらでサンプルデータを作成して確認してみましたが、 残念ながらエラーにはなりませんでした。 上記以外では、こちらの経験から、  ・当該集計クエリがテーブルからではなく別のクエリから作成していて、   そこで「商品名」辺りにエラーが発生している という可能性が推測されます。 (ユーザー関数に限らず、関数の引数に演算フィールドの演算結果が  含まれていて、その値がエラー値になっている場合、ご質問と同様の  型不一致エラーが発生します) もしも上記の推測が当たっているようでしたら、当該集計クエリは、恐らく エラー発生時も一応結果は表示されると思いますので、エラーの発生して いるデータ(「倉庫」の表示が「#Error」となっているレコード)を確認の上、 元となっているデータを見直してみてください。 (修正方法としては、元となっているクエリで、   ・0で除算しているようなら分母にあたるフィールドに「>0」を、   ・「Left([フィールド名],Len([フィールド名])-1」といった式を使用している    なら、同様に「Is Not Null」を、  それぞれ抽出条件に指定する、といった形になります:  【参考】Len関数の引数がNullだった場合、その戻り値は0ではなくNullになります) なお、エラーになる件数が余りに多く、MsgBoxを毎回閉じるのが面倒なよう でしたら、DMembers関数の末尾の方を以下のように修正してみてください。 (いつもの癖で「:」を使用して1行に纏めてしまっていたので、併せてそこも  修正しました。なお、「終了処理:」「エラー処理:」の「:」は必須です(念のため)) 【現在】 終了処理:   DMembers = Rsl: Set DRS = Nothing: Set DBS = Nothing: Exit Function エラー処理:   Rsl = "#Error": MsgBox Err & ":" & Error$, , "DMembers(関数)": Resume 終了処理 End Function 【修正】 終了処理:   DMembers = Rsl   Set DRS = Nothing   Set DBS = Nothing   Exit Function エラー処理:   Select Case Err.Number     Case 3464       '「型不一致」エラー時はMsgBoxを表示しない     Case Else       '上記以外のエラー時は、従来通りMsgBoxを表示       MsgBox Err & ":" & Error$, , "DMembers(関数)"   End Select   Rsl = "#Error"   Resume 終了処理 End Function ・・・上記の推測が外れていたとすると、申し訳ありませんが原因の推測が つきません(汗)

yukinosuke1104
質問者

補足

ありがとうございました! 無事抽出できました>< 理想の表が出来そうです。 駄目だった原因は、 「当該集計クエリがテーブルからではなく別のクエリから作成していて、 そこで「商品名」辺りにエラーが発生している」 だったようです。 きちんと注意して作り直したら大丈夫でした。 本当に、皆さん有難うございましたm(__)m 大変感謝感激でございます。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (5)

  • shinkami
  • ベストアンサー率43% (179/411)
回答No.5

現在のテーブルを基にクエリーで式を追加してこれを表示します 倉庫No.: IIf(IsNull([No.1]),"",[No.1]) & IIf(IsNull([No.2]),"","," & [No.2]) & IIf(IsNull([No.3]),"","," & [No.3]) 倉庫の数が多いようで式が長くなりますが式を2重3重に重ねれば何とかなると思うのですが

全文を見る
すると、全ての回答が全文表示されます。
  • nicotinism
  • ベストアンサー率70% (1019/1452)
回答No.4

ADOは良く知らないのですが、(^^ゞ 予め新規にテーブルを作成します。 フィールド名は適当に付けてください。仮にF1・F2とします F1→テキスト型 F2→テキスト型(フィールドサイズは、255) このテーブル名を、仮に、T1 とします。 標準モジュールに下記をコピペ Q1のところは実際のクロス集計クエリ名に変更してください。 テーブル T1 がある場合もテーブル名と下記の T1 を変更。 Sub test() Dim cn As ADODB.Connection Dim rsFrom As ADODB.Recordset Dim rsTo As ADODB.Recordset Dim i As Integer Dim s As String Set cn = CurrentProject.Connection Set rsFrom = New ADODB.Recordset Set rsTo = New ADODB.Recordset rsFrom.Open "Q1", cn, CursorType:=adOpenStatic 'Q1 を変更 rsTo.Open "T1", cn, adOpenKeyset, adLockPessimistic '必要に応じて Do Until rsFrom.EOF   s = ""   For i = 1 To rsFrom.Fields.Count - 1     If Not IsNull(rsFrom.Fields(i)) Then       s = s & CStr(rsFrom.Fields(i)) & Chr(44)     End If   Next i   s = Left(s, Len(s) - 1)   rsTo.AddNew   rsTo.Fields(0) = rsFrom.Fields(0)   rsTo.Fields(1) = s   rsTo.Update   rsFrom.MoveNext Loop rsFrom.Close: Set rsFrom = Nothing rsTo.Close: Set rsTo = Nothing MsgBox "テーブル T1 を開いてみてください。どうかしらん?" End Sub 当方WinXP & Access2002 ※テーブル T1 に追記されますのでご注意を

全文を見る
すると、全ての回答が全文表示されます。
  • layy
  • ベストアンサー率23% (292/1222)
回答No.3

前提で、 倉庫に関わるなら列がどのくらいあるかの最大は物理的に決まっていると思います。 クロス集計クエリの列が実行する度にデータによって変動していると思いますが、 クロス集計の「クエリ列見出し」プロパティにて固定列にできます。 列名を倉庫にして 1,2,4,・・・・・・・・,32 と途中抜ける番号も必ず出るようにする 1,2,3,4,・・・・・・・・,31,32 こうしておけば、すべての列を結合するもう1つの項目を 準備できると思います。 まとめ:"0"&[1]&","&[2]&","&[3]&","&[4]&","・・・・&[31]&","&[32] ここまでできれば 「0,2,3,,,,,,,31,32」 みたいな形になるのでは、と思います。 「0,」「,,」は置換します。 考えてみただけですので 実際少し違うかもしれませんが、参考で。

全文を見る
すると、全ての回答が全文表示されます。
  • DexMachina
  • ベストアンサー率73% (1287/1744)
回答No.2

No.1です。 > こちらが黒塗りつぶしになります↓↓↓ >「, DBS As DAO.Database」 Accessのバージョンによっては、初期状態では DAOが有効になっていないのを失念していました(汗) (代わりに「ADO」が有効になっています) http://www.accessclub.jp/dao/01.html VBEのメニューで、「ツール(T)→参照設定(R)」を 選択して『参照設定』ダイアログを呼び出したら、 「Microsoft DAO 3.x Object Library」のチェックを オンにして、『Ok』ボタンで閉じてください。 これで、DAOへの参照設定が有効になりますので、 「ユーザー定義型は~」のエラーは発生しなくなります。 大変失礼致しました(汗)

yukinosuke1104
質問者

補足

こちらから質問をしたのに、返答が遅くなり申し訳ありません。 ↓↓↓準備↓↓↓ ---------------------------------------------------- アクセスver2000 モジュール作成OK 「Microsoft DAO 3.x Object Library」のチェックOK テーブル名:Sheet1 フィールド1名:商品名 フィールド2名:倉庫ナンバー ---------------------------------------------------- 集計クエリ 商品名:グループ化 倉庫: DMembers("[倉庫ナンバー]","Sheet1","[商品名]='" & [商品名] & "'"):演算 上記のクエリを実行すると、小さなエラーウィンドウが表示されます。 ウィンドウ名:DMembers(関数) 内容:3464:抽出条件でデータ型が一致しません もう一歩だと思うのですが、、 もう何が間違っているのかさっぱりになってきてしまいました。。

全文を見る
すると、全ての回答が全文表示されます。
  • DexMachina
  • ベストアンサー率73% (1287/1744)
回答No.1

Access2007以降なら、新規追加された『複数値フィールド』を使用する 方法があるかもしれませんが(追加クエリでの追加?)、試してみたことが ないので・・・(汗) http://office.microsoft.com/ja-jp/get-started-with-2007/HA010024185.aspx#BMdatatypes Access2003以前の場合は、組込機能では対応できないと思いますので、 以前、他の方の質問への回答時に作成した、DMembers関数をご紹介 します(Access2007以降でも使用は可能です): http://okwave.jp/qa/q5168984.html (回答No.1の『<第2段階>』とした部分以降を、特に参照) 上記関数を標準モジュールに貼付・保存したら、後は集計クエリで 以下のような式を指定した演算フィールドを作成すれば、ご希望の 結果が得られるかと思います: 倉庫ナンバーズ: DMembers("[倉庫ナンバー]", "テーブル名", "[商品名]='" & 商品名 & "'", "[倉庫ナンバー]") ・・・以上です。 (既存フィールドと同じ名前を演算フィールド名にするとエラーに  なるため、「倉庫ナンバー『ズ』」としています。念のため。)

yukinosuke1104
質問者

補足

(1)モジュールを作成 (2)集計クエリを作成 (3)実行するとエラー コンパイルエラー「ユーザー定義型は定義されていません」とウィンドウが表示され。 モジュール画面になります。そして、 こちらが黄色塗りつぶしになり↓↓↓ 「Public Function DMembers(sExpr As String, sDomain As String, _    Optional sCriteria As String, Optional sOrder As String) As String」 こちらが黒塗りつぶしになります↓↓↓ 「, DBS As DAO.Database」 で、出来ません。。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • accessの集計について

    アクセスにデータを取り込んで、必要なデータを抽出するクエリ(集計_サブ[添付図1])を作りました。 左から、店舗No・日付・商品情報・金額です。 それを元に、集計をして店舗別で、商品毎に月前半・後半と集計をしたいです。[添付図2] クロス集計で出来そうな気がしますが、店舗別、商品別にして半月毎に集計する事は可能でしょうか? もしくはvba使わないと不可能でしょうか?

  • アクセス クロス集計結果の列を一部まとめたい

    MSアクセスのクロス集計クエリで質問です。 ある予算種別ごとに、月ごとにクロス集計を行っています。 添付画像のように3月以前のデータ(黄色部分)を集約して表示したいと考えています。 クエリプロパティの列見出しで、"2013/04","2013/05"・・・・と指定して、 データの無い月も表示できるようにしましたが、2013/03以前のデータを集約したいと考えています。 よろしくお願いいたします。

  • アクセスで重複データの抽出について

    アクセスで添付画像のようなテーブルがあり、重複データの抽出を行いたいです。 抽出結果は 120 0 となるようにしたいです。 つまり、 ・フィールド1を基準に、フィールド2が全て0だった場合のみ抽出する という条件です。 どのように行えばよいか、お分かりの方お教え下さい。 よろしくお願いいたします。

  • Access2000でデータを抽出したフォームに通し番号を作成しようと

    Access2000でデータを抽出したフォームに通し番号を作成しようとしたら、コントロールソースのデータタブに「集計実行」というメニューがないのですがどうすればよいのでしょうか?

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

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

  • アクセスのデータ集計方法(名寄せ)がわかりません。

    アクセスのデータ集計方法に関する質問で、あるソフトの構造がどうしてもわからなくて質問させて頂きました。 1)ソフトの概要 ソフトはアクセスとエクセルで構成されていて、プログラムはVBAをしようしています。「元データ」(以下に詳細説明)をソフトに読み込んでアクセスで集計し、エクセルでグラフを出力する分析用ソフトです。エクセルのグラフは元々作ってあり、アクセスでデータを集計したものをエクセルのセルにリンクする形式のようです。 2)元データとは 元データとは、Aさん~Eさんがある時点でE・F・Gの3つのお店で商品を購入した際の履歴データで、人物ごとに年齢・品目・金額等のデータが1行で表示されています。従って、AさんがE店・F店で商品を購入している場合は、データが2行で表示されています。分析するには、2行データを1行データにするために「名寄せ」をする必要があります。 3)質問 (1)複数レコードを1つのレコードに集計する(名寄せ)にはどうすればよいのか。 (2)品目と金額から、品目ごとの平均金額を出したい場合など、あるデータとあるデータを選んできて集計させるのは、「クエリ」という機能を使うのでしょうか。 (3)上記との関連ですが、例えば国がホームページ上で公開している複数の既存統計をソフトに読み込んで必要データだけを取り出して集計し、エクセルで作ってあるグラフにデータをリンクさせてグラフを出すようなソフトを作ることは可能なのでしょうか。 情報処理が専門ではないので、わかりにくくて申し訳ないです。 大変困っております、よろしくお願いします。

  • ACCESS2000 ユニオンクエリーで、同一データについて

    こんにちは。 ACCESS2000で、超初心者から初心者に脱皮中です。 倉庫管理の仕事をしています。 各地の倉庫から在庫データを提出してもらい、データ管理を行っています。 データの内容は 倉庫番号, 品番, 品名, 区分, 数量 です。 一括管理のために、各倉庫のデータをユニオンクエリーでつなぎます。 SELECT 倉庫番号, 品番, 品名, 区分, 数量 FROM 倉庫1 UNION SELECT 倉庫番号, 品番, 品名, 区分, 数量 FROM 倉庫2 … UNION SELECT 倉庫番号, 品番, 品名, 区分, 数量 FROM 倉庫7; この中に、たまたますべてのデータが同一のデータが存在しました。 倉庫7,A00,食器洗剤,破損品,1 倉庫7,A00,食器洗剤,破損品,1 要するに、同じ倉庫に同じものが、同じ状態で同じ数量あったということです。 ユニオンクエリーの結果は、この片方しか表示してくれないのです。 同一データであっても並べて表示し、あとでクロス集計等をしたときに、数量2 と表示したいのですが、知恵をお貸しください。 ちなみにすべてのテーブルに、主キー等は設定していません。

  • アクセスの重複データ抽出について

    アクセスで添付画像のようなテーブルがあり、重複データの抽出を行いたいです。 抽出結果は 1 50 4 1 -50 5 1 50 8 5 -70 19 5 70 1 となるようにしたいです。 つまり、 ・フィールド1が同じ 且つ フィールド2の絶対値が等しい ・ただしフィールド2が「0より大きいのみ」 または「0より小さいのみ」 の場合は抽出しない (プラスとマイナスの値が最低1つずつ含まれる) という条件です。 abs関数を使い、フィールド2の絶対値を出すのは出来たのですが、そこから先で行き詰っています。 どのように行えばよいか、お分かりの方お教え下さい。 よろしくお願いいたします。

  • access 日付

    はじめまして。 access(初心者)です。 データを抽出したいのですが、 クエリの抽出条件にどのように条件入力してよいのか 分かりません。 テーブル名:商品マスタ データ  商品No. 開始日   終了日    価格 (1) 100 2008/12/01 2009/06/30 \1,000 (2) 100 2009/07/01 2010/02/01 \1,500 (3) 100 2010/03/01 2010/12/31 \2,000 このテーブルから、例えば、今日=2010/01/04 が含まれているデータを抽出したいのですが。。。 上の例で言うと、答えは(2) 本当すみませんが、教えて下さい。

  • Accessでキーワード検索(抽出)

    Access97で新聞記事のデータベースを作っています。 以下のようなテーブルがメインの非常に単純なものです。 ┌──┬───┬──┬──┐ │日付│見出し│分類│備考│ ├──┼───┼──┼──┤ 新聞記事を日付やキーワードで抽出したいのですが、 キーワード検索がうまく出来ません。 パラメーターで見出し列からデータを抽出したところ、 完全に一致するデータは抽出されるのですが、 「*キーワード*」で一部合致のデータを 抽出することは出来ませんでした。 デザインビューで「抽出条件」に入力すれば 「*キーワード*」でも可能なことは確認しましたが Accessに慣れていない人に操作をさせたいため、できれば キーワード入力を促すフォーム(ダイアログ)表示 ↓ キーワードを入力して抽出 ↓ クエリー、フォーム又はレポートに表示 という手順にしたいのですが、 Accessの機能のみでそういったことはできますでしょうか? VBAを使った方がいいでしょうか?

専門家に質問してみよう