WindowsでDBサーバーの構築とリプレースはしたことがある。それもSQL Serverで、2000から2005に置き換える際にはマイクロソフトで移行方法の研修まで受けて臨んだ。

現在、Linux、PostgreSQLで、Webサーバー、Appサーバー、DBサーバーのサーバー構築を他社に依頼しているが、その他社の担当者が仕事半ばで抜けることになった。そこで、その者のインフラ担当者と直接話をすることになったのだが、「何も話を聞いていない」状態であった。
インフラ系を専門にやっているだけあり、知識は深い。通信方式はそこそこ知ってたつもりだが、恥ずかしい話、まだまだ知らないことが多いよな、と感じることが多く、おかげさまで勉強できた。
過去にLinuxサーバーの構築本を買っていたが、それを改めて読み直すと「ああ、こういうことだったんだ!」と理解が深まった。

開発に関しては「自分でも分かる分野」であるので何とでもなると思うし、分からないことでも少しエンジニアと話せば理解は出来る。しかし、サーバー、ネットワークは知らない分野だし、お客様と話する際でもかなり重要な部分でもある。今後はセキュリティ分野とネットワーク分野を併せて深めていこうと思う。

なお、VBAでできる通信は限られている。それはそれで取り上げる。

今回は横線がスカスカにならないように調整する。

「5行をひとかたまりとして、その中で必ず横罫が1行は引かれるようにする」ことにしてみよう。そのひとかたまりの中で、5行の左右のどちらかに1行もなければ、補正処理として、線の塗り替えを行う。

Sub Macro1()

Dim lRow As Long
Dim lRow2 As Long

Dim iRightCnt As Integer
Dim iLeftCnt As Integer

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

iRightCnt = 0
iLeftCnt = 0

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
iLeftCnt = iLeftCnt + 1
End If
Else 'さもなくば右
If Rnd < 0.8 Then '0.8未満なら線を引く
Cells(lRow2, 3).Borders(xlEdgeBottom).Weight = xlThin
iRightCnt = iRightCnt + 1
End If
End If
Next lRow2

'補正処理
If iRightCnt = 0 Or iLeftCnt = 0 Then
Cells(lRow, 2).Borders(xlEdgeBottom).Weight = xlThin
Cells(lRow, 3).Borders(xlEdgeBottom).LineStyle = xlNone
 
Cells(lRow + 1, 2).Borders(xlEdgeBottom).LineStyle = xlNone
Cells(lRow + 1, 3).Borders(xlEdgeBottom).Weight = xlThin
End If

Next lRow

End Sub

線を引く際にはWeightで太さを指定すればいいが、消すときはLineStyleをxlNoneにする。

さて、次回は縦罫を増やしてみることにする。
さて、今回は横線のばらつきを調整する。

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

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

適度に線を引かれる、というのをどう扱うか。ここでは「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行の中に左右どちらかの横罫がない場合に特殊処理を施す、という方法を採る。

これは次回に。