横線を公平に引くように考えてみよう。

やり方はいろいろあるが、3本の縦罫に対して、2つの間隔。乱数で左右に振り分けてみる。

Sub Macro1()

Dim lRow As Long

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

Randomize

For lRow = 3 To 15
If Rnd < 0.5 Then '0.5未満なら左
Cells(lRow, 2).Borders(xlEdgeBottom).Weight = xlThin
Else 'さもなくば右
Cells(lRow, 3).Borders(xlEdgeBottom).Weight = xlThin
End If
Next lRow


End Sub


しかし、左右のどちらかに必ずある、というのもおかしい。更に乱数を使って「線を引くかどうか」を判定しよう。

Sub Macro1()

Dim lRow As Long

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

Randomize

For lRow = 3 To 15
If Rnd < 0.5 Then '0.5未満なら左
If Rnd < 0.5 Then '0.5未満なら線を引く
Cells(lRow, 2).Borders(xlEdgeBottom).Weight = xlThin
End If
Else 'さもなくば右
If Rnd < 0.5 Then '0.5未満なら線を引く
Cells(lRow, 3).Borders(xlEdgeBottom).Weight = xlThin
End If
End If
Next lRow


End Sub


なんだかスカスカである。そう、左右に分けたはいいが、その後も半分の確率でしか線を引いていないからだ。ちょっと増やしてみよう。

Sub Macro1()

Dim lRow As Long

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

Randomize

For lRow = 3 To 15
If Rnd < 0.5 Then '0.5未満なら左
If Rnd < 0.8 Then
Cells(lRow, 2).Borders(xlEdgeBottom).Weight = xlThin
End If
Else 'さもなくば右
If Rnd < 0.8 Then
Cells(lRow, 3).Borders(xlEdgeBottom).Weight = xlThin
End If
End If
Next lRow


End Sub


何度か実行すると分かるが、スカスカのときと詰まっているときの差が結構ある。次回はこれを調整してみよう。