ExcelVBA実用講座

第6回 会社の売上げを集計するEExcelVBAその4

引き続き、プログラムソースの内容を説明します。

入力した対象月から売上日の集計範囲を算出する

 下記のプログラムソースは、シートのセルに入力された集計対象月から、売上日の
集計始め(月初)と集計終わり(月末)の日付を算出しています。

'対象月から抽出する売上日の範囲を算出する
    If Len(Worksheets("月間店別売上集計").Cells(1, 1)) > 0 Then
        If IsNumeric(Worksheets("月間店別売上集計").Cells(1, 1)) Then
            If CInt(Worksheets("月間店別売上集計").Cells(1, 1)) >= 1 
              And CInt(Worksheets("月間店別売上集計").Cells(1, 1)) <= 12 Then
                wTuki = CInt(Worksheets("月間店別売上集計").Cells(1, 1))
                If wTuki > Month(Now) Then
                    wNen = Year(Now) - 1
                Else
                    wNen = Year(Now)
                End If
                wHiduke_S = CDate(Format(wNen, "#") & "/" & Format(wTuki, "#") & "/1")
                wHiduke_E = DateAdd("m", 1, wHiduke_S)
                wHiduke_E = DateAdd("d", -1, wHiduke_E)
            Else
                MsgBox "正しい月を入力してください。", vbOKOnly, "エラー"
                Exit Sub
            End If
        Else
            MsgBox "正しい月を入力してください。", vbOKOnly, "エラー"
            Exit Sub
        End If
    Else
        MsgBox "対象月を入力してください。", vbOKOnly, "エラー"
        Exit Sub
    End If

@ Excelシートのセルを操作する

 VBAでは、Excelのシート等の操作対象を「オブジェクト」と呼び、同じ種類のオブジェクトの集まりを「コレクション」と呼びます。
また、オブジェクトに属する性質を「プロパティ」と呼びます。  Excelのシートやセルを操作するには、下記のオブジェクト、プロパティを用います。

Worksheetsコレクションオブジェクト:
  複数のシートの集まりです。シートを特定するには、括弧の中にシート名を記述します。

  構文:  Worksheets("シート名")

Cellsプロパティ:
  シートの中のセルの集まりです。セルを特定するには、2つの構文を使うことができます。

  構文@:  Worksheets("シート名").Cells(行, 列)
  構文A:  Worksheets("シート名").Cells("列行")

各構文の具体的な記述方法は、下図を参照してください。
WorksheetsとCells

このページの先頭へ

A 変数に値を格納する 代入演算子「=」

 変数に値を格納するには、代入演算子「=」を用います。
コンピュータプログラムの世界では、「=」は数学のイコールとは異なった意味で用います。

構文:
  左辺 変数 = 右辺 定数 / 変数 / 式 / 関数

  右辺の値、式の計算結果、関数の戻り値を左辺の変数に格納(代入)する、という意味です。
  数学のイコールではないので、次のような演算も可能です。
      a = a + 1
  これは、変数aの値に1を加えた結果を同じ変数aに格納するという意味です。

このページの先頭へ

B 条件による処理の分岐 「If . . . Else . . . End If」

 与えられた条件によって、異なる処理を行うためには、「If」命令を用います。

構文:
  If 条件 Then
    条件が真の場合に行う処理
  Else
    条件が偽の場合に行う処理
  End If

例:
  If Len(Worksheets("月間店別売上集計").Cells(1, 1)) > 0 Then
    「月間店別売上集計」シートの1行目1列目(A1)のセルに、1文字以上入力されている場合、
    次行を処理します。


  If IsNumeric(Worksheets("月間店別売上集計").Cells(1, 1)) Then
    入力された文字が数字の場合、次行を処理します。

  If CInt(Worksheets("月間店別売上集計").Cells(1, 1)) >= 1 
      And CInt(Worksheets("月間店別売上集計").Cells(1, 1)) <= 12 Then
    入力された数字が1〜12(月を示す)の場合、次行を処理します。

このページの先頭へ

C いろいろな関数

 関数とは、引数で与えられたデータを処理して、結果を出力する命令です。
以下にプログラムで使用されているいろいろな関数について、説明します。

【 Len関数 】
  文字列の長さを取得します。
  構文:文字列の長さ(文字数) = Len(文字列)

【 IsNumeric関数 】
  文字列が数字かどうかを判定します。
  構文:判定結果(True/False) = IsNumeric(文字列)

【 CInt関数 】
  数字の文字列を数値に変換します。
  構文:数値(Integer型) = CInt(文字列)

【 Now関数 】
  コンピュータが保持している現在のシステム日付時刻を返します。
  構文:日付時刻(Date型) = Now

【 Day関数 】
  日付から日を取り出します。
  構文:数値(Integer型) = Day(日付時刻)

【 Month関数 】
  日付から月を取り出します。
  構文:数値(Integer型) = Month(日付時刻)

【 Year関数 】
  日付から年を取り出します。
  構文:数値(Integer型) = Year(日付時刻)

【 CDate関数 】
  日付時刻形式の文字列を日付時刻に変換します。
  構文:日付時刻(Date型) = CDate(文字列)
  ※ 文字列は、日付時刻の形式でなければ、エラーになります。
      ○ 2011/02/15 23:59:59
      × 2011/02/29 23:59:59
      × 2011/02/15 24:59:59

【 DateAdd関数 】
  元の日付時刻に指定した単位の時間を加減した日付時刻を返します。
  構文:日付時刻(Date型) = DateAdd(単位, 時間, 元の日付時刻)
      第1引数(単位):"yyyy"年 "m"月 "d"日 "h"時 "n"分 "s"秒

  例:
    wHiduke_E = DateAdd("m", 1, wHiduke_S)
      日付型変数wHiduke_Sの値に1ヵ月を加えた結果を、日付型変数wHiduke_Eに格納する。

    wHiduke_E = DateAdd("d", -1, wHiduke_E)
      日付型変数wHiduke_Eの値から1日を減じて、wHiduke_Eに格納する。

【 Format関数 】
  数字や日付時刻のデータを指定した形式の文字列に変換します。
  構文:文字列 = Format(データ, 形式)
      第2引数(形式):"#" "000" "#,##0"数字 "yyyy/mm/dd hh:nn:ss"日付時刻

このページの先頭へ

D 文字列を連結する 文字列連結演算子「&」

 文字列を連結するには、文字列連結演算子「&」を用います。

構文:
  変数 / 定数 & 変数 / 定数

例:
  wHiduke_S = CDate(Format(wNen, "#") & "/"  & Format(wTuki, "#") & "/1")
    変数wNen、定数"/"、変数wTuki、定数"/1"を「&」で連結しています。

このページの先頭へ

E 変数の値を比較する

 プログラム中で、条件判定を行うときに、変数の値を比較するには、比較演算子を用い
ます。比較演算子には、次のようなものがあります。

構文:
  左辺 = 右辺
    左辺の値は、右辺の値に等しい。
    ※ 代入演算子と同じ「=」ですが、条件分岐の中で使用されると、イコールの意味に
    なります。


  左辺 <> 右辺
    左辺の値は、右辺の値に等しくない。

  左辺 > 右辺
    左辺の値は、右辺の値より大きい。

  左辺 >= 右辺
    左辺の値は、右辺の値以上である。

  左辺 < 右辺
    左辺の値は、右辺の値より小さい。

  左辺 <= 右辺
    左辺の値は、右辺の値以下である。

例:
  If wTuki > Month(Now) Then    '変数wTukiの値が現在の月より大きい場合、
    wNen = Year(Now) - 1        '変数wNenに前年の値を格納する
  Else                          '上記以外の場合、
    wNen = Year(Now)            '変数wNenに本年の値を格納する
  End If

このページの先頭へ

F メッセージボックスを表示する

 メッセージボックスは、誤った入力が行われたときなどに、警告を表示するのに用います。

構文:
  MsgBox "メッセージ", vbOKOnly, "表題"

  第1引数(メッセージ)に、表示させたいメッセージを入力します。
  第2引数(メッセージのスタイル)は、ここでは「vbOKOnly」(OKボタンのみ)を選択します。
  第3引数(表題)には、表示させたいメッセージ表題を入力します。

例:
  MsgBox "正しい月を入力してください。", vbOKOnly, "エラー"

  下図のメッセージが表示されます。
  WorksheetsとCells

※ 「Yes/No」や「OK/Cancel」など複数のボタンを表示し、それによって処理を分岐させたいときは、
  MsgBox関数を使用します。

(次回に続く)

このページの先頭へ

★ 次回:「第7回 会社の売上げを集計するFExcelVBAその5」は、 引き続きプログラムソースを見ていきます。プログラムによる処理の繰り返しについて詳しく説明します。