みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。
エクセルVBAで請求データ一覧から請求書を自動で作成する方法をシリーズでお伝えしています。
前回はこちらの記事でした。
請求書マクロの方針と、オブジェクトについて、またセルの値の取得方法についてお伝えしました。
今回注目したいのは、ワークシートです。
実は、ワークシートを取り扱う方法として、「オブジェクト名」で指定する方法というのがあり、知っておくとかなり便利ですので、本記事でお伝えしますね。
なお、本記事は以下のYouTube動画と連動していますので、合わせてご覧ください。
では、いってみましょう!
前回のおさらい
まず、前回のおさらいからです。
エクセルファイルに二つのシートがあり、以下の「請求データ」シートのデータを
以下の「請求書ひな形」シートのA21から先のセル範囲に転記したいというものです。
作成したプロシージャがこちらです。
Sub 請求書作成()
'2行目を請求書ひな形に転記
Sheet2.Cells(21, 1).Value = Sheet1.Cells(2, 1).Value
Sheet2.Cells(21, 2).Value = Sheet1.Cells(2, 2).Value
Sheet2.Cells(21, 3).Value = Sheet1.Cells(2, 3).Value
'3行目を請求書ひな形に転記
Sheet2.Cells(22, 1).Value = Sheet1.Cells(3, 1).Value
Sheet2.Cells(22, 2).Value = Sheet1.Cells(3, 2).Value
Sheet2.Cells(22, 3).Value = Sheet1.Cells(3, 3).Value
'4行目を請求書ひな形に転記
Sheet2.Cells(23, 1).Value = Sheet1.Cells(4, 1).Value
Sheet2.Cells(23, 2).Value = Sheet1.Cells(4, 2).Value
Sheet2.Cells(23, 3).Value = Sheet1.Cells(4, 3).Value
End Sub
それで、Worksheetオブジェクトを表す「Sheet1」「Sheet2」という表現については、さらっと流してしまいましたので、今回解説をしていきます。
ワークシートのオブジェクト名とは
オブジェクト名はワークシートに定められている固有名称のようなもので、コードの中でそれを用いてWorksheetオブジェクトを表現できます。
なお、いわゆるシート名とは別のものです。
オブジェクト名を確認する方法
では、試しに「請求データ」シートのオブジェクト名を確認してみましょう。
まず、プロジェクトエクスプローラーで「Sheet1(請求データ)」を選択した状態で、VBEメニューから「表示」→「プロパティウィンドウ」を選択します。
または F4 キーでもOKです。
すると、「請求データ」シートのプロパティウィンドウが開きます。
ウィンドウ内には「(オブジェクト名)」という項目があり、これがまさにオブジェクト名です。
「Sheet1」と設定されていますね。だから、この名称をそのままプロシージャの中で使えていただのです。
実は、プロパティウィンドウを開かなくても、オブジェクト名を確認できます。
というのも、上記画像の通り、プロジェクトエクスプローラーに「Sheet1(請求データ)」と記載されていますね。
まさに、ここでの表示が
となっているので、こちらで確認するほうが簡単です。
オブジェクト名は、シート名つまりWorksheetオブジェクトのNameプロパティとは全く別モノですので注意して下さいね(2回目)。
オブジェクト名を編集する
さて、オブジェクト名ですがデフォルトでは「Sheet1」とか「Sheet2」といった無味乾燥な名称となっていますが、任意の名称に変更をすることができます。
オブジェクト名を変更するのは簡単で、プロパティウィンドウで「オブジェクト名」の欄にカーソルを当てて編集をするだけです。
編集したオブジェクト名を使用した転記プログラム
では、請求データの転記プログラムを、オブジェクト名を編集したものにしてみましょう。
- 請求データ:wsData
- 請求書ひな形:wsTemplate
とします。
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
シートがどちらなのか、ちょっとわかりやすくなりましたよね。
まとめ
以上、エクセルVBAでワークシートをオブジェクト名で取り扱う方法についてお伝えしました。
シートをオブジェクト名で取り扱うことで
- シートをプロジェクト全体で一意で指定できる
- 宣言やセットなどのステートメントを省ける
といったメリットがあります。
ワークシートを使用する際は、ぜひこの選択肢も利用できるようにしておいてくださいね。
では、次回ですが、このプロシージャを「繰り返し」を用いてスッキリさせていきます。
どうぞお楽しみに!
連載目次:データ一覧から請求書を自動で作る
お仕事において特定のデータ一覧から必要な情報を抽出するということは頻繁にありうると思います。ここではデータ一覧から請求書を作るということを目標に、実務で使えるスキルをまっすぐに身に着けることを目的としています。- 【初心者向けエクセルVBA】データ一覧から請求書を自動で作る
- 【初心者向けエクセルVBA】ワークシートをオブジェクト名で取り扱う方法
- 【初心者向けエクセルVBA】For~Next文で簡潔にプログラムを書く
- 【初心者向けエクセルVBA】行の数をカウントする&不要な行を隠す
- 【初心者向けエクセルVBA】文字列の連結&Format関数での書式変更
- 【初心者向けエクセルVBA】セル範囲を一気にまとめてコピーする方法
- 【初心者向けエクセルVBA】ワークシートのデータのある範囲だけをピッタリ取得する方法
- 【初心者向けエクセルVBA】セル範囲の平行移動をする方法・リサイズをする方法
- 【初心者向けエクセルVBA】日付データから年・月・日を取り出す
- 【初心者向けエクセルVBA】If~Thenを使った条件分岐の超入門
- 【初心者向けエクセルVBA】For~Next文でセル範囲を一行ずつ移動させる
- 【初心者向けエクセルVBA】セル範囲のクリア~ClearContentsメソッドとClearメソッド
- 【初心者向けエクセルVBA】ワークシート・セルを選択する方法の色々について
- 【初心者向けエクセルVBA】入力ダイアログを表示するInputBoxメソッドの使い方
- 【初心者向けエクセルVBA】日付データから月末日と翌月末日を自動算出する
- 【初心者向けエクセルVBA】ワークシートをコピーする方法とそのシート名を変更する方法
- 【初心者向けエクセルVBA】オブジェクトを変数にセットして取り扱う方法
- 【初心者向けエクセルVBA】Openメソッドで新たなブックを開く方法
- 【初心者向けエクセルVBA】現在マクロを書いているブックのフォルダパスを取得する
- 【初心者向けエクセルVBA】開いたブックとそのワークシートをオブジェクト変数にセットする
- 【初心者向けエクセルVBA】ワークブックを別名で保存して閉じる方法
- 【初心者向けエクセルVBA】取引先別に請求書を作成するマクロを作る
コメント
とても素敵です!
ありがとうございます!!
SGOさん
コメントありがとうございます!
嬉しいです!!
仕事で急遽Excelマクロが必要になり、半分パニックの中
(1)から(11)までためさせてもらいました。
一通り感じがつかめました。とてもわかりやすかったです。
ありがとうございました!
おっさんSEさん
コメントありがとうございます!
お役に立てて嬉しいです。
今後ともよろしくお願いいたします!
職場でのマクロ作成にとても参考にさせて頂いております!
ひとつお伺いですが、オブジェクト名での指定とシート名での指定とどちらがおすすめでしょうか?…というとケースバイケースだと思いますが、どういう場合にどちらを使うかとか決めていらっしゃいますでしょうか?
シート名を変更しても良いという点やこちらの頁の通り記述の少なさという点では、オブジェクト名での指定が良いと思いますが、一方で、オブジェクト名という別の管理項目が必要となってしまうこと、また、初級者にはわかりづらいかなと思っており悩んでおります。良いお知恵があれば教えて頂けると幸いです。