• ベストアンサー

エクセルVBにて

お世話になります。 エクセルVBにて、ACCESSのテーブルのデータを SQL分にてエクセルシートに書き出そうとしているの ですが、OpenRecordsetをする時、 エラーメッセージが出てしまいます。 どうすれば書き出せるのでしょうか。 ご教授頂きたくよろしくお願いします。     記 ・記述内容  mySQL = "SELECT 出荷日, 品番, 出荷量"  mySQL = mySQL & " FROM 出荷データTMP"  mySQL = mySQL & " WHERE (((出荷量) <> 0))"  mySQL = mySQL & " GROUP BY 品番, ロケーション, 出荷量;"  Set rs = db.OpenRecordset(mySQL, dbOpenSnapshot) ←ここでエラーが出る ・エラー内容  実行時エラー'3122'  集計関数の一部として指定された式'出荷日'を含んでいないクエリを  実行しようとしました。

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

  • ベストアンサー
  • nda23
  • ベストアンサー率54% (777/1415)
回答No.4

集計関数には次のものがあります。 MAX:最大値 MIN:最小値 SUM:合計 AVG:平均 COUNT:件数 http://homepage2.nifty.com/inform/vbdb/sql_func.htm Accessではこの他にFIRST、LASTなどもありますが、方言なので 一般的なDBシステムでは存在しません。今回の事例では出荷量の 合計なので、SUMを使うところでしょう。

miruchoko
質問者

お礼

何度もご回答頂きありがとうございました。 大変参考になりました。

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

その他の回答 (3)

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.3

>未だ悩んでいます どんなデータを表示したいかです。 そもそもグループ化する必要があるのか疑わしいですね。 むしろ、出荷日と品番でグループ化し、集荷量は出荷日の合計とか いうほうが普通なんじゃないでしょうか。 とりあえず、どのような情報が収録されているか、どのような形式の データが必要かをまとめることが大切です。

miruchoko
質問者

お礼

しつこくて何度もすみません。 >むしろ、出荷日と品番でグループ化し、集荷量は出荷日の合計とか  いうほうが普通なんじゃないでしょうか。 おっしゃる通りです。 グループ化は mySQL = mySQL & " GROUP BY 出荷日, 品番;" その「出荷量」を合計する記述の書き方が分からないで悩んでいます。

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

GROUP BY の指定項目以外(品番、ロケーション、出荷量)以外は 集計関数(MAX、MINなど)を使わなければなりません。 例えば、50人ずつ6クラスのクラス別成績を考えましょう。 クラスでグループ化するとなると、出てくるデータは6件です。 この時、点数はどうしますか?50人の点数の何を出すかです。 最大、最低、合計、平均、・・・こういうのは出せますが、単に「得点」 と言われても困るでしょう。だから集計関数が必要なのです。 尚、AccessをOLE起動して、TransferSpreadsheetを実行する方が ずっと、高速です。データ量が多い場合は注意が必要です。 但し、Accessがインストールされていない場合はできません。

miruchoko
質問者

お礼

ありがとうございます。 その後、色々調べて見たのですが、 未だ悩んでいます。 >GROUP BY の指定項目以外(品番、ロケーション、出荷量)以外は >集計関数(MAX、MINなど)を使わなければなりません。 具体的にどの様な記述をすれば宜しいでしょうか。 お教え頂きたくよろしくお願い致します。

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

GROUP BYに含まれない、かつ演算処理も指定していないフィールド「出荷日」をSELECTで抽出しようとしているためでしょう。「出荷日」でもグループ化するよりないと思います。下記は、試しにAccessでやってみたSQLです。ご参考まで。 SELECT 出荷データTMP.出荷日, 出荷データTMP.品番, 出荷データTMP.出荷量 FROM 出荷データTMP GROUP BY 出荷データTMP.出荷日, 出荷データTMP.品番, 出荷データTMP.出荷量, 出荷データTMP.ロケーション HAVING (((出荷データTMP.出荷量)<>0));

miruchoko
質問者

お礼

ありがとうございます。 「出荷日」もグループ化して見ました。 すると今度は違うエラーが発生しました。 実行時エラー'3601' パラメータが少なすぎます。2を指定してください。 と出ます。 どうしていいものやら、困っています。 ご教授頂きたく宜しくお願いいたします。

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

関連するQ&A

  • VB,SQL文のWHERE句について

    お世話になります。 エクセルVBにて、ACCESSのテーブルのデータを SQL分にてエクセルシートに書き出そうとしているの ですが、WHERE句の記述方法がおかしいのかエラーになっ てしまいます。(下記の「A9999」(データ型はテキスト 型)のところでエラーになります。 どの様な記述をすれば宜しいのでしょうか。 ご教授頂きたくよろしくお願いします。     記 ・記述内容  mySQL = "SELECT 出荷日, 品番, ロケーション, SUM(出荷量) AS 出荷量の合計"  mySQL = mySQL & " FROM 出荷データTMP"  mySQL = mySQL & " WHERE (((ロケーション) <> "A9999"))"  mySQL = mySQL & " GROUP BY 品番, ロケーション, 出荷量;"  Set rs = db.OpenRecordset(mySQL, dbOpenSnapshot)

  • Accessで定型フォーマットのExcel出力エラーについて

    こんにちは。誰か助けて下さい。 職場で、Accessを使用しシステムを作成しています。 昨日から、Excel出力時にエラーが出て、途中で止まってしまいます。 OS:XpPro、Office:XpProです。SQLServer2000を使用しています。 自分以外の端末では、通常通りに出力が出ます。 クエリーをそのままExcel出力することはできますが、特定のフォーマットに指示して出力することができなくなりました。 デバックでストップするところは、****の行です。 エラー内容は、【実行時エラー'430':クラスはオートメーションまたは予測したインターフェースをサポートしていません。】です。 長くなりますが、お願いいたします。 --抜粋-- '指定されたExcelシートに上書き Set xlApp = CreateObject("Excel.Application") Set xlBook = xlApp.Workbooks.Open(FileName:=テンプレートファイル名) Set xlSheet = xlBook.Worksheets("Data_Area") sql = "SELECT * FROM tmp_tableA" Set rst = CurrentDb.OpenRecordset(sql, dbOpenSnapshot, dbReadOnly) xlSheet.Range("A3").Clear '*********下行で止まります。********** xlSheet.Range("A3").CopyFromRecordset rst '*************************************

  • 4万件程度の散布図を作成したいが、エクセルでは、255までしか作成できず困ってます

    エクセルの散布図作成で困っています。 散布図を作成しようと思っております。 4万件のアイテムごとに 2つのデータをもっております。 アイスクリーム 累計出荷量 3 標準偏差0.06 チョコ       〃   11   〃 0.03 と入った内容です。 それを Y軸に累計出荷量 X軸に標準偏差 と置く散布図を作成したいと思っていますが、 列ごとにプロットしようとすると、エクセルでは255までしか 表示できませんとエラー表示されてしまいます。 相当困っております。エクセルでなくても、他のソフトを利用すると出来るという内容でも結構です。 どのようにすれば、実現できるかぜひ教えてください。

  • VBで、エクセルファイルを操作

     VBでデータを使いエクセルのファイルを操作したいんですが、ファイルの場所を変えるとエラーが出てしまいます。 HTMLみたいに階層型(?)みたいに実行EXEがあるディレクトリ内のエクセルのファイルを操作させるような方法を教えてください。 (エクセルからも操作できるようにしたい)

  • ExcelのVBについて

    質問させて頂きます。 今エクセルのVBEで会社の図面管理できるものを作っています。 図面自体をフォームにimage表示させると拡大したりして見る事が出来ないので、 図面表示ボタンでペイントソフトを立ち上げるようにしたいと思っています。 モノとしてはセルA2に品番(これをコンボボックスで検索できる) その品番に紐付く図面保存場所としてC:\***\123.jpgというデータをセルB2に入力してあります。 ボタン押したイベントとして Shell "MSPEINT C:\***\123.jpg",vbNormalFocus としてペイントでその図面が表示されるまでには出来ました。 が、当然表示させる図面が毎回同じではないので 呼び出した品番ごとに表示させる図面画像が違うようにしたいのですが 呼び出した品番の図面情報をうまく表示できずに困っています。 現在のコードは Dim zumen As String Dim Trgt As Long Trgt = ComboBox1.ListIndex zumen = Cells(Trgt + 2,3)'図面保存場所の書いてあるセルB2を変数zumenに代入 Shell "MSPEINT zumen",vbNormalFocus これで表示されると思ったのですが、ドキュメントセッティング内を探しに行っているらしく、 そこにその画像が無いというエラー表示が出ます; MsgBox zumen とするとちゃんと図面の保存場所をC:\から表示するのですが それをMSPAINTの後にくっつけるとうまくいきません。。; どなたかご存じな方おられましたら是非ご教授下さいませm(__)m 質問内容がわかりにくく申し訳ありませんが宜しくお願いします。

  • エクセルのデータ入力で困っています。

    会社でのエクセルのデータ入力で困っています。 得意先から発注データ(エクセル)と倉庫会社からの在庫データ(エクセル)を当社の出荷データ表(エクセル)に入力しています。 毎週やっているのですが、データ数が多くミスが多いので、 困っています。また、ひとつの品番で色がたくさんあり、発注データと在庫データでは順番が異なっており、間違いの原因になりやすいです。 どうすれば、ミスを減らせるか教えてください。

  • VB5.0 スプレッドシート3.0Jでのエクセルエクスポート不具合

    開発環境VB5.0 スプレッドシート3.0Jでのエクセルエクスポートで、 大容量のシート内容をスプレッド関数(ExportToExcel)で出力しようと すると、「ExportToExcelメソッドは失敗しました」とエラーが出てしまい、 エクセル出力できません。 比較的データ量の少ないシートを出力することはできますが、大きいシート を出力しようとするとエラーで落ちるようです。 この不具合を回避することはできないでしょうか?

  • エクセルの重複してないデータ抽出について

    エクセル初心者です。 重複をしていないデータ抽出について教えて頂きたいです。 業務にて、データの抽出を行いたいのです。 毎日(月曜から金曜まで)出荷予定リストをエクセルのファイルでもらいます。 毎日ファイルの入力内容は更新されています。 ファイル名は海外20120710(20120710は日付けです)、海外20120711,海外20120712と毎日ファイルをもらい、印刷し、目でデータの照合(データが増えたり、削除されたり)をしています。月曜日にもらったファイルと火曜日のファイルを照合、火曜日と水曜日、水曜日と木曜日、木曜日と金曜日。又は月曜日と火曜日、月曜日と水曜日、月曜日と木曜日、月曜日と金曜日という感じで作業を行っているのです。ファイルを印刷すると大体A4用紙2枚で収まるデータ量です。(約200行程度)。この目でデータの照合するという作業は非効率で、漏れが発生してると考えているのですが、関数等を使い効率を上げたいと思います。 海外20120710ファイルのsheet1に内容が入力されています。 A1に出荷予定リスト A2に日付。B2に受注番号。C2に品目コード。D2に品番。E2に数量。F2に備考と項目があります。 データの量としては約200行です。 更新される内容は、受注の増減、数量変更、納期変更、等です。 月曜日のファイルと火曜日のファイルを比較し、重複していないデータを抽出し、更新内容を確認したいです。 何かいい方法はないでしょうか? 説明文章が下手でスミマセン><

  • Excelマクロで元データを簡潔な表に整形したい

    Excelマクロで実現させたいのですが、どのようにすれば 良いのか悩み中です。 下記のような【ベース】の表を【整形後】に一覧表に したいと思っています。 記入条件 品番が同じであっても出荷日が違う場合はそれぞれ記入する 品番と出荷日が同じであれば出庫数を足して記入する これを実現させるにはどのような手順?でマクロを組めば 良いでしょうか?どなたか助けて下さい。 【ベース】 品番  品名   出庫数  出荷日 A-01  りんご   10   2/21 A-01  りんご   10   2/27 A-02  もも    10   2/21 A-02  もも    15   2/21 【整形後】 品番  品名   出庫数  出荷日 A-01  りんご   10   2/21 A-01  りんご   10   2/27 A-02  もも    25   2/21

  • access フォームを使ったコーディングについて

    AccessVBA超初心者のため、内容に不備があるかも知れませんが、、教えてください。 やりたいこと:フォームボタンを利用して、 Aテーブル(マスター)に対して、Bテーブルの内容を isnert、もしくはupdateしたい。その際、Aテーブルに既にあるものは、update。Aテーブルにないものはinsertとする。 例: Aテーブル    Bテーブル     joe 20歳     joe 21歳     james 30歳    janet 19歳        ↓    joe 21歳    james 30歳    janet19歳 としたい。というような内容です。 そこで、まず、 'MySQL = "SELECT * FROM A INNER JOIN B ON (A.名前=B.名前) " Set rst = db.OpenRecordset(MySQL, dbOpenSnapshot) ' --- B をやって、ここで該当したものはupdateをかけようと思ったのですが、さっそくつまずき、このクエリ自体が実行エラーになってしまいました。 また、この後の問題なのですが、updateはこれで該当したものをすればよいと思うのですが、新規のinsertはどうやったらよいでしょう・・。 漠然としていて申し訳ないのですが、よいサンプル等がみつからず困ってしまいました。。何かよいアドバイス、もしくは、よいサンプルのおいてある場所等をご存知の方がいたら教えていただけると助かります。 どうぞよろしくお願いします。