【VBA初心者向け】販売データから請求書を自動作成する

Excel VBA
beautiful foggy background. country road down in the valley trees on hill in the mist

請求書ひな形と販売データを準備します

2種類のシート「請求書ひな形(Sheet1)」と「販売データ(Sheet2)」が準備されています。

請求書ひな形はこちら。

販売データはこちらになります。

販売データを請求書ひな形に転記するプログラム

VBEを開いて、下のプログラムを記入して実行してください。

Sub 請求書作成()

    '2行目を請求書ひな形に転記
    Sheet1.Cells(13, 1).Value = Sheet2.Cells(2, 1).Value
    Sheet1.Cells(13, 2).Value = Sheet2.Cells(2, 2).Value
    Sheet1.Cells(13, 3).Value = Sheet2.Cells(2, 3).Value
    
     '3行目を請求書ひな形に転記
    Sheet1.Cells(14, 1).Value = Sheet2.Cells(3, 1).Value
    Sheet1.Cells(14, 2).Value = Sheet2.Cells(3, 2).Value
    Sheet1.Cells(14, 3).Value = Sheet2.Cells(3, 3).Value
    
     '4行目を請求書ひな形に転記
    Sheet1.Cells(15, 1).Value = Sheet2.Cells(4, 1).Value
    Sheet1.Cells(15, 2).Value = Sheet2.Cells(4, 2).Value
    Sheet1.Cells(15, 3).Value = Sheet2.Cells(4, 3).Value
    
End Sub

ここで行われている操作は、セルの値の転記のみです。

VBAが実行された結果がこれになります。

ワークシートとセルはオブジェクトと呼ばれます。

VBAでは操作の対象となる「セル」や「ワークシート」などをオブジェクトと呼びます。

覚えておいてください。

今回のオブジェクト

  1. 「請求書ひな形」シート
  2. 「販売データ」シート
  3. 「請求書ひな形」シートのセル
  4. 「販売データ」シートのセル

ワークシートを表すワークシートオブジェクト

1と2は、ワークシートを表しますので「ワークシートオブジェクト」になります。

Sheet1(請求書ひな形)とSheet2(販売データ)ですね。

セル範囲を表すRangeオブジェクト

単体のセルも複数のセルを表すセル範囲も「Rangeオブジェクト」になります。

「A1」も「A1:B2」も「Rangeオブジェクト」です。

Cellsプロパティ

エクセルにはセル番地を表現する2種類の方法がありますね。

一般的な

R1C1参照形式と称される

の2種類です。

Rangeオブジェクトにも2種類のプロパティ(属性)があります。

RangeプロパティCellsプロパティです。

今回はCellsプロパティを使用しています。

理由は後程明らかになりますが、繰り返し処理が簡単に出来るからです。

Cellsプロパティの値

Cellsプロパティを用いる際、

Cells(13, 1)

とだけ書いただけでは不十分です。

MsgBox Cells(13, 1)

下のようになり何も表示されません。

Cellsプロパティの前にSheet1とワークシートオブジェクトを加えると正しく表示されます。

Sheet1.Cells(13, 1)

注意しましょう。

MsgBox Sheet1.Cells(13, 1)

Worksheetオブジェクト.Cells(行番号, 列番号)
行番号と列番号はr1c1参照形式で数字を入れます。
今回は、Cellsプロパティのみで正しく表示されましたが、Cellsプロパティの値取得には厳密にいうと後に「.Value」を加える必要があります。
 
Sheet1.Cells(13, 1).Value
 
なぜなら、値には「.Text」や「.Value2」等他の値があるからです。
ややこしい話ですが、ここでは「.Value」を加える必要があると覚えて置いてください。
 
MsgBox Sheet1.Cells(13, 1).Value

まとめ

ここでは

  • オブジェクトとは何か
  • ワークシートを表すWorksheetオブジェクト
  • セル及びセル範囲を表すRangeオブジェクト
  • Rangeオブジェクトは前にWorkSheetsオブジェクトを付ける必要がある
  • Cellsプロパティでセルの位置を取得出来る
  • CellsプロパティにはValueプロパティを後ろに追記して値を正しく取得できる

等を学びました。

コメント