プロが教える店舗&オフィスのセキュリティ対策術

かなり困っています...
ACCESSからEXCELにデータをエクスポートしたいのですが、ACCESS側の
テーブルの中身すべてをEXCELに吐き出すのではなくて、1レコードづつ
エクスポートしたいのです。

やりたいことは...
ACCESS側のテーブルをEXCELにエクスポートする際、あらかじめ、テーブルの
一つのフィールド(部門コード)を昇順に並べておいて、エクスポートしていきながら、部門コードが変わったら、それまでの部門の金額の合計を出し、その合計もエクスポートして、次の部門に進み、最終的に金額の総合計をだそうと考えています。
この部分をVBAで組もうと考えているのですが...

エクセルのレイアウトを簡単に書くと

部門 100
     名称    金額      
     aaa  1000
     bbb 500
合計         1500
部門 200
     名称    金額      
     ccc  700
     ddd 400
合計         1100

こんな感じです
ちなみにOS WIN98 ACCESS2000,EXCEL2000です
皆様、よろしくお願いします。

A 回答 (2件)

これはOLEの機能を使う必要があります。

下記のサンプルは97用のものですが、恐らく2000でも大丈夫だと思います。また全部載せようとするとかなり長文になるのである程度省略しますね。

Dim XL As Object 'OLE時のExcelアプリ自体
Dim WB As Object 'OLE時のExcelのワークブック
Dim WS As Object 'OLE時のExcelのワークシート
Dim WC As Object 'OLE時のExcelのセル
Dim WR As Object 'OLE時のExcelのセル範囲
Dim lngCol As Long '列
Dim lngRow As Long '行
Dim rsBumon As Recordset
Dim BCD As Long '部門コード比較用

Set XL = CreateObject("Excel.Application")
XL.Application.Visible = True
XL.Application.SheetsInNewWorkbook = 1
XL.Workbooks.Add
XL.ActiveWorkbook.SaveAs FileName:="c:\○○.XLS"
XL.Application.ReferenceStyle = -4150
Set WB = XL.ActiveWorkbook
Set WS = WB.ActiveSheet

Set rsBumon=CurrentDB.OpenRecordset("SQL文又はクエリー名",dbOpenSnapShot)

Do Until rsBumon.EOF
If BCD<>rsBumon("部門") Then
If BCD<>0 Then
'合計の式
#Sum関数内の範囲はどこかでスタート・エンドを覚えておいて、式の文字列を作成して下さい。*行は1行書き込む毎にカウントアップして下さい。#
    WS.Cells(*行,*カラム)="Sum(R1C:R3C)"
End If
   BCD=rsBumon("部門")
WS.Celss(*行,1)=rsBumon("部門")
End If
WS.Cells(*行,1)=rsBumon("名称")
WS.Cells(*行,2)rsBumon("金額")
rsBumon.MoveNext
Loop
rsBumon.Close
'総合計の書き込み
#自分の場合、総合計用の式は、部門毎の小計を出力した行を配列などで保存しておいて、その配列から下記の式を生成しています。#
WS.Cells(*行,*カラム)="=R5C+R8C+R15C"


'保存して終了
XL.Application.ActiveWorkbook.Save
XL.Application.Quit
Set WS = Nothing
Set WB = Nothing
Set XL = Nothing



もっと単純にするのでしたら、同じようなイメージのレポートを作成して(部門でグループ化して)そのレポートを「Excel形式で出力」すれば、同じようなイメージになると思うのですが。
    • good
    • 0

VBAで出来ると思いますが、全部クエリで処理を行ってデータのエクスポート機能で書き出したほうが楽じゃないですか。


もしくは、ピボットテーブル使うのが一番簡単ですね。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!