プログラマメモ2 - programmer no memo2

えくせるでてすとでーたをつくるその1 2014/02/22

プロジェクトごとというか、会社さんというか、開発時のテストデータの作り方はいろいろありますね。

プログラムの仕様や、組んだSQL(これから組むであろう)の特性などから、テストケースおこして、それにあわせて、テストデータをつくるというのが一般的な流れかなとは思います。


エクセルで組んで出力するところもあれば、直接SQLをテキストファイルのSQLを編集しているところや、あとは、XMLや、CSV形式や、規模ややりやすさや修練度や、いろいろな兼ね合いがあります。

組あわせ数が多い場合、テストデータを検討する際にはやはりエクセル便利だなと。

それで、
「表」で表現できるのがエクセルの強みですが、テストデータを組むさいに、縦でもたせる場合をみたことなくて、たいてい、横に並べるパターンが多いかなというのが感想です。

個人的には、たいていのテーブル定義書が、縦で表現されているところから、縦に書いていくのが好きです(縦といっているのは項目のこと)。左に項目名を用意して、列がふえていく感じです。

ただし、この記述方法ですと、古いエクセルは列数の制限から、テストデータを多く作るのには向いてなくて、やはり、項目は縦にもたせるよりは、横なのかなー。

エクセルのマクロが嫌い(苦手)なのですが、なんか最後にはエクセルなんですよね。

というわけで、こんなの考えてみました。


作成するにあたって、はじめて、 TRANSPOSEを知りました。

とりあえず、downloadできる場所に

Index of /download/excel

いくつかのユーザー関数を定義しています。


' ******************************** ' 改変自由 2014/02/22 ' deiji.jp ' ******************************** ' ******************************** ' コンキャッツ ' いい名前がうかばなかったので ' ******************************** Function CONCATS(rng As Range, Optional a As Variant = ",") As String Dim cnt As Integer Dim ret As String Dim m As Integer Dim i As Integer i = 0 m = rng.Count ' Debug.Print m For Each r In rng i = i + 1 ret = ret & r.Value If i < m Then ret = ret & a End If Next CONCATS = ret End Function ' ******************************** ' 参照、クォート、コンキャッツ ' いい名前がうかばなかったので ' ******************************** Function REF_QT_CONCATS(ref As String, rng As Range, Optional a As Variant = ",") As String Dim ret As String Dim m As Integer Dim i As Integer i = 0 m = rng.Count ' Debug.Print m ' 同行にある、値をチェックして囲むか決定する For Each r In rng i = i + 1 ' Debug.Print ">>>" & ref & r.Row 'シングルクォートするかはSQTで判断する ret = ret & SQT(Range(ref & r.Row).Value, r.Value) If i < m Then ret = ret & a End If Next REF_QT_CONCATS = ret End Function 'シングルクォート Function SQT(a As String, b As String) As String ' "○"なら囲む If a = "○" Then SQT = "'" + b + "'" Else SQT = b End If End Function



: