VBAによる自動化の第一歩(補足)
昨日のブログをtwitterに上げたら、早速フォロワー様からご指摘をいただいた。
「空欄があった場合の対応がないぞ!」と。
ははは。ホントだ。
こんな場合に、
全部選択して実行すると、
当然こうなるwww
Sub 様をつける3()
Dim objCell As Range
For Each objCell In Selection
If objCell.Value <> "" Then '……(1)
If Right(objCell.Value, 1) <> "様" Then
objCell.Value = objCell.Value & " 様"
End If
End If '……(2)
Next
End Sub
こんなコードでいかがでしょう?
(1)に追加したのは、新しい条件。「セルの値が空白じゃなかったら」と言う意味。これで、「objCell」が空白だったら、間をすっ飛ばして(2)まで行くことになるから、「空白セルに『様』だけが入力される」というマヌケなことが回避できる。
「様をつける3」プロシージャの中にカーソルを置いて実行すると、
ほれ、この通り。
Sub 様をつける4()
Dim objCell As Range
For Each objCell In Selection
If objCell.Value <> "" And _
Right(objCell.Value, 1) <> "様" Then '……(3)
objCell.Value = objCell.Value & " 様"
End If
Next
End Sub
こんな風に書いても同じ結果が得られる。「セルが空白でなく、かつ、右端が『様』でなかったら」という条件。
Sub 様をつける5()
Dim objCell As Range
For Each objCell In Selection
If objCell.Value <> "" Then
If Right(objCell.Value, 1) <> "様" Then
objCell.Value = objCell.Value & " 様"
End If
Else
objCell.Value = "氏名未記入" '……(4)
End If
Next
End Sub
上のコードでは、「様をつける3」プロシージャに(4)の部分を追加している。「else」のところは、1個目の「if」に対応していて、「さもなくば」ぐらいの意味。
「セルが空白でないという条件にあてはまらなければ」、要するに「セルが空白だったら」、else以下を実行しなさい、ということ。よって、コレを実行すると、
当然こうなります。
セルを表す「Range」オブジェクト(プロパティ)には、「Value」意外にもたくさんのプロパティがあるので、条件によってセルに色をつけたり、罫線を引いたり……と工夫次第でいろんなことができる。