B-2-2-素点合計を算出する - VBA -


▼数式上書き問題について


「せっかく作った数式が消えてる!」
「この列は数式が入っているので、手入力しないで!」

皆さんも一度は経験があるのではないでしょうか。
成績処理でエクセルを使っていると、よく起こる問題です。
ここでは「数式消去問題」と名付けます。

なぜ人は、せっかく数式を入れているのに、数値を上書きしてしまうのでしょうか。
作った人と使う人の認識の違いによるところが大きいと思います。
丁寧にマニュアルを作ったとしても「数式消去問題」は起こります。
セルのロックをかけても、わざわざはずす強者もいます。
ダメだとわかっているけれど、やってしまうのでしょうか...(笑)

このページでは、「数式消去問題」を防ぎつつ、素点合計を算出することを解説していきたいと思います。一般に解決できない問題も、ExcelVBAを活用すれば解決できます。

(課題)
「数式消去問題」を防ぎつつ、素点合計を算出するには、どうすればよいか。

▼VBAを活用して素点合計を算出する方法


1-方針:数式を入れずに素点のすぐ横に合計を算出する表を作ります
1-作業:図のような表を作ります。
1-解説:通常であれば、合計列の3行目には"=SUM(C3,D3)"を入力して最終行までコピーをしたいところです。しかし、ここでは数式を入れません。そこに数式があるから消去してしまうのです。
また、1行目は空き行にしています。マクロ実行ボタンを置くためです。ボタンは使う人が見やすい位置としてに置くとよいでしょう。


2-方針:合計列に数式を入れるマクロを組みます
2-作業:マクロを組む環境を整える

  1. [F12]名前をつけて保存
    「ファイル名(例):成績処理2学期数学」
    「ファイルの種類:Excelマクロ有効ブック」
  2. 【Alt,F11】VBEを開く
  3. 【Windows,←→】左右に並べて表示
  4. [挿入,標準モジュール]

2-結果:図のような表示になります。
※詳細は別ページ参照


3-方針:コード入力してマクロの箱をつくります

3-コード:「sub 合計算出」
※合計算出はマクロ名です。好きな名前に変えて構いません。

3-作業:VBE-Module1にて

  1. 「sub 合計算出」入力
  2. [Enter]

sub 合計算出


3-結果:subがSubになり、()がつき、End Subが補完されます。

3-解説:合計算出のマクロの箱ができたイメージです。


4-方針:箱の中に実行内容のコードを入力していきます。
4-コード:cells(3,5).resize(10,0)="=SUM(C3,D3)"

4-作業:Sub 合計算出()の下行から

  1. [Tab]キーでインデント
  2. 「cells(3,5).resize(10,1)="=SUM(C3,D3)"」入力
  3. [Enter]

Sub 合計算出

    cells(3,5).resize(10,1)="=SUM(C3,D3)"

End Sub

4-結果:cellsがCells、resizeがResizeと先頭大文字になり、スペースも補完されます。
4-解説:コードは「たて3,よこ5のセルをたて10,よこ1に範囲を広げて数式"=SUM(C3,D3)"を代入する」という意味です。ここまでの処理は『***』と似ています。入力する数式がROW関数からSUM関数に変わっていますが、本質的な処理は同様です。


5-方針:数式を値に直すコードを入力します
5-コード:***.value=***.value(通称:バリューバリュー)
5-作業:4-コードについて

  1. 左辺「Cells(3, 5).Resize(10, 1)」をコピーする
  2. 下行にペーストする
  3. すぐ右に「.value=」入力
  4. そのままもう一度「Cells(3, 5).Resize(10, 1)」をペーストする
  5. すぐ右に「.value」入力
  6. [↓]でずらす

Sub 合計算出

    Cells(3,5).Resize(10,1) = "=SUM(C3,D3)"

    Cells(3,5).Resize(10,1).value = Cells(3,5).Resize(10,1).value

End Sub

5-結果:先頭大文字、スペース補完されます
5-解説:5-コードは「たて3,よこ5のセルからたて10,よこ1に広げたセル範囲の値を、同じ範囲に値として代入し直す」という意味です。いわゆる「値の貼り付け」の処理をしています。


6-方針:マクロを実行してみます
6-作業:

  1. シートにてE3セルを選択する
  2. VBEにて、Sub 合計実行()の任意の行をワンクリック
  3. [F8]を数回に分けて押す
    ※ステップインは別ページ参照

6-結果:

F8 シート側 VBE側
1回目 変化なし 1行目黄塗り
2回目 変化なし 2行目黄塗り
3回目 合計列に「=SUM(C3,D3)」入力 3行目黄塗り
4回目 合計列の数式が値に変換 4行目黄塗り
5回目 変化なし 5行目黄塗り

6-解説:[F8]3回目、4回目にかけての数式バーの変化に注目してください。セルE3の表示は「10」ですが、3回目で数式、4回目で値に変換されます。

数式を残さずに合計を算出するマクロを作成することができました。最後に、作成したマクロをシートから直接実行できるようにしていきましょう。


7-方針:マクロを実行するボタンを設置する
7-作業:シートにて

  1. [挿入,図形,四角形:角を丸くする]
  2. 書式を整える
    ・図形の塗りつぶし…合計出力セルと同色
    ・図形の枠線…見出しと同色
  3. 文字のオプション
    ・垂直方向の配置「上下中央」
    ・左右上下余白すべて「0cm」
  4. テキスト「合計算出」
  5. 中央揃え
  6. Altキーを押しながら図形の位置やサイズ調整
  7. 図形を右クリック→「マクロの登録」
  8. リストから「合計実行」選択→「OK」

7-結果:図形の上にカーソルを持っていくと指が表示されるようになります。
7-解説:挿入した図形がボタンになります。指の表示の状態でワンクリックすると登録したマクロが実行されます。


8-方針:ボタンからマクロを実行してみる
8-作業:シートにて
①合計列の値をクリアする
②ボタンをクリックする
8-結果:ワンクリックでマクロ実行(合計算出)
8-解説:ボタンを合計列の直上セルに設置することで、すぐに合計を算出することができます。
合計を算出するにはボタンをクリックしなければなりませんが、数式を消されることによる以下のストレスはかなり軽減されると思います。

「数式が消去されていて、素点と合計の整合性がとれない」
「素点と合計の整合性がとれているが、数式が消去されていて変更した場合に更新されない」


▼使う人に周知すべき事項


1-ボタンを押さないと合計が算出されない

「材料の素点を入力したら合計算出のボタンをクリックすること」を使う人に周知しなければなりません。そして、合計算出した後に正しい値が入力されているか確認してもらうようにしましょう。

2-マクロ実行後は戻せない

マクロを実行した後は、一つ戻るなどの操作ができません。


▼次回


反論として「こんな面倒なこと、いちいちやってやれない」「数式を入れてロックをかけた方がいい」「数式を上書きする方が悪い」が挙げられます。業務によっては、その方が適切な場合もあります。
しかし、成績処理ファイルなどは「全教員」が「学期ごと」に使います。その上、繁忙期です。作る先生自身も成績処理をすると思うので、「数式上書き問題」などのトラブル対応は避けたいところです。

「数式が正しく反映されないんですけど…」という問い合わせも
「ボタンを押してください」ですぐに解決です!また、直観的な操作なので、一度覚えてしまえば再度聞かれることはまずありません。

このように、ExcelVBAをうまく活用すれば、壊れ知らず、修正いらずの安心安全なファイルをつくることができます。ぜひ実践してみてください。