ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

Excel(エクセル)活用コミュの変更があったセルを塗りつぶすマクロを教えてください

  • mixiチェック
  • このエントリーをはてなブックマークに追加
いつも勉強させていただいています。
以前このコミュニティでマクロについて似たような質問させていただきましたがまた解決できない問題があるので教えてください。

あるシートのB2からH11までの正方形の範囲で変更があったセルを黄色に塗りつぶしたいです。
ここまではWorksheet_Changeでできたのですが本当にやりたいところまで実現できません。

実現させたいのは下記の全てを満たすことです。

(1)
B2:H11内で変更があったセルを黄色に塗りつぶす。

(2)
その時にB2:H11内で変更がなかったセルの塗りつぶしは解除する。

(3)
DELETEキーなどでセルの値をクリアした時には塗りつぶし動作はしない。
前回変更時のセルの色は黄色のまま。

(4)
B2:H11内のセルの変更時のみ動作する。
CtrlキーやShiftキーで複数のセルを選択している状態で入力したデータをCtrlキーを押しながらデータを確定させると複数セルの値が同時に入力できますが、この時にB2:H11範囲外のセルの色などは変更したくない。

1〜2まではできましたが、3〜4あたりがよくわかりません。
これが実現できると前回どのセルに入力したのかが一目瞭然になりとても作業が楽になるのですが、まだ未熟なためにこれが実現できるのかどうかすらわかりません。

どうかご教授ください泣き顔

コメント(2)

自分、簡単に作成するなら、バックアップ用のsheetを用意して、Bookのopen時、cell内容の変更時に特定範囲をバックアップし、cellの変更時に、バックアップと1cell毎に比較し、処理を行う。ですかね。
比較時に画面更新を止めれば結構、処理速度も問題無いレベルになると思います。
これを実現させるための方法はいくつか思いつきましたが、
こんな感じなら(動作的にも)スッキリだと思いますがいかがでしょうか。
対象のシートモジュールにコードをコピペして動作確認してみてください。

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
  Dim rngMainArea As Range
  Dim rngEditArea As Range

  If IsEmpty(Target.Range("A1").Value) Then Exit Sub
  Set rngMainArea = Range("B2:H11")
  Set rngEditArea = Intersect(Target, rngMainArea)
  If rngEditArea Is Nothing Then Exit Sub
  rngMainArea.Interior.ColorIndex = xlColorIndexNone
  rngEditArea.Interior.ColorIndex = 6

  Set rngMainArea = Nothing
  Set rngEditArea = Nothing
End Sub

前回変更があったセルが色つきでわかるのは便利ですが、
マクロでセルに対してゴニョゴニョすると
元に戻す(Ctrl + Z)で変更前に戻せなくなるのが切ないですよね^^;

ログインすると、みんなのコメントがもっと見れるよ

mixiユーザー
ログインしてコメントしよう!

Excel(エクセル)活用 更新情報

Excel(エクセル)活用のメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。