払込取扱票への印字の準備です。必要なデータをテンプレートに配置するためのデータ選択収集・転記のエクセルVBAコード作成です。
こんにちは、じゅんぱ店長(@junpa33)です。
この記事では、先回作成した「入力シート」のテンプレート転送用セル(入力表)へ、データを送るVBAを組み立てます。
先回までに作成した入力シートに、ボタンクリック一つでデータが入るようにエクセルVBAコードを組み立てます。
桁数のある数字も分解して1文字1文字転送入力していきます。
基本1セル1文字ということになります。
数字は、数字を扱う感覚ではなく文字を扱う感覚です。
その前に、前回の記事を読み返すにはこちら↓からご覧になれます。
請求金額などを用紙印字する仕組みづくり。払込取扱票印字コンテンツ
データ転記のVBAコード作成の考え方
「印刷用テンプレート」に印刷するデータ(口座番号や加入者名など)を指定して所定のセルに表示します。
「利用者側設定」表からの転記
請求時の入金情報・・・・口座記号、口座番号、加入者名を転記します。
支払い時の出金情報・・・口座記号、口座番号、加入者名、振替金額、自社情報
「発行データ」シートからの転記
請求時の請求先の情報・・通信欄、依頼人、金額
先回作成した「データ選択」ユーザーフォームの「選択」ボタンで転記できるようにセットします。
データセットの基本的な考え方は、
購入者に金額を請求する時は、
- 「利用者側設定」の請求時の入金情報で口座記号と口座番号、加入者名
- 「発行データ」シートからの情報データで請求金額、依頼人の氏名と住所、通信欄
からデータを取ってきます。
利用者が請求に対して金額を振替する時は、
- 「利用者側設定」の支払時の出金情報で、相手振替先の口座記号と口座番号、加入者名
- 振替金額、自社情報
からデータを取ります。
請求時と振込時に応じたデータを転記するVBA
利用者側の2つの設定と「発行データ」シートからの転記についてVBAコードを作成していきます。
利用者側設定のデータ転記
「利用者側設定」にあるデータを転送用入力表へ移動させるVBAです。
先回に組み立てたプロシージャー「テンプレシート」と同じ、Module1に記述します。
プロシージャー名を「利用者側設定A」とします。
For~Nextのループと入れ子構造をVBA最速理解Sub 利用者側設定A()
Dim i As Long
With Worksheets("入力シート")
For i = 1 To 15
.Cells(4, 1 + i) = .Cells(11, i + 26).Value
Next i
.Cells(5, 3) = .Cells(12, 30).Value
End With
End Sub
プロシージャー名を「利用者側設定B」とします。
Sub 利用者側設定B()
Dim i As Long, j As Long
With Worksheets("入力シート")
For i = 1 To 15
.Cells(4, 1 + i) = .Cells(17, i + 26).Value
Next i
.Cells(5, 3) = .Cells(18, 30).Value
For j = 1 To 8
.Cells(4, 17 + j) = .Cells(22, j + 27).Value
Next j
.Cells(14, 3) = .Cells(24, 28).Value
.Cells(16, 3) = .Cells(26, 28).Value
.Cells(8, 2) = .Cells(29, 28).Value
End With
End Sub
「利用者側設定A」プロシージャーの実行ボタンと「利用者側設定B」プロシージャーの実行ボタンを設置します。
ボタンの設置方法の確認はこちら↓で確認いただけます。
コマンドボタンをシートに設置する2つの方法「利用者側設定A」プロシージャーの実行ボタンを「基本口座設定」とします。
設置したボタンを右クリックで「マクロの登録」をこのように指定します。
「利用者側設定B」プロシージャーの実行ボタンを「振込先口座金額設定」とします。
設置したボタンを右クリックで「マクロの登録」をこのように指定します。
「発行データ」シートからのデータ転記
「発行データ」シートをこのようにします。
「発行データ」シートに登録されているデータ(請求先資料)から請求先(依頼人)を選択して、
「利用者側設定」にあるデータを転送用入力表へ移します。
「発行データ」のデータ資料はどこから持ってきてもらってもOKです。特に指定はありません。手打ちで打ち込んでもらってもいいです。
ただし、「請求金額は数値」でなければなりません。
ここでの、データ移動の注意ポイントは、「請求金額」の数字をを一つづつに分解して、
1つのセルに1つの数字をはめ込むようにセッティングすることです
プロシージャー名を「入力シート転記」とします。
Sub 入力シート転記()
Dim aR, aN As Long
Dim aDay, aCus, aAd, aNote As String
Dim aBill, i, j As Long
Dim aTax, Bnc, CP As Integer
With Worksheets("発行データ")
aR = ActiveCell.Row
aN = .Range("A" & aR).Value
aDay = .Range("B" & aR).Value
aCus = .Range("C" & aR).Value
aBill = .Range("D" & aR).Value
aAd = .Range("E" & aR).Value
aNote = .Range("F" & aR).Value
Bnc = Len(CStr(aBill))
End With
With Worksheets("入力シート")
.Range("B8") = aN & " , " & aDay & vbCrLf & aNote
.Range("C16") = aCus
.Range("C14") = aAd
CP = 8 - Bnc
If CP > 0 Then
For j = 1 To CP
.Cells(4, 17 + j).Value = ""
Next j
End If
For i = 1 To Bnc
.Cells(4, 17 + CP + i).Value = Mid(aBill, i, 1)
Next i
End With
End Sub
前回作成した「データ選択」ユーザーフォームの「選択」ボタンの起動セットアップをします。
「プロジェクトエクスプローラー」で「データ選択」をダブルクリックしてユーザーフォームモジュールを開きます。
「コードの表示」アイコンをクリック
Option Explicit
Private Sub データ選択_Click()
Call Module1.入力シート転記
End Sub
データ転記のVBAコード作成のまとめ
今回のVBAコードはModule1に記述しました。
振込用紙(払込取扱票)に印字するために必要なデータを選択するVBAコード記述は完了です。
購入者が、自店に振込んで(振替えて)もらう場合と、逆に自店が支払いで振込む(振替える)場合の両方のデータ入力を行えるようになりました。
次回からは印刷用テンプレートに転記した文字を正常に印刷できるように、表示と配置を適切にマッチングさせるVBAを組み立てていきます。
テンプレートは、印刷範囲の理由で「上下逆さま」に作っています。
今回作成した「入力シート」は正立になっていますので、この移動には
「正立」と「倒立」の状態を一致させる必要があります。
このVBAの組み立てが、「振込用紙(払込取扱票)の印字」の ” ウラ技 ” とも言うべきものになります。
「数字」と「文字列(文章)」の場合に分けて説明したいと思います。
短期間でエクセルVBAの独学習得を目指したいなら
エクセルVBAを独学する独習方法は、学習者それぞれ十人十色、多種多様と思われます。
けれども、
出来るだけ効率よく学習するためには、いくつかの大切なポイントがあります。
独学でもVBA習得の中級クラスに達するのはそんなに難しいことではありません。
先人が行った勉強方法をあなたがそのまま利用すればよいということです。
エクセルVBAを独学で習得する!ために大切な7つのポイントを解説します独習のための大切な7つのポイントは、上記記事にて解説しています。
正直、VBAの学習について自分の周りの仕事(業務)からだけ実例を得るのでは効率良い習熟は無理です。
ハッキリ言って、
本当に短い期間でVBA習得を成功させたいなら、今使っている参考書が良書かどうかを判断し、新ツールとしてオンライン学習も取り入れて行うことが、
手っ取り早く短期間習得できるというのは間違いないでしょう。
エクセルVBAを独習するのに参考書は欠かせません。 参考書選びは自分に合った「相棒」にできるものを選んでいきたいです。
エクセルVBAの独習でおすすめ参考書を7冊選ぶ。良書との出会いは大切です今回の記事はここまでです。 最後までご覧いただき有難うございました。
<記事内容についての告知>
VBAコードの記述記事においては、その記述には細心の注意をしたつもりですが、掲載のVBAコードは動作を保証するものではりません。 あくまでVBAの情報の一例として掲載しています。 掲載のVBAコードのご使用は、自己責任でご判断ください。 万一データ破損等の損害が発生しても当方では責任は負いません。
アンケートでポイ活しよう!!
アンケートに答えれば答えるほど ”使える” ポイントがたまります。