えくせるでてすとでーたをつくるその1
2014/02/22
excel
sql
vba
プロジェクトごとというか、会社さんというか、開発時のテストデータの作り方はいろいろありますね。
プログラムの仕様や、組んだ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
: