🐕

Excelのオブジェクト、プロパティについて

2023/11/12に公開

VBAの勉強をしてアウトプットしていくシリーズ。

今回から下記サイト「いつも隣にITのお仕事(以下隣IT)」を参考に、請求書をデータ一覧から請求書を自動で作るマクロを作っていきます。

https://tonari-it.com/excel-vba-invoice/#toc8

勉強していく中で、ExcelVBAのオブジェクト?とプロパティ?がよく分からん!!! となったので自分なりのまとめてみます!

今回やること

その前に、今回やることのおさらい。

請求データから、請求書ひな形に転記して目的の請求書を完成させます。

参考サイト様から以下のサンプルファイルをDLして使用してます。

「請求データ」

「請求書ひな形」

「請求データ」には品目、単価、数量、価格が書かれています。

これらを「請求書ひな形」の同項目の場所に転記していくわけですね。

これを学んで、コピペや参照機能を使わず、マクロを使って自動でデータを転記できるようになることを目指します。

データを転記させてみる

まずはシンプルに請求データから請求ひな形にデータを転記させるため、下記コードを入力して実行してみます。

Sub 請求書作成()

'2行目を請求書ひな形に転記
wsTemplate.Cells(21, 1).Value = wsData.Cells(2, 1).Value
wsTemplate.Cells(21, 2).Value = wsData.Cells(2, 2).Value
wsTemplate.Cells(21, 3).Value = wsData.Cells(2, 3).Value

'3行目を請求書ひな形に転記
wsTemplate.Cells(22, 1).Value = wsData.Cells(3, 1).Value
wsTemplate.Cells(22, 2).Value = wsData.Cells(3, 2).Value
wsTemplate.Cells(22, 3).Value = wsData.Cells(3, 3).Value

'4行目を請求書ひな形に転記
wsTemplate.Cells(23, 1).Value = wsData.Cells(4, 1).Value
wsTemplate.Cells(23, 2).Value = wsData.Cells(4, 2).Value
wsTemplate.Cells(23, 3).Value = wsData.Cells(4, 3).Value

End Sub

今回作成したコードでは以下のオブジェクトとプロパティが出てきます。

  • WorkSheetオブジェクト
  • Rangeオブジェクト
  • Cellsプロパティ
  • Valueプロパティ

ではここから本題のオブジェクトとプロパティについてみていきます。

オブジェクト

ExcelVBAでは「ワークブック」「ワークシート」や「セル」など、VBAで操作する対象オブジェクトと言います。

簡単にいうと目に見えるExcelのモノ・部品ですね。

今回出てきたオブジェクトは以下の通り。

WorkSheetオブジェクト

ワークシートを操作する場合のオブジェクト。それぞれ「Sheet1」「Sheet2」という表記で表現することができる。

Rangeオブジェクト

セルを操作する場合オブジェクト。
「A1」など単体のセルだけではなく、「A1:D4」などといったセル範囲も表現することができる。

プロパティとは

プロパティとはオブジェクトの状態や値などの属性を表すものです。

・・・といっても属性ってなんだよ?と思いません?僕はピンときませんでした。

以下のサイト様ではオブジェクトを「ロボット」とするならば、プロパティはロボットでいう「名前」とか「色」とか「大きさ」と表現していました。
この方がまだ分かりやすいかな。

https://it-biz.online/vba/object/

プロパティは以下の書式で表現されます。

オブジェクト.プロパティ

今回出てきたオブジェクトは以下の通り。

Cellsプロパティ
セルを操作するプロパティ。

この段階ではまだ「請求書データ」「Seet1」の「A2」を指定しただけ。

Worksheetオブジェクト.Cells(行番号, 列番号)
Sheet1.Cells(2, 1)

Valueプロパティ

セルの値を取得するプロパティ。

「請求データシート」の値を「請求書ひな形」に転記する場合、コピーするのはRangeオブジェクトではなく、そのセルに入力されている「値」です。

なので、請求書データ」シートの「A2」セルの値を取得する!という場合は以下のように書きます。

書式
Valueプロパティ Rangeオブジェクト.Value

Sheet1.Cells(2, 1).Value '「請求書データ」シートの「A2」セルの値を取得する

Valueプロパティに値を設定する

プロパティは参照するだけでなく、値を設定することもできます。

Rangeオブジェクトの値、つまりValueプロパティを設定するのであれば、以下のように記述します。

Rangeオブジェクト.Value=値

Sheet2.Cells(21,1).Value=Sheet1.Cells(2,1).Value
'Sheet1のA2セルの値を、Sheet2のA21セルの値として設定する。

オブジェクト、プロパティについてまとめ

オブジェクトとプロパティの違いは以下の通りです。

オブジェクト・・・「ワークブック」「ワークシート」や「セル」など、VBAで操作する対象
プロパティ・・・オブジェクトの状態や値などの属性を表すもの。オブジェクトを「ロボット」とするならば、プロパティはロボットでいう「名前」とか「色」とか「大きさ」

とりあえず調べてまとめているうちにモヤモヤが少しずつ整理でき理解が深まりました!

ところで、サンプルのコードでデータの転記が一応できるので完成に見えますが、これだと請求データの品目数が変わる(行が増減する)たびに、コードを書き換える必要があります。

次回から少しずつコードを書き換えていき、見やすく、使いやすいコードを作っていきます。

参考サイト

https://it-biz.online/vba/object/
https://www.239-programing.com/excel-vba/basic/basic018.html
https://excel-ubara.com/excelvba1r/EXCELVBA512.html

Discussion