With a single step

~千里の道も一歩からと信じたいノート~

マニュアル作成のコツ

Java7 → iReport用 (iReport設定ファイルにJAVAのパスを設定)
Java8 → 画像パス取得ツール用 (JAVA_HOMEはこちら側)
目的の部分でツールの説明(使用場面)について軽く触れる。

①目次のデザインと記事幅
naifix.com
※記事幅のために、画像はトリミングしたり、サイズを縮小すること。

②文字の装飾と段落のコツ
tashiteku.com

作成物

【mod00_Operator】
Option Explicit

Sub Action()
'シート名定数クラスを作成する必要あり
Call mod01_MakeMaxDigitGenarateInfo.Action
Call mod02_GenerateMaxDigitData.Action
Call mod03_PasteTranspose.Action
End Sub

【mod01_MakeMaxDigitGenarateInfo】
Option Explicit

Sub Action()
Call generateSheet
Call copyTitleFormat
Call lookUp
End Sub

Sub generateSheet()

' シートを作成する
Dim sheet As Worksheet
Worksheets.Add After:=Worksheets("帳票CSV取込設定")
ActiveSheet.Name = "フル桁作成書式"
Set sheet = ActiveSheet ' 現在アクティブなシートを取得する
Worksheets.Add After:=Worksheets("フル桁作成書式")
ActiveSheet.Name = "フル桁データ"
sheet.Activate ' シートをアクティブにする

End Sub

Sub copyTitleFormat()

Dim sheetCopyFrom As Worksheet
Dim sheetCopyTo As Worksheet
Dim LastRow As Long

Set sheetCopyFrom = Worksheets("帳票CSV取込設定")
Set sheetCopyTo = Worksheets("フル桁作成書式")
LastRow = sheetCopyFrom.Cells(Rows.Count, 1).End(xlUp).Row

'項目名とシートの書式をコピーする
Worksheets("仕様書").Range("A1", "R2").copy Worksheets("フル桁作成書式").Range("A1", "R2")
Worksheets("仕様書").Range("A3", "R3").copy
Worksheets("フル桁作成書式").Range("A3", "R" & LastRow + 1).PasteSpecial (xlPasteFormats)

sheetCopyTo.Range("A3", "A" & LastRow + 1).Value = sheetCopyFrom.Range("A2", "A" & LastRow).Value
sheetCopyTo.Range("G3", "G" & LastRow + 1).Value = sheetCopyFrom.Range("B2", "B" & LastRow).Value
sheetCopyTo.Range("D3", "D" & LastRow + 1).Value = sheetCopyFrom.Range("C2", "C" & LastRow).Value
sheetCopyTo.Range("H3", "H" & LastRow + 1).Value = sheetCopyFrom.Range("E2", "E" & LastRow).Value
sheetCopyTo.Range("J3", "J" & LastRow + 1).Value = sheetCopyFrom.Range("F2", "F" & LastRow).Value
sheetCopyTo.Range("O3", "O" & LastRow + 1).Value = sheetCopyFrom.Range("G2", "G" & LastRow).Value

End Sub

Sub lookUp()

Dim sheetSearchFrom As Worksheet
Dim sheetSearchTo As Worksheet
Dim LastRowSearchFrom As Long
Dim LastRowSearchTo As Long
Dim i As Integer
Dim tbl As Range
Dim key As String

Set sheetSearchFrom = Worksheets("フル桁作成書式")
Set sheetSearchTo = Worksheets("仕様書")
LastRowSearchFrom = sheetSearchFrom.Cells(Rows.Count, 1).End(xlUp).Row
LastRowSearchTo = sheetSearchTo.Cells(Rows.Count, 1).End(xlUp).Row
Set tbl = sheetSearchTo.Range("G3", "R" & LastRowSearchTo)

'「フル桁作成書式」シートの最終行まで繰り返す
For i = 3 To sheetSearchFrom.Cells(Rows.Count, 1).End(xlUp).Row
key = sheetSearchFrom.Range("G" & i)
On Error Resume Next
'取込形式
sheetSearchFrom.Range("J" & i) = WorksheetFunction.VLookup(key, tbl, 4, False)
'表示形式
sheetSearchFrom.Range("L" & i) = WorksheetFunction.VLookup(key, tbl, 6, False)
'表示桁数
sheetSearchFrom.Range("O" & i) = WorksheetFunction.VLookup(key, tbl, 9, False)
'整数桁
sheetSearchFrom.Range("Q" & i) = WorksheetFunction.VLookup(key, tbl, 11, False)
'小数桁
sheetSearchFrom.Range("R" & i) = WorksheetFunction.VLookup(key, tbl, 12, False)
On Error GoTo 0
Next i

End Sub

【mod02_GenerateMaxDigitData】
Option Explicit

Sub Action()
Dim sheetDataGenerate As Worksheet
Dim i As Integer
Dim dataKind As String

Columns("S").NumberFormatLocal = "@"

Set sheetDataGenerate = Worksheets("フル桁作成書式")

For i = 3 To sheetDataGenerate.Cells(Rows.Count, 1).End(xlUp).Row
dataKind = sheetDataGenerate.Cells(i, 10)
Select Case dataKind
Case "テキスト"
Call DataGenerateString(i, sheetDataGenerate)
Case "数値"
Call DataGenerateNumeric(i, sheetDataGenerate)
Case "通貨"
Call DataGenerateCurrency(i, sheetDataGenerate)
Case "日付"
Call DataGenerateDate(i, sheetDataGenerate)
Case "郵便番号"
Call DataGeneratePostal(i, sheetDataGenerate)
Case "電話番号"
Call DataGenerateTelNo(i, sheetDataGenerate)
Case Else
GoTo continue
End Select
continue:
Next i
End Sub

Sub DataGenerateString(i As Integer, sheetDataGenerate As Worksheet)

Dim str As String
Dim outputDigit As String
str = "123456789T123456789T123456789T123456789T123456789T123456789T123456789T123456789T123456789T123456789T123456789T123456789T123456789T123456789T123456789T123456789T123456789T123456789T123456789T123456789T123456789T123456789T123456789T123456789T123456789T123456789T123456789T123456789T123456789T123456789T123456789T123456789T123456789T123456789T123456789T123456789T123456789T123456789T123456789T123456789T123456789T123456789T123456789T123456789T123456789T123456789T123456789T123456789T123456789T123456789T123456789T123456789T123456789T123456789T123456789T123456789T123456789T123456789T123456789T123456789T123456789T123456789T123456789T123456789T123456789T123456789T123456789T123456789T123456789T123456789T123456789T123456789T123456789T123456789T123456789T123456789T123456789T123456789T123456789T123456789T"
outputDigit = sheetDataGenerate.Cells(i, 15)

sheetDataGenerate.Cells(i, 19) = Mid(str, 1, outputDigit)

End Sub

Sub DataGenerateNumeric(i As Integer, sheetDataGenerate As Worksheet)

Dim num As String
Dim inte As String
Dim deci As String
num = "12345678901234567890"
inte = sheetDataGenerate.Cells(i, 17)
deci = sheetDataGenerate.Cells(i, 18)

If Not deci = "" Then
num = Mid(num, 1, inte) & "." & Mid(num, 1, deci)
Else
num = Mid(num, 1, inte)
End If

Dim outputFormat As String
outputFormat = sheetDataGenerate.Cells(i, 15)

sheetDataGenerate.Cells(i, 19) = Format(num, outputFormat)

End Sub

Sub DataGenerateCurrency(i As Integer, sheetDataGenerate As Worksheet)

Dim money As String
Dim inte As String
Dim deci As String
money = "12345678901234567890"
inte = sheetDataGenerate.Cells(i, 17)
deci = sheetDataGenerate.Cells(i, 18)

If Not deci = "" Then
money = Mid(money, 1, inte) & "." & Mid(money, 1, deci)
Else
money = Mid(money, 1, inte)
End If

Dim outputFormat As String
outputFormat = sheetDataGenerate.Cells(i, 15)

If InStr(outputFormat, "\") Then
sheetDataGenerate.Cells(i, 19) = Format(money, "\" & outputFormat)
Else
sheetDataGenerate.Cells(i, 19) = Format(money, outputFormat)
End If

End Sub

Sub DataGenerateDate(i As Integer, sheetDataGenerate As Worksheet)
sheetDataGenerate.Cells(i, 19) = "1234年12月12日"
End Sub

Sub DataGeneratePostal(i As Integer, sheetDataGenerate As Worksheet)
sheetDataGenerate.Cells(i, 19) = "123-1234"
End Sub

Sub DataGenerateTelNo(i As Integer, sheetDataGenerate As Worksheet)
sheetDataGenerate.Cells(i, 19) = "123-123-1234"
End Sub

【mod03_PasteTranspose】
Option Explicit

Sub Action()
Dim sheetDataGenerate As Worksheet
Dim sheetDataCSV As Worksheet
Dim LastRow As Long

Set sheetDataGenerate = Worksheets("フル桁作成書式")
Set sheetDataCSV = Worksheets("フル桁データ")
LastRow = sheetDataGenerate.Cells(Rows.Count, 1).End(xlUp).Row

sheetDataGenerate.Range("S3", "S" & LastRow).copy
sheetDataCSV.Range("A1").PasteSpecial xlPasteAll, Transpose:=True
Application.CutCopyMode = False
End Sub

今日の反省

①帳票項目の取り込み時は帳票に表示しない項目の項目種別に気をつける。
帳票項目
・レコード毎にカラムの値が変化する場合
帳票明細項目
・レコード毎にカラムの値が変化しない場合

iReport レイアウト作成メモ

①登録用jrxmlを適当に用意する
②昇順でA、AAを並べ替えれるようにする。
www.helpforest.com
③フル桁データ作成用ツールの作成
→帳票定義、フル桁データ、参照データ(フル桁作成用)でシートを分割すること

f:id:who_is_unfair:20180512091405j:plain

<セル内の関数>
=IF(A2="テキスト",SUBSTITUTE( IF(B2=1,"","S") & MID($F$1, 2, IF(B2-2 < 0,0,B2-2)) & "E","0","T"),IF(A2="日付",LEFT($F$2,B2),LEFT($F$1,B2)))

④フル桁データ作成時の注意点
・通貨はマイナスを付与したデータを作成する
・明細以外に条件付き書式
・種別がテキスト以外に条件付き書式
・表示形式に気をつけてデータを作成する
例:桁数は半角6桁たが、表示形式は(9999)
・フル桁データは3ページ以上になるようにデータを用意すること。
・フル桁データは3ページ目で収まるのデータ数を用意すること。
→ヘッダやフッタだけ4ページ目にいってしまう場合がある。
④その他のデータ作成用ツール(預かりデータetc)
⑤condition style が業務に使えるか試してみる
⑥どんなデータを預かっても対応できる関数・パラメータ・スタイルコレクションを作成(通貨、日付、郵便番号etc)
【ポイント】
・意図しないデータでもエラーで処理落ちしないこと
・意図しないデータでもそのまま表示すること
・関数、パラメータに関してはどういった時に対応できるかの対応表と組合せ表を作成し、帳票ごとに取捨選択しやいように考慮して作成する。
・どんなデータならどのように表示されるか例を示して、サポートに分かりやすいように説明する。説明できる関数を作成する
⑦【取り込み時の注意】
・帳票に表示しない項目の項目種別

【テスト観点】
【データ】
・お客様データを用意しているか
・必須のデータを用意しているか
・フル桁のデータを用意しているか
・表示形式に合わせた桁数になっているか
【レイアウト】
・Data Source Emptyの場合にnullが表示されていないか
・必須のみの場合、必須以外の項目が表示されていないか
・表示する桁数は正しいか
・表示形式は正しいか
・1ページ目と2ページ目の明細部の罫線の位置は一致しているか
・指示書のサンプル画像と一致しているか(罫線などデザイン的な側面で確認する)
・画像の挿入位置は正しいか(印影、ロゴなど)
・改ページ位置は丁度良いか
・文字切れはないか
・改行されないようにパディングやマージンで制御しているか
(改行は基本的に禁止。変な位置で改行されるため)
→対応方法についてはKさんの作成物を確認する
・印刷は試したか
・指定のフォントは正しいか
・フォントは統一されているか
・フォントサイズは適切か
・ページ番号は全ページに表示されているか
・通貨の表示形式は指定のものになっているか
・通貨、数値はマイナスを考慮した表示形式になっているか。
・通貨、数値にカンマはついているか
・文字アライメント(右寄せ、左寄せ、上寄せ、下寄せ)は正しいか
・Groovyになっていないか
・jrxml内の帳票名は正しいか(過去の作成物をコピーしていると修正し忘れたりする)
・フレームでエリア分けを行っているか
・明細なしのページが発生していないか。
→許容される場合もある。
→例:ラストページフッタのヘイトがページフッタのヘイトより大きい場合に、明細の数がページ内ギリギリでラストページフッタのヘイトを残せないときに発生する場合。
【参考】
http://labs.opentone.co.jp/wp-content/uploads/2010/02/8a7a1b428edc1ed170f8556838542f41.pdf

codezine.jp
画像の左側だけ参考にして作成する
f:id:who_is_unfair:20180606201237j:plain