VBAでオリジナルな領収書の作成に、エクセルのデータを反映します。

ryousyudataeyecatcha

エクセルVBAを使って独自に作った領収書に、発行情報をまとめた一覧表からのデータを反映させます。
こうすれば、その一覧表のデータ内容を変更するだけで簡単に登録修正や再発行ができるようになります。

 

こんにちは、じゅんぱ店長(@junpa33)です。

 

今回の記事は”発行データ入力”シートを作成し、

入力されたデータを領収書テンプレートの表示に関連付けをしていきます。

 

前回の記事を確認された上で読み進めて頂くと分かり易いかと思います。

<<<進む前に前の記事を読み返す<<<

エクセルで自作の領収書、印鑑を自動で挿入する。VBAで問題を解決!

 

領収書作成についての関連記事はこちらになります。

「領収書作成」の記事一覧を開く

 

オリジナル領収書にデータを反映させる
入力シートを作成します

 

それでは、発行データ入力シートを作成していきます。

Sheet名を変更します

 

”Sheet2”というシート名を”発行データ入力”という名前に変更します。

シート名は前回も変更しましたので、同じ方法で作業してください。

変更方法はこの記事を参考にしてください。『Sheet(シート)名の変更』へ

 

このようになります。

hakkoudata001

 

 

 データ入力の一覧表を作ります

 

A列からH列まで1行目に項目名を書いていきます。

セルA1・・・伝票番号(発行通番)  セルB1・・・作成年月日

セルC1・・・宛名1(社名組織名)  セルD1・・・宛名2(発行先名)

セルE1・・・領収金額        セルF1・・・消費税

セルG1・・・但し書き        セルH1・・・発行済

 

ビジュアル的にはお好みに合わせて設定してください。

 

このような感じになります。

hakkoudata002

 

後は罫線など適当に引いていただいてもOKです。

エクセルでよく使う関数は各セルには埋め込みません誤って関数式を消してしまうこともありません。

先頭行の項目表示以外は、”すべてのセル”は空のままです。

データの入れ方は、今配置したこの項目に合ったデータを記入するということです。

 

領収書にデータを反映させるVBAを組んでいきます

 

ここでは、本体のVBAを組み上げていきます。

 

MEMO
領収書作成のエクセルVBA全コードを確認することが出来ます。

オリジナルな領収書作成のエクセルVBA モジュール記述の全コード集

 

まず手始めに入力されたデータを、領収書テンプレートに表示させるところから始ます。

 

VBE(ビジュアルベーシックエディター)を起動する

 

MEMO

エクセルVBA初めての起動についてはこちらの記事が参考になります。

エクセルVBA 始めての起動。VBEの立ち上げ、保存と終了

 

”開発タブ”から”Visual Basic”をクリックしてVBエディターのウインドウを開いてください。

開いたウインドウの”挿入”タブから”標準モジュール”をクリックします。

hakkoudata003_1a

 

このようになります。

hakkoudata004

 

VBAコードの記述方法

 

コードウインドにVBAコードを記述していきますが、記述方法にはルールがあります。

「Sub ・・・・・ End Sub」の中でコードを記述していきます。

詳しくは、記述方法を皆さんで調べてください。

コード
Sub プロシージャー名()

    本文

End Sub

大雑把にこのような記述様式です。

変数とは、発行データ入力シートの各項目のデータになります。(それぞれの領収書で金額などが変わります。)

セルA1・・・伝票番号(発行通番)→ aN
セルB1・・・作成年月日 → aDay
セルC1・・・宛名1(社名組織名など)→ aCusa
セルD1・・・宛名2(発行先名) → aCusb
セルE1・・・領収金額 → aBill
セルF1・・・消費税 → aTax
セルG1・・・但し書き → aNote
セルH1・・・発行

と変数名を付けます。

ここまでの内容をコードとして記述します。

コード①

コード
Sub 領収書作成()
  Dim aN As Long
  Dim aDay As String
  Dim aCusa As String
  Dim aCusb As String
  Dim aBill As Long
  Dim aTax As Long
  Dim aNote As String
  Dim anum As Integer
  Dim aBilln As String

 

領収書表示データを変数としてコード化する

 

次に、発行データ入力シートの「どの顧客の分の領収書を作るのか」を指定する方法ですが、

入力シートで、伝票番号(発行通番)をクリックすることで作成を決定できるようにします。

例えば「伝票番号0001番をクリックすれば、そのお客様の領収書を発行できる」ようにします。

エクセルVBAでは今この時、カーソルが掴んでいる(置かれている)セルのことをアクティブなセルと言います。

そしてその位置(行と列番号)をプログラムコードに利用することができます。

その位置は、領収書発行の度に変わりますので、先ほどと同じように変数で表示することができます。

アクティブセルの行番号を変数aRとすると、aR=ActiveCell.Row と表示できます。

さらには、

そのアクティブセルは、どのシート名での動きを言っているのかをプログラムに示す必要があります。

そのことを Worksheets(”発行データ入力”).Select と指定します。

 

したがって、今指定した、発行したい領収書のデータは、

発行データ入力シートでの作業で ・・・ Worksheets(“発行データ入力”).Select

アクティブセルのあるaR行のA列の伝票番号 ・・・ aN = Range(“A” & aR).Value

アクティブセルのあるaR行のB列の作成年月日 ・・・ aDay = Range(“B” & aR).Value

アクティブセルのあるaR行のC列の宛名1 ・・・ aCusa = Range(“C” & aR).Value

アクティブセルのあるaR行のD列の宛名2 ・・・ aCusb = Range(“D” & aR).Value

アクティブセルのあるaR行のE列の領収金額 ・・・ aBill = Range(“E” & aR).Value

アクティブセルのあるaR行のF列の消費税 ・・・ aTax = Range(“F” & aR).Value

アクティブセルのあるaR行のG列の但し書き ・・・ aNote = Range(“G” & aR).Value

となります。

Rangeはセル位置の指定方法、Valueは値と覚えてください。

ここまでの内容をコードとして記述します。

コード②

コード
    Worksheets("発行データ入力").Select
    aR = ActiveCell.Row
    aN = Range("A" & aR).Value
    aDay = Range("B" & aR).Value
    aCusa = Range("C" & aR).Value
    aCusb = Range("D" & aR).Value
    aBill = Range("E" & aR).Value
    aTax = Range("F" & aR).Value
    aNote = Range("G" & aR).Value

 

SELECTとActiveをもう少し詳しく説明しています。
VBA 似た者SelectとActivateの違いを最速に理解

 

変数の値を領収書テンプレートに表示する

 

発行データから取り出したそれぞれの変数を、領収書テンプレートに表示させていきます。

 

ここでは、注意しなければならないことがあります。

 

領収書に表示される金額についてですが、税込み価格、本体価格、消費税額の3種類あります。

しかし発行データシートには本体価格のデータがありませんので、領収書を作成する都度計算して表示させる必要があります。

同時に消費税額が0円の場合は税込み価格になりますのであえて本体価格は表示しないようにします。

 

これには「もし〇〇なら××」という条件式を利用して計算します。

この作業は、コード④の部分になります。

また最初に、領収書シートで行うと指定することを忘れないようにします。

ここまでを内容をコードにしますとこのようになります。

コード③

コード
    Worksheets("領収書").Select
    Range("T3") = aN
    Range("T25") = aN
    Range("R5") = aDay
    Range("R27") = aDay
    Range("C6") = aCusa
    Range("C7") = aCusb
    Range("C28") = aCusa
    Range("C29") = aCusb

コード④

コード
    If aTax = 0 Then
      Range("G20") = " 円"
    Range("G42") = " 円"
    Range("H21") = " 円"
    Range("H43") = " 円"
    ElseIf aTax <> 0 Then
    Range("G20") = aBill - aTax & "円"
    Range("G42") = aBill - aTax & "円"
    Range("H21") = aTax & "円"
    Range("H43") = aTax & "円"
    End If
    Range("F13") = aNote
    Range("F35") = aNote

 

MEMO

If条件文についてはこちらの記事も参考になります。

「If条件文」のVBAコードの組み方。条件の絞り方を最速に理解。

 

領収書の作成にエクセルのデータを反映のまとめ

 

ここまでの内容を一度コードウインドに記述してテストしてみましょう。

コード①、コード②、コード③、コード④を順番にコピペで貼り付けてみてください。

このような感じになったでしょうか。

hakkoudata005n

 

発行データ入力シートに適当にサンプルデータを記入してください。

 

三角の緑色アイコン(SUB/ユーザーフォームの実行)をクリックすると記入したVBAマクロが実行されます。

hakkoudata006_1bn

 

自動で領収書シートが表示され、テンプレートにデータが表示されれば成功です。

 

次の記事では、金額表示の部分を少し凝ったものにしていきます。

 

>>>次の記事に進む>>>

領収書の金額をオシャレに表示できるVBAコード記述のコツ。

 

Excelマクロ&VBA超入門 今すぐ使えるかんたんぜったいデキます!
エクセルVBAを初めて勉強するときに効く
vbastudy016a
vbastudy017a

電子書籍版「Excelマクロ&VBA超入門」をamazonで見てみる

(著者)井上香緒里
(出版社)技術評論社
(税込価格)1,738円(本体1,580円+税)

マクロとVBAについて学んでみたいけれど,いまひとつ自信がないという方のために,ひとつひとつの操作を丁寧に解説する1冊目の教科書です。
エクセルVBAの「い・ろ・は の い」から説明していますので、安心して取り組める参考書です。
例題として、
  • 「データ消去」「シートのコピー」「メッセージボックス」の機能を持つお小遣い帳
  • 「入力フォーム」の機能を持った歩数表
2つの題材ファイルを作成しながら,マクロとVBAの基本を学習していきます。

 

業務効率UPのためにエクセルVBAを使いだして、始めのうちに知っておきたい内容を記事にしています。

「VBA最速理解」の記事一覧を開く

 

今回の記事はここまでです。   最後までご覧いただき有難うございました。

 

<記事内容についての告知>VBAコードの記述記事においては、その記述には細心の注意をしたつもりですが、掲載のVBAコードは動作を保証するものではりません。 あくまでVBAの情報の一例として掲載しています。 掲載のVBAコードのご使用は、自己責任でご判断ください。 万一データ破損等の損害が発生しても当方では責任は負いません。