「現在選択しているセル」を意識した手法

―ActiveCellとSelection―

 また、モードレスなユーザーフォームにより、フォームを表示しながらセルを自由に選択することが可能となりました。これにより、フォームを使ってセルの内容を変更する際には、今まで以上に「現在、どのセルを選択しているか」を意識してコードを作成すると、より直感的な操作ができるアプリケーションを作成することができます(図4)。

図4:Activeセルとフォームのイイ関係を築こう

 例えば、ユーザーに顧客名や商品名などを“正確な列に、正確なデータを直感的に”入力させたい場合には、以下のようなActiveCellプロパティを利用して、「現在選択しているセルのあるアクティブな行のデータを更新する」ようなコードを用意しておくと便利です。

 Sub PushAnyButton(myMsg, myCol)
 
     myRow = ActiveCell.Row
     Cells(myRow, myCol).Value = myMsg
     ' アクティブな行のmyCol番目の列に対してmyMsgを書き込む
            
     If Cells(myRow, 2) = "" Then
         Cells(myRow, 2).Value = Format(Date, "m月d日")
         Cells(myRow, 3).Value = Cells(1, 5).Value
     End If
     ' myMsgを追加した列に日付等の固定的なデータの入力が   
    ' 無い場合は該当するものを書き込む処理をする
 
 End Sub
 上記の処理は「アクティブな行のmyCol番目の列に対してmyMsgを書き込む」ものです。この「PushAnyButton」を「標準モジュール」に書き込み、すべてのユーザーフォームから利用できるようにしておくのです。そして、それぞれのフォームには関数を利用することで、さまざまな項目の入力処理をこの関数ひとつで管理することができます。
 同様に、単一セル範囲でなく、選択している複数のセル範囲に対しての処理を行なう場合には「Selectionプロパティ」をうまく利用しながら関数を作成することで、同じようにひとつの関数をさまざまな処理で使いまわすことができるのです。入力がラクになるユーザーにとっても、コードを書く量が減る開発者にとっても、便利な方法だと言えるでしょう。