NO 社員No 日付 商品コード 販売個数 顧客No 請求月 売上
1 106092 2009/2/2(月) A-1010 89 C202 2009/4/30 3,560
2 106091 2009/2/2(月) B-1050 527 C384 2009/3/31 68,510
3 106045 2009/2/2(月) C-1050 819 C384 2009/3/31 114,660
4 106753 2009/2/2(月) C-1080 662 C202 2009/4/30 66,200
5 104523 2009/2/2(月) A-1010 160 C499 2009/4/30 16,000
6 106785 2009/2/2(月) D-1050 815 C202 2009/4/30 97,800
7 105412 2009/2/2(月) A-1010 373 C165 2009/3/31 41,030
8 155722 2009/2/2(月) B-1020 62 C165 2009/3/31 6,200
9 132547 2009/2/2(月) A-1150 486 C165 2009/3/31 38,880
この売上げ Sheetデータを別シート集計にSQLにて
抽出したい。
条件は A-1010 売り上げの合計
抽出先は別シート集計
SELECT 社員No 商品コード 売上合計 FROM テーブル名 ここからわからい
Sub Excelに接続()
Dim myCon As New ADODB.Connection, FileName As String
Dim conStr As String
'接続先のExcelファイル
FileName = "C:\Users\.....\Desktop\DataBook.xlsx"
'接続文字列
conStr = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Extended Properties=Excel 8.0;" & _
"Data Source=" & FileName
ここから教えてくれませんでしょうか
よろしくお願いいたします。
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.3
- 回答日時:
No.1の参照設定を省くコードです。
新しいBookでテストする時に参照設定のし忘れをしがちならこちらでも。
Sub test_2()
Dim objCn As Object '★参照設定なし版
Dim objRS As Object '★参照設定なし版
Dim i As Integer
Dim strSQL As String
Set objCn = CreateObject("ADODB.Connection") '★参照設定なし版
Set objRS = CreateObject("ADODB.Recordset") '★参照設定なし版
With objCn
.Provider = "Microsoft.ACE.OLEDB.12.0"
.Properties("Extended Properties") = "Excel 12.0;HDR=YES;" '★HDR(ヘッダー)の扱いに注意
.Open ThisWorkbook.Path & "\test.xls" '★ブック名.拡張子に注意
End With
strSQL = ""
strSQL = strSQL & " SELECT 社員No,商品コード,SUM(売上) AS 売上合計"
strSQL = strSQL & " FROM [Sheet1$]" '★シート名に注意!
strSQL = strSQL & " WHERE 商品コード = 'A-1010'"
strSQL = strSQL & " GROUP BY 社員No,商品コード,売上;"
Set objRS = objCn.Execute(strSQL)
With ActiveSheet '★ActiveSheetを使用
.Range(.Range("A2"), .Range("A2").SpecialCells(xlLastCell)).ClearContents
For i = 0 To objRS.Fields.Count - 1
.Cells(1, i + 1).Value = objRS.Fields(i).Name
Next
.Range("A2").CopyFromRecordset objRS
End With
objCn.Close
Set objCn = Nothing
Set objRS = Nothing
End Sub
No.2
- 回答日時:
No.1の回答に対する補足について。
>Dim objCn As New ADODB.Connection
>この部分が青く反転する
エラー内容が不明ですが、まずは参照設定がされていないとなりますよ。
少なくとも以前別の件で『接続』には成功しているのですよね?
No.1
- 回答日時:
>SELECT 社員No 商品コード 売上合計 FROM テーブル名
この場合、『社員No』と『商品コード』を対にして『売上』の合計をだすので、
>条件は A-1010 売り上げの合計
『商品コード』毎の『売上の合計』は出せないと思います。
-----結果-----
社員No 商品コード 売上合計
104523 A-1010 16000
105412 A-1010 41030
106092 A-1010 3560
------------
取り敢えずそこは置いておくとして、まずtest.xlsを実行するBookと同じフォルダに置き
アクティブシートに結果を出すと言う極基本からやるとします。
質問者さんが見ていた
http://excel-ubara.com/excelvba5/EXCEL114.html
ここを参考に
---
※Excel2007以降では、
.Provider = "Microsoft.ACE.OLEDB.12.0"
.Properties("Extended Properties") = "Excel 12.0"
---
これを古い2002に押し込んだコードです。
Sub test()
Dim objCn As New ADODB.Connection
Dim objRS As ADODB.Recordset
Dim i As Integer
Dim strSQL As String
With objCn
.Provider = "Microsoft.ACE.OLEDB.12.0"
.Properties("Extended Properties") = "Excel 12.0;HDR=YES;" '★HDR(ヘッダー)の扱いに注意
.Open ThisWorkbook.Path & "\test.xls" '★ブック名.拡張子に注意
End With
strSQL = ""
strSQL = strSQL & " SELECT 社員No,商品コード,SUM(売上) AS 売上合計"
strSQL = strSQL & " FROM [Sheet1$]" '★シート名に注意!
strSQL = strSQL & " WHERE 商品コード = 'A-1010'"
strSQL = strSQL & " GROUP BY 社員No,商品コード,売上;"
Set objRS = New ADODB.Recordset
Set objRS = objCn.Execute(strSQL)
With ActiveSheet '★ActiveSheetを使用
.Range(.Range("A2"), .Range("A2").SpecialCells(xlLastCell)).ClearContents
For i = 0 To objRS.Fields.Count - 1
.Cells(1, i + 1).Value = objRS.Fields(i).Name
Next
.Range("A2").CopyFromRecordset objRS
End With
objCn.Close
Set objCn = Nothing
End Sub
-----
接続先のBookのPathは ThisWorkbook.Path ですけど、この点は理解OKでしょうかね。
SQL文のSELECTの中から『社員No』 と GROUP BYの中ら『社員No』『売上』を抜けば、純粋に『商品コード(A-1010)』の『売上合計』が1行でだせますよ。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
項目名の制限について
-
オラクルSQLの累計値取得方法に...
-
フォームで検索 エラーの表示...
-
ORACLEのUPDATEについて...
-
列名無効について
-
DB設計
-
Excel 2019 のピボットテーブル...
-
「直需」の意味を教えてください
-
セルの右クリックで出る項目を...
-
Accessクエリでの、LIKE条件
-
accessのレポートで元になるテ...
-
FROM の中で CASE を使えるでし...
-
アクセス エラーを数値「0」に...
-
INSERT INTO ステートメントに...
-
Accessでテーブル名やクエリ名...
-
エクセルVBAで5行目からオート...
-
Access テキスト型に対する指定...
-
Accessのクエリでデータの入力...
-
異なるサーバのDBデータ同士を...
-
【Access】フォームで自動計算...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
項目名の制限について
-
SQLでグループ化した結果の件数...
-
ORA-01722: 数値が無効です
-
MySQLで改行を含む文の登録のし...
-
改行コードを削除して取得する...
-
フォームで検索 エラーの表示...
-
SQL文の書き方
-
Accessで期間指定の売上合計と...
-
データベースから抽出した一覧...
-
列名無効について
-
オラクルSQLの累計値取得方法に...
-
SQL抽出方法:売上Tを集計した...
-
SQL文 2つのテーブルから、グ...
-
集計のSQLをお教え下さい
-
SQLを教えて下さい
-
縦表示データを列として取得す...
-
SQLでNOT INと!=ALLの違い
-
インサート文での条件の指定に...
-
SQL抽出方法に悩んでいます② 続...
-
他のテーブルの抽出条件で更新...
おすすめ情報
\test.xlsx 純粋にBOOK名の名前にしました。
"Excel 12.0;HDR=YES;" ' これは表の一行目をタイトルにするという意味調べました。
後は
activesheetを表示させて
標準モジュールに貼り付け実行
Dim objCn As New ADODB.Connection
この部分が青く反転する
僕の何かが違うわからない