効率よく書類を作成するVBAの導入方法を解説【テキストの転記、図形の自動挿入機能を設定】
エクセルを使って「契約書」「注文書」「請求書」などの書類を作成している方におすすめのVBAをご紹介します。
紹介するVBAの内容というのが、「別シートにテキストを転記するVBA」「条件から〇や直線の図形を挿入するVBA」を使って書類を効率的に作成する!というものです。
私が実際の仕事で行っている「注文書の作成業務」をサンプルとして開発したVBAを使って、VBAの導入方法を詳しく解説していきます。
記事の最後では、VBAが設定されたエクセルファイルをダウンロードすることができます。設定されたVBAをアレンジすることであなたに合ったプログラムに変更することができるかと思われます。気になる方は参考にしてみてください。
注文書作成に設定されたVBAってどんなもの?
使われているVBAは以下の3つです。
シートを区別するVBA
別シートにテキストを転記するVBA
条件から図形を挿入するVBA
これらのVBAを組み合わせることで、様式の決められた書類作成業務の自動化を行うことができます。
一覧表の工事番号をユーザーフォームに入れて実行すると、契約書にテキストや図形を転記することができます。
このVBAを設定すると書類の作成効率がアップするメリット以外に、過去に作成した書類をすぐに出力することができるようになるというメリットを得ることができます。
例えば、数年前に作成した「工事番号1」の書類を出力したいときはユーザーフォームに「1」を入力して実行するだけです。
条件によって図形を操作するVBAのおかげで注文書にある○や取り消し線の編集を手作業で行う必要がありません。
過去の書類を出力したい!過去の書類を参考にしたい!というときにとても便利です。
紙で保管している書類を探しだす!なんて手間のかかる作業は一切必要なくなります。
VBAの導入方法
注文書を作成するVBAの導入方法についてご紹介していきます。
1.標準モジュールにVBAを記入
2.注文書を作成するサンプルVBA
ub 工事注文書()
''''''''''''''''''''''''''Sheetの設定''''''''''''''''''''''''''
Dim Ash As Worksheet
Dim Bsh As Worksheet
Set Ash = ThisWorkbook.Worksheets("一覧表")
Set Bsh = ThisWorkbook.Worksheets("工事注文書")
''''''''''''''''''''''''''ユーザーフォームで入力した値を変数iで取得''''''''''''''''''''''''''
i = UserForm1.TextBox1.Value
''''''''''''''''''''''''''Sheet内の図形を削除''''''''''''''''''''''''''
'前回表示させた図形をリセットさせなければ重なって増え続けてしまう'
Dim zukei As Shape
For Each zukei In Bsh.Shapes
On Error Resume Next
If zukei.TopLeftCell.Address >= Bsh.Cells(1, 1).Address Then
zukei.Delete
End If
If Err <> 0 Then
Err.Clear
End If
Next
''''''''''''''''''''''''''一覧表から工事契約書へ値を転記する''''''''''''''''''''''''''
'''''工事名を転記'''''
Bsh.Range("H6") = Ash.Cells(i + 2, 2)
Bsh.Range("H6").HorizontalAlignment = xlLeft
'''''工事場所を転記'''''
Bsh.Range("H8") = Ash.Cells(i + 2, 3)
Bsh.Range("H8").HorizontalAlignment = xlLeft
'''''工期(着手)を転記'''''
Bsh.Range("H10") = Ash.Cells(i + 2, 4)
Bsh.Range("H10").HorizontalAlignment = xlCenter
Bsh.Range("H10").NumberFormatLocal = "ggge年m月d日"
'''''工期(竣功)を転記'''''
Bsh.Range("P10") = Ash.Cells(i + 2, 5)
Bsh.Range("P10").HorizontalAlignment = xlCenter
Bsh.Range("P10").NumberFormatLocal = "ggge年m月d日"
'''''請負金額を転記'''''
Bsh.Range("L12") = Ash.Cells(i + 2, 6)
Bsh.Range("L12").HorizontalAlignment = xlCenter
Bsh.Range("L12").NumberFormatLocal = "#,###"
'''''消費税を転記'''''
Bsh.Range("R14") = Bsh.Range("L12").Value * 0.1
Bsh.Range("R14").HorizontalAlignment = xlCenter
Bsh.Range("R14").NumberFormatLocal = "#,###"
'''''支給材料の有無(図形○を表示)'''''
If Ash.Cells(i + 2, 11) = "有" Then
With Bsh.Shapes.AddShape(msoShapeOval, 368, 358, 14, 14)
.Fill.Visible = msoFalse
.Line.Weight = 1
.Line.ForeColor.RGB = vbBlock
End With
ElseIf Ash.Cells(i + 2, 11) = "無" Then
With Bsh.Shapes.AddShape(msoShapeOval, 402, 358, 14, 14)
.Fill.Visible = msoFalse
.Line.Weight = 1
.Line.ForeColor.RGB = vbBlock
End With
Else
End If
'''''貸与品の有無(図形○を表示)'''''
If Ash.Cells(i + 2, 12) = "有" Then
With Bsh.Shapes.AddShape(msoShapeOval, 368, 378, 14, 14)
.Fill.Visible = msoFalse
.Line.Weight = 1
.Line.ForeColor.RGB = vbBlock
End With
ElseIf Ash.Cells(i + 2, 12) = "無" Then
With Bsh.Shapes.AddShape(msoShapeOval, 402, 378, 14, 14)
.Fill.Visible = msoFalse
.Line.Weight = 1
.Line.ForeColor.RGB = vbBlock
End With
Else
End If
'''''発生品の有無(図形○を表示)'''''
If Ash.Cells(i + 2, 13) = "有" Then
With Bsh.Shapes.AddShape(msoShapeOval, 368, 396, 14, 14)
.Fill.Visible = msoFalse
.Line.Weight = 1
.Line.ForeColor.RGB = vbBlock
End With
ElseIf Ash.Cells(i + 2, 13) = "無" Then
With Bsh.Shapes.AddShape(msoShapeOval, 402, 396, 14, 14)
.Fill.Visible = msoFalse
.Line.Weight = 1
.Line.ForeColor.RGB = vbBlock
End With
Else
End If
'''''工事数量調書の有無(図形線を表示)'''''
If Ash.Cells(i + 2, 14) = "有" Then
With Bsh.Shapes.AddLine(Bsh.Range("I24").Left, Bsh.Range("I24").Top + 6, Bsh.Range("P24").Left, Bsh.Range("P24").Top + 6).Line
.Weight = 1
.ForeColor.RGB = vbBlock
End With
With Bsh.Shapes.AddLine(Bsh.Range("I24").Left, Bsh.Range("I24").Top + 12, Bsh.Range("P24").Left, Bsh.Range("P24").Top + 12).Line
.Weight = 1
.ForeColor.RGB = vbBlock
End With
Else
End If
'''''示方書等の有無(図形線を表示)'''''
If Ash.Cells(i + 2, 15) = "有" Then
With Bsh.Shapes.AddLine(Bsh.Range("I25").Left, Bsh.Range("I25").Top + 6, Bsh.Range("P25").Left, Bsh.Range("P25").Top + 6).Line
.Weight = 1
.ForeColor.RGB = vbBlock
End With
With Bsh.Shapes.AddLine(Bsh.Range("I25").Left, Bsh.Range("I25").Top + 12, Bsh.Range("P25").Left, Bsh.Range("P25").Top + 12).Line
.Weight = 1
.ForeColor.RGB = vbBlock
End With
Else
End If
'''''工事数量調書の有無(図形線を表示)'''''
If Ash.Cells(i + 2, 16) = "有" Then
With Bsh.Shapes.AddLine(Bsh.Range("I26").Left, Bsh.Range("I26").Top + 6, Bsh.Range("P26").Left, Bsh.Range("P26").Top + 6).Line
.Weight = 1
.ForeColor.RGB = vbBlock
End With
With Bsh.Shapes.AddLine(Bsh.Range("I26").Left, Bsh.Range("I26").Top + 12, Bsh.Range("P26").Left, Bsh.Range("P26").Top + 12).Line
.Weight = 1
.ForeColor.RGB = vbBlock
End With
Else
End If
'''''発注者住所を転記'''''
Bsh.Range("J33") = Ash.Cells(i + 2, 8)
Bsh.Range("J33").HorizontalAlignment = xlLeft
'''''発注者氏名を転記'''''
Bsh.Range("J35") = Ash.Cells(i + 2, 7)
Bsh.Range("J35").IndentLevel = 2
'''''受注者住所を転記'''''
Bsh.Range("J37") = Ash.Cells(i + 2, 10)
Bsh.Range("J37").HorizontalAlignment = xlLeft
'''''受注者氏名を転記'''''
Bsh.Range("J39") = Ash.Cells(i + 2, 9)
Bsh.Range("J39").IndentLevel = 2
End Sub
3.ユーザーフォームを作成
4.ユーザーフォームに記入するサンプルVBA
Private Sub CommandButton1_Click()
Call 工事注文書
End Sub
これでVBAの導入は完了です。
実行結果
一覧表シートの情報からテキストと図形(〇と直線)が転記されます。
図形を操作するVBAについて
図形〇を挿入するAddShapeメソッド
図形○を操作するVBAは、AddShapeメソッドを使用しています。
AddShapeメソッドの基本構造
Shapesオブジェクト . AddShape ( Type , Left , Top , Width , Height )
Type ・・・図形の種類
Left ・・・挿入位置
Top ・・・挿入位置
Width ・・・図形の大きさ
Height・・・図形の大きさ
Typeを変更するだけで他の図形を挿入することができます。いろいろ試してみてください。
下記の記事では、文字を○で囲むVBAについて詳しくご紹介しています。
テキストの長さによって○の大きさを変更するVBAの設定方法などが紹介されています。図形の挿入、編集を自動化するだけでエクセル業務の効率を格段にアップさせることができます。是非参考にしてみてください。
<<【エクセル】文字を〇で囲む操作を自動化するマクロを紹介~コピペして使えるサンプルマクロを掲載~
直線を挿入するAddLineメソッド
取り消し線(直線)を操作するVBAは、AddLineメソッドを使用しています。
AddLineメソッドの基本構造
Shapesオブジェクト . AddLine ( startX , startY , EndX , EndY )
startX・・・始まりのX座標
startY・・・始まりのY座標
EndX ・・・終わりのX座標
EndY ・・・終わりのX座標
注文書の作成VBAでは直線を取り消し線のように利用していますが、他にもいろんな利用方法があります。
下記の記事では、図形をきれいに編集する方法が詳しく解説されています。記事の中にはサンプルVBAを使ってAddLineの使い方が紹介されているので是非参考にしてみてください。
<<【 エクセルで図形の編集ができない? 】簡単に図形を編集するテクニックやマクロを紹介
関数IF
関数IFは、「もし〇〇なら△△にする」というような処理を行うことができるとても使用頻度の高い関数です。
注文書を作成するVBAでも関数IFが使われていて、
一覧表シートの項目に「有」が入力されているなら注文書シートの「有」に〇をつける!
という処理を行っています。
関数IFの基本構造
IF 条件 Then
処理①
Else
処理②
End IF
関数IFを自由に扱えるようになれば、いろんなエクセル業務に応用することが可能になります。
下記の記事では、関数IFの導入方法や関数IFを使ったサンプル事例が詳しく紹介されています。
<<VBAでForと関数Ifを組み合わせて使用する方法【繰り返し処理で作業効率アップ】
別シートにテキストを転記するVBAについて
別シートにテキストを転記するVBAは、Worksheetプロパティを使ってシートを区別する必要があります。
Worksheetプロパティ基本構造
Dim 〇〇 As Worksheet
Set 〇〇 = Sheets( △△ )
この記事で紹介している注文書を作成するVBAには、一覧表シートには「Ash」、注文書シートには「Bsh」という名前をつけています。
Dim Ash As Worksheet
Set Ash = Sheets("一覧表" )
Dim Bsh As Worksheet
Set Bsh = Sheets("注文書" )
私がVBAの開発を行うとき、VBAの最初にこのシートを区別するVBAを設定してしまいます。そうすれば、別シートへテキストを転記させるVBAを簡単に作ることができるようになります。
下記の記事では、別シートにテキストを転記するVBAについて詳しくご紹介しています。
<<【エクセルマクロ】別シートに情報を自動反映させるマクロの作り方・導入方法を紹介
仕事でよく使われるVBAなので自由に扱えるようにしておきましょう。
注文書を作成するVBAのダウンロード
この記事で紹介している注文書を作成するVBAが設定されたエクセルファイルをダウンロードしてお使い頂けます。
同じような仕事をしていて業務の効率をアップさせたいと考えている方は是非参考にしてみて下さい。
ここから先は
¥ 500
この記事が気に入ったらサポートをしてみませんか?