今まで、何度か試みたものの「結局無理」と思って諦めてたのができたので メモします。若干感動しました。
仕事柄、お客さんにデータを貰うのに、
じゃあExcelで入力テンプレート作るので、これに埋めてくださいね。
であるとか、
マスタの内容をExcelに吐いたので必要な部分だけ修正してくださいね。
みたいな事が結構あるんですが、大体の場合、担当の方はコピペを多用したり、 勝手に列や行を追加してメチャクチャにしてくれる。 加えて、その結果本人も意図していない部分が変更されちゃってたりする。
「そんなんシート保護しときゃいいじゃん」と言う意見もあるが、 部分的に正しく保護するのって結構面倒だったりするし、 シート保護すると、「作業しにくいから保護とかそーゆーのやめてくれ」 みたいな苦情を受けたりするもんです。
「いや、そんなんそもそもExcelなんか使うからそーゆー事になるんでしょ。 Excelって『表計算ソフト』だよ?」 と言う非常にもっともな意見もあるが、 普通の方々が矩形データの登録に使うもの、と言ったらExcelくらいしか無い。
で、そんな時、シート上で 「値が元データから変更された時点で赤字になる」 等の処理が行えると、見た目にもどこが変更されたかが分かるし、 お客さん側も間違って隣のセルまで更新した事に気付きやすくなる。
と言うわけで、変更箇所をリアルタイムにマーキングする方法。
=(A1<>INDIRECT(ADDRESS(ROW(),COLUMN(),4,,"sheet2")))
- "sheet2"の部分はsheet2のシート名を入力
- [書式]でマーキングに利用する書式を設定
- [OK]でsheet1に戻る
- sheet1!A1からデータ全体を選択し、[書式] - [条件付書式]
- シート全体を選択しちゃっても多分大丈夫
- 既に先程A1で設定した条件が入っているダイアログが表示されるのでそのまま[OK]
以上で、sheet1のデータを変更すると書式が自動で変わります。 元データを見せる必要が無ければロックしたsheet2は非表示にしてしまったほうがよいかもしれません。
この方法のミソは、
=(A1<>INDIRECT(ADDRESS(ROW(),COLUMN(),4,,"sheet2")))
にあります。要するに「値がsheet2と違ったら」と言う条件です。 素直に書くと、
=(A1<>sheet2!A1)
となるんですが、このように指定すると、
抽出条件 条件付き書式で、他のワークシートまたはブックへの参照は使用しません。
と言うエラーになります。「しません。」って。宣言かよ。 と言う事で条件付書式の設定では通常他シートへの参照を含める事はできません。 他シートの値が条件に使えない、って結構その他の場面でも不便なんですが、 上記のように回りくどいやり方で無理矢理指定すると行ける、と言う事です。
条件の内容は全て相対参照になっている為、 作業中にシート内でセルをコピペしたり、フィルしても、問題なく動作します。
勝手に列を追加したりするとそれ以降の列がいきなり真っ赤になるので、 そこそこ抑止力になります。
作成日 2007-08-07 (火) 21:53:50