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.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行でだせますよ。
No.2
- 回答日時:
No.1の回答に対する補足について。
>Dim objCn As New ADODB.Connection
>この部分が青く反転する
エラー内容が不明ですが、まずは参照設定がされていないとなりますよ。
少なくとも以前別の件で『接続』には成功しているのですよね?
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
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 前回ご教授いただいたコードに覚えたてのループ処理で品名りんごAから順に20回for nextでループ 7 2023/01/13 22:01
- Visual Basic(VBA) VBAで、シート間の転記するコードをFOR~NEXTで教えてください。 9 2023/04/30 20:04
- Excel(エクセル) エクセルで年月ごとの売り上げを集計する方法を教えてください 7 2022/06/01 17:06
- Visual Basic(VBA) 【VBA】先月分の取得ができない理由が分かりません。 2 2022/04/24 11:16
- Visual Basic(VBA) Sheet3から2つの条件でオートフィルターで抽出した個数をSheet2へ入力するマクロで、一つ目の 4 2023/01/12 23:40
- Visual Basic(VBA) excel vbaでvlooupの変数がわかりません。 7 2022/05/30 09:35
- Visual Basic(VBA) 列 A に同じ日が2つが必要です。 1 2023/03/28 07:25
- Visual Basic(VBA) ローマ字、ハイフン付きの並び替え ローマ字抽出方法 Excelマクロ 4 2022/04/01 14:10
- Visual Basic(VBA) Sheet2からオートフィルターで売上日を抽出した件数をカウントし、その件数をSheet1のセルB1 2 2023/01/12 12:24
- Visual Basic(VBA) ExcelからAccessのテーブルに書き込む時に時間がかかる 1 2022/10/14 20:38
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
各店舗毎の最大売上の項目を取...
-
SQLでグループ化した結果の件数...
-
SQL文 2つのテーブルから、グ...
-
オラクルSQLの累計値取得方法に...
-
アクセスクエリの計算
-
Excel 2019 のピボットテーブル...
-
Accessのリンクテーブルのパス...
-
DBのタイプの指定とサイズにつ...
-
IT用語について質問です。 以前...
-
accessでのフォームの連携について
-
「直需」の意味を教えてください
-
APN設定について教えていただけ...
-
BIOSでAHCIに設定したいが、項...
-
ACCESSでテーブルのフィールド...
-
Excelで空白以外の値がある列の...
-
エクセルVBAで5行目からオート...
-
Accessでテーブルの値をテキス...
-
accessでの請求管理について
-
あるフィールドの最大値を条件...
-
【Access】フォームで自動計算...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
SQLでグループ化した結果の件数...
-
ORA-01722: 数値が無効です
-
項目名の制限について
-
MySQLで改行を含む文の登録のし...
-
フォームで検索 エラーの表示...
-
オラクルSQLの累計値取得方法に...
-
列名無効について
-
【 困 】 ストアドプロシージャ
-
Accessで期間指定の売上合計と...
-
Accessで複数テーブルのJoin
-
アクセスのクエリについて(前...
-
SQL文 2つのテーブルから、グ...
-
外部結合のSQLの書き方について
-
♪Oracle SQL 処理が成功した時...
-
SQLを教えてください
-
特殊なレコードの取得方法
-
SQLでNOT INと!=ALLの違い
-
各店舗毎の最大売上の項目を取...
-
SQL抽出方法に悩んでいます④
-
改行コードを削除して取得する...
おすすめ情報
\test.xlsx 純粋にBOOK名の名前にしました。
"Excel 12.0;HDR=YES;" ' これは表の一行目をタイトルにするという意味調べました。
後は
activesheetを表示させて
標準モジュールに貼り付け実行
Dim objCn As New ADODB.Connection
この部分が青く反転する
僕の何かが違うわからない