さて、今回は横線のばらつきを調整する。

これもやり方はいろいろあるだろう。ここでは
・あまりスカスカにならないよう、適度に線が引かれるようにする。

というようにしてみよう。

適度に線を引かれる、というのをどう扱うか。ここでは「5行をひとかたまりとして、その中で必ず横罫が1行は引かれるようにする」ことにしてみよう。よって、横罫が引かれる部分も5の倍数になるように調整してみよう。
現在、3行目~16行目に縦罫がある。これでは横は13なので、15にする。

Sub Macro1()

Dim lRow As Long

With Range(Cells(3, 2), Cells(18, 3))
.Borders(xlEdgeLeft).Weight = xlThin
.Borders(xlEdgeRight).Weight = xlThin
.Borders(xlInsideVertical).Weight = xlThin
End With

Randomize

For lRow = 3 To 17 'セルの下に引いているため、最終行の一行上になる。
If Rnd < 0.5 Then '0.5未満なら左
If Rnd < 0.8 Then '0.8未満なら線を引く
Cells(lRow, 2).Borders(xlEdgeBottom).Weight = xlThin
End If
Else 'さもなくば右
If Rnd < 0.8 Then '0.8未満なら線を引く
Cells(lRow, 3).Borders(xlEdgeBottom).Weight = xlThin
End If
End If
Next lRow


End Sub


次に、5行をひとかたまりとして処理(まだこの時点では、5行の固まりの中に必ず1行は横罫が引かれる状態ではない)するようにしよう。

Sub Macro1()

Dim lRow As Long
Dim lRow2 As Long

With Range(Cells(3, 2), Cells(18, 3))
.Borders(xlEdgeLeft).Weight = xlThin
.Borders(xlEdgeRight).Weight = xlThin
.Borders(xlInsideVertical).Weight = xlThin
End With

Randomize

For lRow = 3 To 17 Step 5

For lRow2 = lRow To lRow + 4 'lRow が 3 なら、3 ~ 7 の5つの間でループ
If Rnd < 0.5 Then '0.5未満なら左
If Rnd < 0.8 Then '0.8未満なら線を引く
Cells(lRow2, 2).Borders(xlEdgeBottom).Weight = xlThin
End If
Else 'さもなくば右
If Rnd < 0.8 Then '0.8未満なら線を引く
Cells(lRow2, 3).Borders(xlEdgeBottom).Weight = xlThin
End If
End If
Next lRow2

Next lRow


End Sub


その中で、1行は必ず線が引かれるように工夫してみよう。最大、片側に5つの線が偏る可能性もあれば、両方ともスカスカの場合もある。
これもいろいろやり方はあるだろうけれど、処理を非常に単純にするため、5行の中に左右どちらかの横罫がない場合に特殊処理を施す、という方法を採る。

これは次回に。