Accessお手本データベースのホームへ戻る

オートメーション機能を利用してAccessのデータをExcel経由で編集して印刷するお手本コード集(応用編)

 

6-2-1 AccessからExcelを起動してワークシート上にクロス集計クエリを貼り付けて整形、印刷するサンプルコード集

 

このサンプルデータベースでは、ワークシート上にクエリの結果を貼り付けて、書式を設定したり、罫線を引いて印刷するまでのノウハウをサンプルコード集として紹介します。基礎編でAccessからExcelを起動する方法、ワークシートにレコードセットを貼り付ける方法などを紹介しました。ここでは、基礎編で習得したノウハウを基にクロス集計クエリをワークシートに貼り付けて、整形して印刷するノウハウを紹介します。

 

メニューのリストボックスからアイテムをクリックして、Show Codeボタンをクリックすると、サンプルコードがVBE上に表示されます。Run Exampleボタンをクリックすると、サンプルプログラムを実行しますので、実行結果を確認することができます。

 

メニューからShow Code/Run Exampleボタンをクリックしたときの処理については、基礎編で解説していますのでそちらを参照してください。

 

サンプルデータベース(CH6-2.mdb)では、以下に示すノウハウを習得することができます。

 

◆ クロス集計クエリの作り方

◆ クロス集計クエリをワークシートに貼り付ける方法

◆ ワークシートに作成した表の列合計/行合計を計算する方法

◆ ワークシートに作成した表に格子型の罫線を引く方法

◆ ワークシートに印刷の見出しを設定する方法

◆ ワークシートを印刷する方法

 

   サンプルデータベースで使用するテーブル/クエリを準備するには

 

1 Access を起動したら作業フォルダに、新規データベース CH6-2.mdbを作成します。

 

2 メニューから外部データの取り込みテーブルのリンクをクリックします。リンクのダイアログが表示されたら、Access のサンプルデータベースNorthwind.mdbを選択してリンクボタンをクリックします。(Northwind.mdbは、デフォルトでは”C:\Program Files\Microsoft Office\Office\Samples”にインストールされます。)

 

3 テーブルのリンクのダイアログが表示されたら、すべて選択のボタンをクリックします。最後に、OKボタンをクリックしてリンクを完了させます。

 

6-2-2 Northwind.mdbの全てのテーブルをリンクさせる

 

4 テーブルをリンクしたら、データベースウィンドウにNorthwind.mdbの全てのテーブルが表示されているか確認します。

 

5 データベースウィンドウからクエリをクリックしたら、一覧からデザインビューでクエリを作成するをダブルクリックします。テーブルの表示ダイアログが表示されたら、閉じるのボタンをクリックして閉じます。メニューからSQLのアイコンをクリックして、SQLビューのウィンドウを表示させたら、リスト6-2-1を入力します。(SQLを入力する代わりに、CH6-2.mdbからqry商品区分別売上をインポートしてもよい。)クエリをデザインビューに切り替えたら、図3-2-3のようになっているか確認します。クエリをqry商品区分別売上の名称で保存して閉じます。

 

リスト6-2-1 qry商品区分別売上のSQLコマンド

SELECT 商品.区分コード, 商品区分.区分名, Format([受注日],"yy/mm") AS 受注年月,

[受注明細]![数量]*[受注明細]![単価] AS 金額, 受注.受注日

FROM (商品区分 INNER JOIN 商品 ON 商品区分.区分コード = 商品.区分コード)

INNER JOIN (受注 INNER JOIN 受注明細 ON 受注.受注コード = 受注明細.受注コード)

ON 商品.商品コード = 受注明細.商品コード

ORDER BY 商品.区分コード;

 

6-2-3 qry商品区分別売上をデザインビューで表示した例

 

6 一覧からデザインビューでクエリを作成するをダブルクリックして、SQLビューのウィンドウを表示させたら、リスト6-2-2を入力します。(代わりにCH6-2.mdbqry商品区分別売上クロス集計をインポートしてもよい。)クエリをデザインビューに切り替えたら、図6-2-4のようになっているか確認します。クエリをqry商品区分別売上クロス集計の名称で保存して閉じます。

 

リスト6-2-2  qry商品区分別売上クロス集計のSQLコマンド

TRANSFORM Sum(qry商品区分別売上.金額) AS

SELECT qry商品区分別売上.区分名

FROM qry商品区分別売上

WHERE (((qry商品区分別売上.受注日) Between #1/1/1990# And #12/31/1999#))

GROUP BY qry商品区分別売上.区分コード, qry商品区分別売上.区分名

ORDER BY qry商品区分別売上.区分コード

PIVOT qry商品区分別売上.受注年月;

 

6-2-4  qry商品区分別売上クロス集計をデザインビューで表示した例

 

7 テーブルとクエリの準備が完了したら、Accessを終了させます。

 

 

   クロス集計クエリをワークシートに貼り付けるには

 

1 Accessを起動したら、作業フォルダに作成した CH6-1.mdbを開きます。

 

2 データベースウィンドウが表示されたら、モジュールタブをクリックして新規作成ボタンをクリックします。

 

3 VBEが起動されてモジュールウィンドウが表示されたら、VBEツールメニューから参照設定をクリックします。参照設定のダイアログが表示されたら、参照可能なライブラリファイルからMicrosoft Excel X.0 Object LibraryMicrosoft DAO 3.6 Object Libraryを選択してOKボタンをクリックします。Visual Basic For Application, Microsoft Access X.0 Object Library, OLE AutomationそしてMicrosoft ActiveX Data Object 2.1 Libraryは、既に選択されています。

 

3-2-5 リストボックスからMicrosoft Excel 9.0 Object LibraryMicrosoft DAO 3.6 Object Libraryを選択した例

 

4 モジュールウィンドウにも戻ったらCH6-2.mdbを開いてbasAutomation1Sample1をコピーして貼り付けます。

 

5 VBE表示メニューからイミディエイトウィンドウをクリックして表示させます。イミディエイトウィンドウにSample1を入力したら、リターンキーを押して実行させます。Excelが起動されて、Excelの画面に切り替わります。

 

6-2-6 クロス集計クエリがワークシート上に貼り付けられた例

 

6 WindowsのタスクバーからAccessのアイコンをクリックしてフォーカスを移動します。Hello Sample1のメッセージが表示されていますので、OKボタンをクリックしてExcelを終了させます。

 

7 Sample1basAutomation1の名称で保存して、Access を終了させます。

 

 

Function Sample1()の説明

Sample1では、VBAからExcel を起動して、クロス集計クエリをワークシートに貼り付けます。DatabaseオブジェクトのOpenRecordsetメソッドでクロス集計クエリを開きます。

 

  Set db = CurrentDb

  Set rs = db.OpenRecordset("qry商品区分別売上クロス集計")

 

CreateObject()Excelのインスタンスを生成したらポインタをxlAppに設定します。

 

  Set xlApp = CreateObject("Excel.Application")

 xlApp.Workbooks.Add

 

WorkbooksオブジェクトのAddメソッドでワークシートを追加したら、セル(A1)から右側に列見出しをセットします。For intFld = 0 To .Fields.Count – 1…Nextループで、セルのアドレスをA1,B1,C1,・・・のように順番に変えてフィールド名をセットします。

 

   intRow = 1

   intCol = 1

   For intFld = 0 To .Fields.Count - 1

      xlApp.Cells(intRow, intCol).Value = .Fields(intFld).Name

      intCol = intCol + 1

   Next

 

列見出しをセットしたら、RangeオブジェクトのCopyFromRecordsetメソッドを使用して、セル(A2)を基点にレコードセットの内容をコピーします。

 

   .Range("A2").CopyFromRecordset rs

 

Excelの可視(Visible)プロパティをTrueに設定して、可視状態に切り替えてから、MsgBoxを実行して応答を待ちます。Accessが待ち状態になると、画面がExcelに切り替えられて、ワークシートが表示されます。

 

“Hello Sample1”のメッセージに対してOKボタンをクリックすると、ワークシートを閉じて、Excelを終了させます。

 

 

リスト6-2-3 Sample1()のソースコード

Function Sample1()

'

' 商品区分別売上のレコードセットをワークシート上にコピーするには

'

  Dim db As DAO.Database

  Dim rs As DAO.Recordset

 

  Dim xlApp As Excel.Application

  Dim rngRange As Excel.Range

  Dim rngData As Excel.Range

  Dim rngData2 As Excel.Range

  Dim rngTotal As Excel.Range

 

  Dim intRow As Integer

  Dim intCol As Integer

  Dim intFld As Integer

 

  Set db = CurrentDb

  Set rs = db.OpenRecordset("qry商品区分別売上クロス集計")

  If rs.EOF Then

    Exit Function

  End If

 

  Set xlApp = CreateObject("Excel.Application")

  If xlApp Is Nothing Then

    MsgBox "MS Excel 9.0 is not installed on your computer"

    Exit Function

  End If

 

  DoCmd.Hourglass True

 

  With xlApp

    .Workbooks.Add

      With rs

        ' Accessのフィールド名をExcelのカラムヘッダーとして使用する

        intRow = 1

        intCol = 1

        For intFld = 0 To .Fields.Count - 1

          xlApp.Cells(intRow, intCol).Value = .Fields(intFld).Name

          intCol = intCol + 1

        Next

      End With

     

      ' AccessのデータをExcelA2を基点として取り込む

      .Range("A2").CopyFromRecordset rs

 

      ' Excelを可視状態にする

      .Visible = True

     

      MsgBox "Hello Sample1"

     

      On Error Resume Next

      .ActiveWorkbook.Close False

      .Quit

     

  End With

 

  DoCmd.Hourglass False

 

  rs.Close

  db.Close

  Set rs = Nothing

  Set db = Nothing

  Set xlApp = Nothing

 

End Function

 

Tip

ワークシートにレコードセットのフィールド名をセットするには、For intFld=0 To .Fields.Count – 1…Nextを使用する他に、For Each…Nextを使用する方法があります。fld.Name, fld.Value,fld. Attributesなどのようにフィールドの複数のプロパティを参照するときは、For Each…Nextの方が高速です。

 

Dim fld As DAO.Field

intRow = 1

intCol = 1

For Each fld In .Fields

   xlApp.Cells(intRow, intCol).Value = fld.Name

   intCol = intCol + 1

Next fld

 

 

   ワークシートに作成した表の列合計/行合計を計算するには

 

1 Access を起動したら作業フォルダに作成した CH6-1.mdbを開きます。

 

2 データベースウィンドウが表示されたら、モジュールタブをクリックして新規作成ボタンをクリックします。

 

3 VBEが起動されてモジュールウィンドウが表示されたら、CH6-2.mdbbasAutomation2からSample2をコピーして貼り付けます。

 

4 VBE表示メニューからイミディエイトウィンドウを表示させて、Sample2を実行させます。Excelが起動されてSample1で作成した表の列合計(年月合計)、行合計(区分合計)が計算されます。

 

6-2-7 ワークシートに作成した表の列合計、行合計を計算した例

 

5 フォーカスをAccess に移動すると、Hello Sample2のメッセージが表示されていますので、OKボタンをクリックしてExcelを終了させます。

 

 

Function Sample2()の説明

Sample2では、Sample1で作成した表の受注年月と商品区分の合計を計算します。ActiveSheetオブジェクトのUsedRangeプロパティで表の範囲をrngRangeに設定します。

 

Set rngRange = .ActiveSheet.UsedRange

 

表の合計を計算するには、図6-2-8に示すように、列見出し(受注年月)、行見出し(商品区分名)を除くデータ部分の範囲を求めてrngDataに設定します。rngRangeオブジェクトのOffset(1, 1).Resizeは、セル(B2)を基点に範囲を再設定することを意味します。列見出し、行見出しを除くには、Resize()の引数にrngRangeの行数/列数から1減じた数値を指定します。

 

      Set rngData = rngRange.Offset(1, 1).Resize( _

        rngRange.Rows.Count - 1, _

        rngRange.Columns.Count - 1)

 

rngData.Offset(rngData.Rows.Count).Rows(1)で、受注年月別合計の計算式を埋め込む範囲をrngTotalに設定したら、RangeオブジェクトのFormulaプロパティで計算式(SUM関数)を埋め込みます。rngTotal.Offset(0, -1).Columns(1)で見出しのセルアドレスを求めて、“年月合計”をセットします。

 

     Set rngTotal = _

        rngData.Offset(rngData.Rows.Count).Rows(1)

      rngTotal.Formula = "=Sum(" _

        & rngData.Columns(1).Address(False, False) _

        & ")"

      rngTotal.Offset(0, -1).Columns(1) = "年月合計"

 

商品区分別の合計には、年月合計の行も含めますので、rngData.Rows.Count + 1rngDataの行数に1行加算した範囲をrngData2に設定します。

 

      Set rngData2 = rngData.Offset(0, 0).Resize( _

rngData.Rows.Count + 1, _

        rngData.Columns.Count)

 

rngData2.Offset(0, rngData2.Columns.Count).Columns(1)で、rngTotalに商品区分別合計を表示する範囲を設定したら、RangeオブジェクトのFormuraプロパティで計算式(SUM関数)を埋め込みます。rngTotal.Offset(-1, 0).Rows(1)で、見出しのセルアドレスを求めて“区分合計”をセットします。

 

 

    Set rngTotal = rngData2.Offset(0, rngData2.Columns.Count).Columns(1)

    rngTotal.Formula = "=Sum(" & rngData2.Rows(1).Address(False, False) & ")"

    rngTotal.Offset(-1, 0).Rows(1) = "区分合計"    

 

6-2-8 表の列見出し、行見出しを除くデータの範囲をrngDataに設定

 

 

リスト6-2-4 Sample2()のソースコード(Sample1に追加された部分のみ掲載)

      ' AccessのデータをExcelA2を基点として取り込む

      .Range("A2").CopyFromRecordset rs

 

      ‘--------------------------------------------------------- ここから

      ' rngDataにデータ部分の範囲を設定する

      Set rngRange = .ActiveSheet.UsedRange

      Set rngData = _

        rngRange.Offset(1, 1).Resize( _

        rngRange.Rows.Count - 1, _

        rngRange.Columns.Count - 1)

 

     

      ' 受注年月別の合計を計算する

      Set rngTotal = _

        rngData.Offset(rngData.Rows.Count).Rows(1)

      rngTotal.Formula = "=Sum(" _

        & rngData.Columns(1).Address(False, False) _

        & ")"

      rngTotal.Offset(0, -1).Columns(1) = "年月合計"

     

           

      ' 商品区分別の合計を計算する

      Set rngData2 = _

        rngData.Offset(0, 0).Resize(rngData.Rows.Count + 1, _

        rngData.Columns.Count)

      Set rngTotal = _

        rngData2.Offset(0, rngData2.Columns.Count).Columns(1)

      rngTotal.Formula = "=Sum(" _

        & rngData2.Rows(1).Address(False, False) _

        & ")"

      rngTotal.Offset(-1, 0).Rows(1) = "区分合計"

      ‘--------------------------------------------------- ここまで追加

 

      ' Excelを可視状態にする

      .Visible = True

 


   ワークシートに作成した表に格子型の罫線を引くには

 

1 Access を起動したら、作業フォルダに作成した CH6-1.mdbを開きます。

 

2 データベースウィンドウが表示されたら、モジュールタブをクリックして新規作成ボタンをクリックします。

 

3 VBEが起動されてモジュールウィンドウが表示されたら、CH6-2.mdbbasAutomation3からSample3をコピーして貼り付けます。

 

4 VBE表示メニューからイミディエイトウィンドウを表示させて、Sample3を実行させます。Excel が起動されて、Sample2で作成した表に格子型の罫線を引きます。

 

6-2-9 ワークシートに作成した表に格子型の罫線を引いた例

 

5 フォーカスをAccess に移動すると、Hello Sample3のメッセージが表示されていますので、OKボタンをクリックしてExcel を終了させます。

 

 

Function Sample3()の説明

Sample3では、Sample2で作成した表に格子型の罫線を引きます。ActiveSheetオブジェクトのUsedRangeプロパティで表の範囲をrngRangeに設定します。

 

Set rngRange = .ActiveSheet.UsedRange

 

表に格子型の罫線を引くには、一連のSelection.Bordersプロパティで罫線の線種、格子の角の書式などを設定します。

 

表に格子型の罫線を引いたら、rngRange.Offset(0, 0).Rows(1).Selectで列見出しの範囲を、rngRangeに設定して範囲を選択します。SelectionオブジェクトのHorizontalAlignmentプロパティにxlCenterを設定して、列見出しをセンタリングします。

 

      rngRange.Offset(0, 0).Rows(1).Select

      With .Selection

        .HorizontalAlignment = xlCenter

      End With

 

更に、RangeオブジェクトのAutoFitメソッドを使用して、列見出しの幅を自動調整します。

 

      rngRange.Offset(0, 0).Columns(1).AutoFit

 

RangeオブジェクトのOffset.Resize()プロパティを使用して、rngRangeに設定されている表の範囲から列見出し、行見出しを除いたデータ部分の範囲をrngDataに設定します。rngData.Selectで、表のデータ部分を選択したら、NumberFormatLocalプロパティに金額の書式 "#,##0"を設定します。

 

      Set rngData = rngRange.Offset(1, 1).Resize(

rngRange.Rows.Count - 1, _

        rngRange.Columns.Count - 1)

      rngData.Select

      .Selection.NumberFormatLocal = "#,##0"

 

 

リスト6-2-5 Sample3()のソースコード(Sample2に追加された部分のみ掲載)

      rngTotal.Offset(-1, 0).Rows(1) = "区分合計"

     

      ‘----------------------------------------------------------ここから

      ' 罫線を引く      

      .ActiveSheet.UsedRange.Select

      .Selection.Borders(xlDiagonalDown).LineStyle = xlNone

      .Selection.Borders(xlDiagonalUp).LineStyle = xlNone

   

      With .Selection.Borders(xlEdgeLeft)

        .LineStyle = xlContinuous

        .Weight = xlThin

        .ColorIndex = xlAutomatic

      End With

      With .Selection.Borders(xlEdgeTop)

        .LineStyle = xlContinuous

        .Weight = xlThin

        .ColorIndex = xlAutomatic

      End With

      With .Selection.Borders(xlEdgeBottom)

        .LineStyle = xlContinuous

        .Weight = xlThin

        .ColorIndex = xlAutomatic

      End With

      With .Selection.Borders(xlEdgeRight)

        .LineStyle = xlContinuous

        .Weight = xlThin

        .ColorIndex = xlAutomatic

      End With

      With .Selection.Borders(xlInsideVertical)

        .LineStyle = xlContinuous

        .Weight = xlThin

        .ColorIndex = xlAutomatic

      End With

      With .Selection.Borders(xlInsideHorizontal)

        .LineStyle = xlContinuous

        .Weight = xlThin

        .ColorIndex = xlAutomatic

      End With

     

      Set rngRange = .ActiveSheet.UsedRange

     

      ' 列見出しをセンタリングする

      rngRange.Offset(0, 0).Rows(1).Select

      With .Selection

        .HorizontalAlignment = xlCenter

      End With

     

      ' 行見出しにセルの幅を合わせる

      rngRange.Offset(0, 0).Columns(1).AutoFit

   

      ' 金額の部分を数値型にする

      Set rngData = _

        rngRange.Offset(1, 1).Resize(rngRange.Rows.Count - 1, _

        rngRange.Columns.Count - 1)

      rngData.Select

      .Selection.NumberFormatLocal = "#,##0" 

    ‘ -----------------------------------------------------ここまで追加
 

      ' Excelを可視状態にする

      .Visible = True

 

 

Tip

表に罫線を引くには、Selection.Bordersプロパティを使用する他に、Selction.AutoFormatプロパティを使用する方法があります。AutoFormatプロパティを使用すると、表示形式、フォント、配置、罫線、パターン、幅と高さ等の書式を同時に設定することができます。

 

 

 

Sample3のBordersプロパティをAutoFormatプロパティに置換すると、わずか1行のステートメントを追加するだけで格子型の罫線を引くことができます。AutoFormatの引数Formatで、xlRangeAutoFormatLocalFormat3を指定していますが、これは図の表3のパターンを選択したことを意味します。

 

      ' 罫線を引く

      Set rngRange = .ActiveSheet.UsedRange

        rngRange.Select

        .Selection.AutoFormat  Format:=xlRangeAutoFormatLocalFormat3

       

 

 


   ワークシートに印刷タイトル等のページ情報を設定するには

 

1 Accessを起動したら、作業フォルダに作成した CH6-1.mdbを開きます。

 

2 データベースウィンドウが表示されたら、モジュールタブをクリックして新規作成ボタンをクリックします。

 

3 VBEが起動されてモジュールウィンドウが表示されたら、CH6-2.mdbbasAutomation4からSample4をコピーして貼り付けます。

 

4 VBE表示メニューからイミディエイトウィンドウを表示させて、Sample4を実行させます。Excel が起動されてSample3で作成した表に、印刷タイトル等ページ情報を設定してプレビュー印刷します。プレビュー印刷にタイトル“商品区分別売上”が表示されていることを確認したら、次ページのボタンをクリックして、列見出し/行見出しがページ毎に表示されるか確認します。印刷結果を確認したら、閉じるのボタンをクリックして、プレビュー印刷を閉じます。

 

6-2-11 ワークシートに作成した表に、印刷タイトル等のページ情報を設定してプレビュー印刷した例

 

5 フォーカスをAccess に移動すると、Hello Sample4のメッセージが表示されていますので、OKボタンをクリックしてExcel を終了させます。

 

 

Function Sample4()の説明

Sample4では、Sample3で作成した表に、印刷タイトル等のページ情報を設定してプレビュー印刷します。尚、Sample4では、表に格子型の罫線を引くのにAutoFormatプロパティを使用するように変更しています。

 

ActiveSheetPageSetupプロパティを使用して、行見出し(PrntTitleRows)と列見出し(PrintTitleColumns)のセルアドレスを設定します。

 

      With .ActiveSheet.PageSetup

        .PrintTitleRows = "$1:$1"

        .PrintTitleColumns = "$A:$A"

      End With

 

更に、PageSetupプロパティを使用して、ページヘッダー(CenterHeader)に“商品区分別売上”、ページフッター(CenterFooter)にページ番号がセンタリングされて印字されるように設定します。ページヘッダー/フッターの印字位置は、左(Left)、中央(Center)、右(Right)の3種類の中から選択することができます。

 

      With .ActiveSheet.PageSetup

        .CenterHeader = "商品区分別売上"       

        .CenterFooter = "&P / &N"

      End With

 

最後に、PageSetupプロパティの印刷方向(Orientation)に横(xlLandscape)、用紙サイズ(PaperSize)A4(xlPaperA4)を設定したら、可視(Visible)プロパティをTrueに設定してから、PrintOutメソッドでプレビュー印刷します。

 

      With .ActiveSheet.PageSetup

        .Orientation = xlLandscape

        .PaperSize = xlPaperA4

      End With

      .Visible = True            

      .ActiveSheet.UsedRange.Select

      .Selection.PrintOut Preview:=True, Collate:=True

 

PrintOutメソッドで、プレビュー印刷するときは、必ずExcelを可視状態に変更してから印刷します。Excelが非可視状態のとき、プレビュー印刷するとハングアップした状態になりますので注意してください。

 

 

リスト6-2-6 Sample4()のソースコード

Option Compare Database

Option Explicit

 

Function Sample4()

'

' ワークシートに印刷タイトルを設定するには

'

  Dim db As DAO.Database

  Dim rs As DAO.Recordset

 

  Dim xlApp As Excel.Application

  Dim rngRange As Excel.Range

  Dim rngData As Excel.Range

  Dim rngData2 As Excel.Range

  Dim rngTotal As Excel.Range

 

  Dim intRow As Integer

  Dim intCol As Integer

  Dim intFld As Integer

 

  Set db = CurrentDb

  Set rs = db.OpenRecordset("qry商品区分別売上クロス集計")

  If rs.EOF Then

      Exit Function

  End If

 

  Set xlApp = CreateObject("Excel.Application")

  If xlApp Is Nothing Then

    MsgBox "MS Excel 9.0 is not installed on your computer"

    Exit Function

  End If

 

  DoCmd.Hourglass True

 

  With xlApp

    .Workbooks.Add

      With rs

        ' Accessのフィールド名をExcelのカラムヘッダーとして使用する

        intRow = 1

        intCol = 1

        For intFld = 0 To .Fields.Count - 1

          xlApp.Cells(intRow, intCol).Value = .Fields(intFld).Name

          intCol = intCol + 1

        Next

      End With

     

      ' AccessのデータをExcelA2を基点として取り込む

      .Range("A2").CopyFromRecordset rs

     

      ' rngDataにデータ部分の範囲を設定する

      Set rngRange = .ActiveSheet.UsedRange

      Set rngData = _

        rngRange.Offset(1, 1).Resize( _

        rngRange.Rows.Count - 1, _

        rngRange.Columns.Count - 1)

 

     

      ' 受注年月別の合計を計算する

      Set rngTotal = _

        rngData.Offset(rngData.Rows.Count).Rows(1)

      rngTotal.Formula = "=Sum(" _

        & rngData.Columns(1).Address(False, False) _

        & ")"

      rngTotal.Offset(0, -1).Columns(1) = "年月合計"

     

           

      ' 商品区分別の合計を計算する

      Set rngData2 = _

        rngData.Offset(0, 0).Resize(rngData.Rows.Count + 1, _

        rngData.Columns.Count)

      Set rngTotal = _

        rngData2.Offset(0, rngData2.Columns.Count).Columns(1)

      rngTotal.Formula = "=Sum(" _

        & rngData2.Rows(1).Address(False, False) _

        & ")"

      rngTotal.Offset(-1, 0).Rows(1) = "区分合計"

     

      ' 罫線を引く(AutoFormat方式)

      Set rngRange = .ActiveSheet.UsedRange

      rngRange.Select

      .Selection.AutoFormat _

        Format:=xlRangeAutoFormatLocalFormat3, _

        Number:=False, _

        Font:=False, Alignment:=False, _

        Border:=True, _

        Pattern:=False, _

        Width:=False

     

      ' 列見出しをセンタリングする

      rngRange.Offset(0, 0).Rows(1).Select

      With .Selection

        .HorizontalAlignment = xlCenter

      End With

     

      ' 行見出しにセルの幅を合わせる

      rngRange.Offset(0, 0).Columns(1).AutoFit

   

      ' 金額の部分を数値型にする

      Set rngData = _

        rngRange.Offset(1, 1).Resize( _

        rngRange.Rows.Count - 1, _

        rngRange.Columns.Count - 1)

      rngData.Select

      .Selection.NumberFormatLocal = "#,##0"

     

     

      ' ページのタイトルを設定する

      With .ActiveSheet.PageSetup

        .PrintTitleRows = "$1:$1"

        .PrintTitleColumns = "$A:$A"

      End With

     

     

      ' ページヘッダー/フッターを設定

      With .ActiveSheet.PageSetup

        .LeftHeader = ""

        .CenterHeader = "商品区分別売上"

        .RightHeader = ""

        .LeftFooter = ""

        .CenterFooter = "&P / &N"

        .RightFooter = ""

      End With

 

      ' 用紙サイズと印刷の向き(縦横)設定

      With .ActiveSheet.PageSetup

        .Orientation = xlLandscape

        .PaperSize = xlPaperA4

      End With

 

      ' Excelを可視状態にする

      .Visible = True

     

      ' プレビュー印刷

      .ActiveSheet.UsedRange.Select

      .Selection.PrintOut Preview:=True, Collate:=True

     

      MsgBox "Hello Sample4"

     

      On Error Resume Next

      .ActiveWorkbook.Close False

      .Quit

     

  End With

 

  DoCmd.Hourglass False

 

  rs.Close

  db.Close

  Set rs = Nothing

  Set db = Nothing

  Set xlApp = Nothing

 

End Function

 

ダウンロード (CH6-2.lzh)
Accessお手本データベースのホームへ戻る