HOME > 即効テクニック > Excel VBA > セル操作関連のテクニック > ユーザーが選択したセルを覚えておく

即効テクニック

セル操作関連のテクニック

ユーザーが選択したセルを覚えておく

(Excel 97/2000/2002/2003/2007)
マクロで操作するセルをユーザーに選択してもらうには、いくつかの方法があります。
たとえば「選択してからマクロを実行してもらう」のでしたら、次のようにSelectionを使えばいいでしょう。
ここでは、文字の太字(ボールド)を反転する例で解説します。

Sub Sample1()
  Dim Target As Range
  For Each Target In Selection
    Target.Font.Bold = Not Target.Font.Bold
  Next Target
End Sub   
ユーザーが、Ctrlキーを押しながら選択した非連続のセル範囲でも対応できます。 あるいは「マクロを実行してから選択してもらう」のでしたら、たとえば、次のような方法が考えられます。
Sub Sample2()
  Dim Target As Range, SelectCell As Range
  On Error Resume Next
  Set SelectCell = Application.InputBox _
                  ("対象セルを選択してください", Type:=8)
  If Err.Number <> 0 Then Exit Sub    ''[キャンセル]ボタンがクリックされた
  For Each Target In SelectCell
    Target.Font.Bold = Not Target.Font.Bold
  Next Target
End Sub   
では、前回ユーザーが選択したセルを覚えておくには、どうしたらいいでしょう。 普通に考えれば、ユーザーがセルを選択したセルを処理した直後あたりで、どこかに記録しておけばいいですね。 モジュールレベル変数に格納しておくと、何かのタイミングでクリアされるかもしれませんから、作業用シートのセルとか、あるいはレジストリやテキストファイルに書き込んでおけば、消える心配もありません。 もちろん、それらの方法でもいいですが、今回はちょっと変わった方法を紹介します。 セルに印をつけておくやり方です。 ここでは便宜的に、セル範囲A1:E20にデータが入力されていて、任意の複数セルをユーザーが選択するものとします。 RangeオブジェクトにはIDプロパティというプロパティがあります。 IDプロパティは、ワークシートをWebページとして保存するとき、ハイパーリンクの参照先ターゲットを設定するプロパティです。 HTMLでいうNameタグのような機能です。 ワークシートをWebページとして保存しないのなら、このIDプロパティは通常では使用されません。なので、せっかくですから有効活用しましょう。
Sub Sample3()
  Dim Target As Range, SelectCell As Range
  On Error Resume Next
  Set SelectCell = Application.InputBox _
                 ("対象セルを選択してください", Type:=8)
  If Err.Number <> 0 Then Exit Sub    ''[キャンセル]ボタンがクリックされた
  For Each Target In SelectCell
    Target.Font.Bold = Not Target.Font.Bold
    Target.ID = "Selected"
  Next Target
End Sub  
上のSample3は、先のSample2と同じように、ユーザーが選択したセルの太字属性を反転させます。 そのとき、反転させたセルのIDプロパティに文字を書き込みます。 前回ユーザーが選択したセルを再利用するには、次のようなマクロを使います。
Sub Sample4()
  Dim c As Range, buf As String
  For Each c In Range("A1:E20")
    If c.ID = "Selected" Then
      buf = buf & c.Address & ","
      c.ID = ""
    End If
  Next c
  If buf <> "" Then
    buf = Left(buf, Len(buf) - 1)
    Range(buf).Select
    MsgBox "前回選択されたセルは" & buf & "です"
  End If
End Sub   
データが入力されているセル範囲A1:E20内のセルを1つずつチェックしてIDプロパティに"Selected"という文字が書き込まれているかを調べます。 見つかった場合、ここではIDプロパティをクリアしています。 ぜひ、実際にマクロを実行して動作を確認してください。 なお、IDプロパティの値は、通常のブック形式では保存されません。 ブックを開いている間は有効ですが、ブックを閉じると消えてしまいます。