最終チェックをしよう。

業務やゲームなど、目的を持って作成した、マクロ。
作成中にもバグをつぶしたり、エラーに対処したりと、いろいろとやってきたと思いますが、
品質を保証するためには、やはり、最終的なチェックが必要になります。

1.大量の関数は、マクロで打ち込む。

数個くらいの関数なら、手入力でもできます。
しかし、大量に関数を打ち込む必要があるとなると、手作業ではなかなか大変です。
そこで、マクロを作成して関数を自動で打ち込みましょう。
入力が楽になるという面もありますが、本当の目的は違うところにあります。
それは、以下の2点です。

@入力ミスをなくすことができる。
 ・手で入力すると、どうしてもタイプミスで数式やセルの場所を打ち間違えることがでてきます。
  マクロで自動実行させると、タイプミスはなくなります。

A何かの弾みで関数が消えていても、復旧できる。
 ・指がキーに触れたりして、気が付かないうちに関数が消えてしまうことも、まれにあります。
  そんなとき、最終確認として、もう一度マクロを実行して関数を書き込めば、
  入力された関数をチェックする必要もなくなります。


        ↑ これは、元の名簿です。


        ↑ これが、学級毎に取り出す名簿です。(セルは、R3C2の 東京 太郎 を選択しています。


下のマクロは、学級毎のシートに VLOOKUP関数 を打ち込みます。

Sub 関数書き込み()

  Dim R As Integer
  Dim C As Integer

  For R = 3 To 15
    Cells(R, 2).FormulaR1C1 = "=if(VLOOKUP(R1C2 & R1C4 & RC1,全校名簿, 5,FALSE)=0," _
      & """""" & ",VLOOKUP(R1C2 & R1C4 & RC1,全校名簿, 5,FALSE))"

    Cells(R, 3).FormulaR1C1 = "=if(VLOOKUP(R1C2 & R1C4 & RC1,全校名簿, 7,FALSE)=0," _
      & """""" & ",VLOOKUP(R1C2 & R1C4 & RC1,全校名簿, 7 ,FALSE))"

    Cells(R, 4).FormulaR1C1 = "=if(VLOOKUP(R1C2 & R1C4 & RC1,全校名簿, 8 ,FALSE)=0," _
      & """""" & ",VLOOKUP(R1C2 & R1C4 & RC1,全校名簿, 8 ,FALSE))"

    Cells(R, 5).FormulaR1C1 = "=if(VLOOKUP(R1C2 & R1C4 & RC1,全校名簿, 9 ,FALSE)=0," _
      & """""" & ",VLOOKUP(R1C2 & R1C4 & RC1,全校名簿, 9 ,FALSE))"

    Cells(R, 6).FormulaR1C1 = "=if(VLOOKUP(R1C2 & R1C4 & RC1,全校名簿, 10 ,FALSE)=0," _
      & """""" & ",VLOOKUP(R1C2 & R1C4 & RC1,全校名簿, 10 ,FALSE))"

    Cells(R, 7).FormulaR1C1 = "=if(VLOOKUP(R1C2 & R1C4 & RC1,全校名簿, 12 ,FALSE)=0," _
      & """""" & ",VLOOKUP(R1C2 & R1C4 & RC1,全校名簿, 12 ,FALSE))"

  Next R

  MsgBox "書き込み、完了!"

End Sub

 
入力したい数式は、
=if(VLOOKUP(R1C2 & R1C4 & RC1,全校名簿, 5 ,FALSE)=0, ""
,VLOOKUP(R1C2 & R1C4 & RC1,全校名簿, 5 ,FALSE))
です。


Cells(R, 2).FormulaR1C1 → R1C1形式で数式をセルに代入します。

VLOOKUP(R1C2 & R1C4 & RC1,全校名簿," & 5 & ",FALSE)
  ・R1C2 → 学年のセル
  ・R1C4 → 組のセル
  ・RC1  → 出席番号のセル
  ・全校名簿 → 元の名簿に「全校名簿」と名前を定義してあります。

数式にしたい文字列を、& を使ってつないでいます。

" を文字列に入れたいときは、"""" と4つ並べます。
"" を文字列に入れたいときは、"""""" と6つ並べます。

  

2.サンプルデータで、動作確認をする。

動作確認の最終チェックは、実際にデータを入力してのチェックです。
しかし、大量のサンプルデータを手入力で打ち込むのは、それこそ大変。
そんなときには、マクロでサンプルデータを作成しましょう。
下のマクロは、全校名簿の電話番号のサンプルデータを作るものです。

Sub 電話番号入力()
'---- サンプルの電話番号の入力 ----

  Dim R As Integer
  Dim 番号 As String

  Randomize ←@

  Application.ScreenUpdating = False ←A

  For R =2 To 13 ←B
    番号 = Int(Rnd() * 500) ←C
    番号 = String(4 - Len(番号), "0") & 番号 ←D
    Cells(R, 12) = "123-" & 番号 ←E
  Next R

  Application.ScreenUpdating = True ←F

End Sub
 
@ 乱数を初期化します。

A 処理速度を上げるために、画面の更新をoffにします。

B 2列目から13列目まで、実行します。

C 乱数を使って、0〜499までの数字を作ります。

D 4桁の数になるよう、足りない分は頭に"0"を付けます。
   ・Len → 文字数を返します。
   ・String → ある文字を決まった数並べた文字を返します。

E さらに、先頭に"123−"を付けて、電話番号の形にします。

F 画面の更新をonに戻します。