前回の「見積書の雛形をエクセルVBAで作ろう!(Part 5)」では罫線を引いて見積書の枠を作りました。 今日はセルの結合と文字入力をして見積書の形を完成させていきましょう。
セルの結合をする
今日書き込む部分もまた独立したSubプロシージャにしておきましょう。
名前は「セルの結合をする」にしましょうか。 ↓
セルの結合はセル範囲を指定してMergeというメソッド(命令文)を使います。
セル範囲は今までと同じくRangeで表しましょう。
左上のセルがB4で右下のセルがD5の場合は Range(“B4:D5”) と書きますね。 これに対してメソッドを書きます。 ↓
Range("B4:D5").Merge 'B4:D5の範囲を結合
逆に結合済みのセルを解除したい場合はUnMergeというメソッドを使います。このとき指定するセルは結合してあるどれか一つだけでOKです。 ↓
Range("B4").UnMerge '結合済みのB4:D5の範囲を結合解除
もうひとつ、選択したセル範囲を行ごとに結合したい場合がありますよね。そのときはMergeの後ろにTrueをつけます。 これはMergeメソッドにAcrossという引数をTrue指定しています。なにも書かないとFalseを指定していることになっています。横切るという意味の単語です。 ↓
Range("B4:D5").Merge True 'B4:D5の範囲を行ごとに結合
これは簡単でしたね! 早速書きたいところですが、一つだけやっておきたい事があります。
エクセルでセルの結合をする時に文字列が入っていると「文字列が左上のセル以外は消えますよ!」というような警告が出たことはありませんか?
まあ親切な警告ですが、あれでマクロの進行が止まったりエラーになるのを避けたいので機能を一時的に停めて、結合が終わってから元に戻しましょう。 ↓
Application.DisplayAlerts = False '確認メッセージを非表示 Range("B4:D5").Merge 'B4:D5の範囲を結合 Application.DisplayAlerts = True '確認メッセージを表示
これで対象のセルに文字列が入っていたとしてもエラーにならずにマクロが完走できます。
さあ、それではセルの結合のコードを実際に書き込みましょう! ↓
Sub セルの結合をする()
Application.DisplayAlerts = False '確認メッセージを非表示
Range("B2:C2").Merge 'セル範囲を結合
Range("B4:D5").Merge 'セル範囲を結合
Range("B7:D7").Merge 'セル範囲を結合
Range("B9:D11").Merge 'セル範囲を結合
Range("B12:D12").Merge 'セル範囲を結合
Range("B13:D14").Merge 'セル範囲を結合
Range("B15:D17").Merge True 'セル範囲を行ごとに結合
Range("G6:H7").Merge 'セル範囲を結合
Range("G8:H9").Merge True 'セル範囲を行ごとに結合
Range("F11:H12").Merge 'セル範囲を結合
Range("F13:H13").Merge 'セル範囲を結合
Range("G14:H14").Merge 'セル範囲を結合
Range("F15:H16").Merge 'セル範囲を結合
Range("B38:H42").Merge True 'セル範囲を行ごとに結合
Application.DisplayAlerts = True '確認メッセージを表示
End Sub
書けましたらテストをしてみましょう。 いつもと同じく、今日書いた「セルの結合をする」Subプロシージャ内にカーソルを置いてからキーボードの「F5キー」または「Sub/ユーザフォームの実行」ボタンを1回押して実行してみてください。 ↓
記入間違いがなければセルの結合が出来たはずです。
セルへ文字を入れて大きさや位置の調整をする
次に文字列をいれて行きますが、また新しいSubプロシージャを作って独立させておきましょう。
こうやってSubプロシージャを分けておくと後でテストや修正がしやすいと思います。 ↓
文字を代入する方法はもうお解りですよね。 イコール(=)の左辺に対象のセルを指定して、右辺に代入したい値を書けばOKです。ひとつ書いてみましょう。 ↓
Range("B2") = "御 見 積 書"
「御見積書」の文字間には見栄えの都合で全角スペースをいれました。
代入したいものが文字列の場合はダブルクォーテーション(”)で挟む決まりです。
次にこの「御見積書」の文字を大きくして太字にし、青色にします。
そして配置を下揃え、左寄せにします。
大きさを変えるにはRangeオブジェクトのプロパティの中からFont.Sizeを使います。
太字にしたい場合はRangeオブジェクトのプロパティの中からFont.Boldを使います。
青色にしたい場合はRangeオブジェクトのプロパティの中からFont.Colorを使います。
下揃えにしたい場合はRangeオブジェクトのプロパティの中からVerticalAlignmentを使います。
左寄せにしたい場合はRangeオブジェクトのプロパティの中からHorizontalAlignmentを使います。
インデントを入れる時はRangeオブジェクトのプロパティの中からIndentLevelを使います。
折返しをするしないはRangeオブジェクトのプロパティの中からWrapTextを使います。
セルの表示形式変更はRangeオブジェクトのプロパティの中からNumberFormatLocalを使います。
さあ、わざとコピペで同じような文章で書いてみました。お気づきでしょう、繰り返しの記述が多そうなことを。。。 前回でもやりました通り、なるべく同じ記述を減らせるように工夫しながら書いてみましょう。
変数Rの宣言からはじめます。 ↓
Sub 文字を入れて調整する()
Dim R As Range 'セル(データ型はオブジェクト型のRange)
Set R = Range("B2") '変数Rにセルを代入
R.Value = "御 見 積 書" '値を代入
R.Font.Size = 22 'フォントサイズを代入
R.Font.Bold = True '太字に変更
R.Font.Color = RGB(0, 112, 192) '文字色を青色に変更
R.VerticalAlignment = xlBottom '下揃えに変更
R.HorizontalAlignment = xlLeft '左寄せに変更
R.IndentLevel = 1 'インデントを1に変更
R.WrapText = False '折返しする
R.NumberFormatLocal = "G/標準" 'セルの表示形式
End Sub
これで一度テストしてみてください。こうなりましたでしょうか。 ↓
良さそうなので残りの文字もいれていきましょう。
同じ形なのでまるごとコピーペーストして代入値や設定値だけを変更し、不要な部分があれば削除していきましょう。 ↓
Sub 文字を入れて調整する()
Dim R As Range 'セル(データ型はオブジェクト型のRange)
Set R = Range("B2:H42") '変数Rにセルを代入
R.Font.Size = 11 'フォントサイズを代入
R.Font.Bold = False '太字に変更
R.VerticalAlignment = xlCenter '縦中央揃えに変更
R.HorizontalAlignment = xlLeft '左寄せに変更
R.IndentLevel = 0 'インデントを0に変更
R.WrapText = False '折返しする
R.NumberFormatLocal = "@" 'セルの表示形式
Set R = Range("B2") '変数Rにセルを代入
R.Value = "御 見 積 書" '値を代入
R.Font.Size = 22 'フォントサイズを代入
R.Font.Bold = True '太字に変更
R.Font.Color = RGB(0, 112, 192) '文字色を青色に変更
R.VerticalAlignment = xlBottom '下揃えに変更
R.IndentLevel = 1 'インデントを1に変更
Set R = Range("B4") '変数Rにセルを代入
R.Value = "〇〇〇〇〇株式会社 御中" '値を代入
R.Font.Size = 14 'フォントサイズを代入
R.VerticalAlignment = xlBottom '下揃えに変更
R.IndentLevel = 1 'インデントを1に変更
R.WrapText = True '折返しする
Set R = Range("B7") '変数Rにセルを代入
R.Value = "ご担当者 様" '値を代入
R.Font.Size = 14 'フォントサイズを代入
R.IndentLevel = 1 'インデントを1に変更
Set R = Range("B9") '変数Rにセルを代入
R.Value = "〇〇〇案件" '値を代入
R.Font.Size = 14 'フォントサイズを代入
R.IndentLevel = 1 'インデントを1に変更
R.WrapText = True '折返しする
Set R = Range("B12") '変数Rにセルを代入
R.Value = "下記の通り御見積り申し上げます。" '値を代入
R.IndentLevel = 1 'インデントを1に変更
Set R = Range("B13") '変数Rにセルを代入
R.NumberFormatLocal = """御見積り金額: ""#,##0""円"";""御見積り金額: ""-#,##0""円"""
'セルの表示形式
R.Value = "1000" '値を代入
R.Font.Size = 20 'フォントサイズを代入
R.Font.Bold = True '太字に変更
R.IndentLevel = 1 'インデントを1に変更
Set R = Range("B15") '変数Rにセルを代入
R.Value = "(消費税を含んでおります)" '値を代入
R.HorizontalAlignment = xlRight '右寄せに変更
Set R = Range("G3") '変数Rにセルを代入
R.Value = "御見積番号:" '値を代入
R.HorizontalAlignment = xlRight '右寄せに変更
Set R = Range("G4") '変数Rにセルを代入
R.Value = "発行日:" '値を代入
R.HorizontalAlignment = xlRight '右寄せに変更
Set R = Range("G5") '変数Rにセルを代入
R.Value = "有効期限:" '値を代入
R.HorizontalAlignment = xlRight '右寄せに変更
Set R = Range("F6") '変数Rにセルを代入
R.Value = "納入場所:" '値を代入
R.HorizontalAlignment = xlRight '右寄せに変更
Set R = Range("F8") '変数Rにセルを代入
R.Value = "納入予定日:" '値を代入
R.HorizontalAlignment = xlRight '右寄せに変更
Set R = Range("F9") '変数Rにセルを代入
R.Value = "御支払い条件:" '値を代入
R.HorizontalAlignment = xlRight '右寄せに変更
Set R = Range("F17") '変数Rにセルを代入
R.Value = "担当者名:" '値を代入
R.HorizontalAlignment = xlRight '右寄せに変更
Set R = Range("G17") '変数Rにセルを代入
R.Value = "○○○○○○" '値を代入
Set R = Range("G34") '変数Rにセルを代入
R.Value = "合計" '値を代入
R.HorizontalAlignment = xlRight '右寄せに変更
Set R = Range("G35") '変数Rにセルを代入
R.Value = "消費税" '値を代入
R.HorizontalAlignment = xlRight '右寄せに変更
Set R = Range("G36") '変数Rにセルを代入
R.Value = "税込み価格" '値を代入
R.HorizontalAlignment = xlRight '右寄せに変更
Set R = Range("H3") '変数Rにセルを代入
R.Value = "202000000-00" '値を代入
Set R = Range("H4") '変数Rにセルを代入
R.NumberFormatLocal = "yyyy年m月d日" 'セルの表示形式
R.Value = "2020/12/22" '値を代入
Set R = Range("H5") '変数Rにセルを代入
R.Value = "発行日から60日" '値を代入
Set R = Range("G6") '変数Rにセルを代入
R.Value = "東京都渋谷区○○○0-0-0 〇〇〇〇〇ビル 0000" '値を代入
R.VerticalAlignment = xlTop '縦上揃えに変更
R.WrapText = True '折返しする
Set R = Range("G8") '変数Rにセルを代入
R.NumberFormatLocal = "yyyy年m月d日" 'セルの表示形式
R.Value = "2020/12/31" '値を代入
Set R = Range("G9") '変数Rにセルを代入
R.Value = "御打合せ" '値を代入
Set R = Range("F11") '変数Rにセルを代入
R.Value = "benkyo room|ブログサイト" '値を代入
R.Font.Size = 18 'フォントサイズを代入
Set R = Range("F13") '変数Rにセルを代入
R.Value = "https://watunabi.com" '値を代入
Set R = Range("F14") '変数Rにセルを代入
R.Value = "〒000-0000" '値を代入
Set R = Range("G14") '変数Rにセルを代入
R.Value = "TEL:000-0000-0000" '値を代入
Set R = Range("F15") '変数Rにセルを代入
R.Value = "東京都渋谷区○○○0-0-0 〇〇〇〇〇ビル 0000" '値を代入
R.VerticalAlignment = xlTop '縦上揃えに変更
R.WrapText = True '折返しする
Set R = Range("B37") '変数Rにセルを代入
R.Value = "備考" '値を代入
Set R = Range("C19") '変数Rにセルを代入
R.Value = "品目名称" '値を代入
R.Font.Size = 11 'フォントサイズを代入
R.HorizontalAlignment = xlCenter '横中央揃えに変更
Set R = Range("D19") '変数Rにセルを代入
R.Value = "数量" '値を代入
R.HorizontalAlignment = xlCenter '横中央揃えに変更
Set R = Range("E19") '変数Rにセルを代入
R.Value = "単位" '値を代入
R.HorizontalAlignment = xlCenter '横中央揃えに変更
Set R = Range("F19") '変数Rにセルを代入
R.Value = "単価" '値を代入
R.HorizontalAlignment = xlCenter '横中央揃えに変更
Set R = Range("G19") '変数Rにセルを代入
R.Value = "金額" '値を代入
R.HorizontalAlignment = xlCenter '横中央揃えに変更
Set R = Range("H19") '変数Rにセルを代入
R.Value = "備考" '値を代入
R.HorizontalAlignment = xlCenter '横中央揃えに変更
Set R = Range("B21:H32") '変数Rにセルを代入
R.HorizontalAlignment = xlCenter '横中央揃えに変更
Set R = Range("C21:C32,H21:H32") '変数Rにセルを代入
R.HorizontalAlignment = xlLeft '左寄せに変更
R.WrapText = True '折返しする
Set R = Range("D21:D32,F21:G32,H34:H36") '変数Rにセルを代入
R.NumberFormatLocal = "#,##0_ ;[赤]-#,##0 " 'セルの表示形式
R.HorizontalAlignment = xlRight '右寄せに変更
Set R = Range("G34:G36") '変数Rにセルを代入
R.HorizontalAlignment = xlRight '右寄せに変更
End Sub
頑張って削りましたがこんなに長くなってしまいました。。。
実際のVBE画面ではこうなります。 ↓
これを書いている時、「セルの表示設定」の指定でなかなかうまく行かず何時間も時間をかけてしまいました。 WEBで調べたとおりに書いてみるのですが構文エラーなどで受け付けてもらえず、最終的にはダブルクォーテーション(”)を重ねたり抜いたりしてなんとか設定出来ました。
これは長いのでコピー・ペーストを推奨します。。
うまく動くかテストしてみてください。 こうなる予定です。 ↓
お疲れさまでした。 文字だけでは華やかさがないので次回はWEB用のバナーを使ってロゴを挿入し、角印を挿入していきたいと思います。