LoginSignup
4
5

More than 5 years have passed since last update.

VBAで作る自分用エクセルテンプレート

Posted at

はじめに

エクセルをよく使う機会が増えてきて、それに伴い自分好みのテンプレートで作業することが多くなってきた。
一回一回書式設定などするのも面倒なので、VBAで作ってしまって使いまわすことにした。

仕様

自分が使う時はパターン化されている

  • 1列目はタイトル
  • 2列目は何も入れない
  • 3列目に項目
  • 4列目からデータ

それに対してVBAを下記の通り設定する
1. 自分好みの書式(フォント、フォントサイズ、背景色など)を
2. 3列目(項目)に関しては右に入力していく度に自動で背景色を青、文字色を白にして目立たせ、
3. 4列目(データ)からは自動裁判し、
4. データを入力する毎に枠で囲う
5. データや項目など消す時は自動で書式をリセット

完成形イメージ

スクリーンショット

ソースコード

トリガー

シートの項目やデータに入力があった時に自動で変更されるように宣言する

sheet1
Private Sub Worksheet_Change(ByVal Target As Range)
    ' もしB3以降に文字入力されたら実行
    If (Target.Row >= 3 And Target.Column >= 2) Then
        Call Style(1)
    End If
End Sub

全体書式設定

全体の書式を設定するが、最初の一回しか使わない。

module
' 3列目を基準とする
Public Const BaseRow As Integer = 3


' 今あるシート全体に自分好みの文字や背景色など適用させる
Sub BasicConfig()
    Dim i As Integer
    Dim n As Integer

    n = Worksheets.Count

    ' 全てのシートに対して
    For i = 1 To n
        ' フォント
        Worksheets(i).Cells.Font.Name = "Century Gothic"
        ' フォントサイズ
        Worksheets(i).Cells.Font.Size = 8
        ' 背景色 
        Worksheets(i).Cells.Interior.Color = RGB(255, 255, 255)
        ' 基準の値
        Worksheets(i).Cells(BaseRow, 1).Value = "#"
        ' ボールド
        Worksheets(i).Cells(BaseRow).Font.Bold = True
        ' セルのサイズが自動的に変更になるようにする
        Worksheets(i).Range("A3").CurrentRegion.Columns.AutoFit
        Worksheets(i).Activate
        Range("B4").Select
        ' B4を基準に表示枠を固定する
        ActiveWindow.FreezePanes = True
    Next i
End Sub

トリガーをきっかけに書式を変更する機能

Module
Sub Style(ByVal i As Integer)
    Dim iColumn As Integer
    Dim iRow As Integer
    Dim n As Integer
    Dim Column As Integer
    Dim Row As Integer

    iRow = 1

    ' 3列目の横列に対して入力していけば自動的に書式(セルの色やフォントなど)を設定
    For iColumn = 1 To 100
        ' 何かしら文字が入ったら、背景色青の文字白、ボールド
        If Not Worksheets(i).Cells(BaseRow, iColumn).Value = "" Then
            Worksheets(i).Cells(BaseRow, iColumn).Interior.Color = RGB(83, 141, 213)
            Worksheets(i).Cells(BaseRow, iColumn).Font.Color = RGB(255, 255, 255)
            Worksheets(i).Cells(BaseRow, iColumn).Font.Bold = True
            Column = iColumn
        ' 何も文字入ってなかったら背景色白の文字黒
        Else
            Worksheets(i).Cells(BaseRow, iColumn).Interior.Color = RGB(255, 255, 255)
            Worksheets(i).Cells(BaseRow, iColumn).Font.Color = RGB(0, 0, 0)
            Exit For
        End If
    Next iColumn

    ' 4列目のデータを記入していくところの書式設定自動化
    For iRow = BaseRow + 1 To 1000
        If Not Worksheets(i).Cells(iRow, 2).Value = "" Then
            Worksheets(i).Cells(iRow, 1).Value = iRow - BaseRow
            Worksheets(i).Cells(iRow, 1).Interior.Color = RGB(83, 141, 213)
            Worksheets(i).Cells(iRow, 1).Font.Color = RGB(255, 255, 255)
            Worksheets(i).Cells(iRow, 1).Font.Bold = True
            Row = iRow
        Else
            Worksheets(i).Cells(iRow, 1).Value = ""
            Worksheets(i).Cells(iRow, 1).Interior.Color = RGB(255, 255, 255)
            Worksheets(i).Cells(iRow, 1).Font.Color = RGB(0, 0, 0)
            Exit For
        End If
    Next iRow

    ' 対象の部分は枠で囲う
    Range(Cells(3, 1), Cells(iRow - 1, iColumn - 1)).Borders.LineStyle = xlContinuous

    '  入力した部分の枠の長さを自動調整
    Range("A3").CurrentRegion.Columns.AutoFit

    '  対象外の部分は枠を削除その1
    For n = iRow To 1000
        If Cells(n, 1).Borders.LineStyle = xlContinuous Then
            Range(Cells(n, 1), Cells(n, iColumn)).Borders.LineStyle = xlLineStyleNone
        Else
            Exit For
        End If
    Next n

    '  対象外の部分は枠を削除その2
    For n = iColumn To 1000
        If Cells(3, n).Borders.LineStyle = xlContinuous Then
            Range(Cells(3, n), Cells(iRow, n)).Borders.LineStyle = xlLineStyleNone
        Else
            Exit For
        End If
    Next n
End Sub

とりあえず即席で作ったので無駄な書き方や好ましくない仕様の部分もあるので、いつかアップデートしたい。

4
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
5