[[20030910025935]] 『カーソルのある行・列を目立たせたい』(Achilley) >>BOT

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『カーソルのある行・列を目立たせたい』(Achilley)

 既出なのかもしれませんが、ちょっとどういうキーワードで
 検索したらいいのかわからないので質問させてください。

 いま現在カーソルのある行・列を目立たせる機能というのはあるのでしょうか。
 例えばエクセル上ではなく実際の紙の表のある行に注目したいとき、
 その行の下に定規を当てたりしますよね。
 それと同様に、エクセル上でも、自分が今一体どの行・列にいるのかということが
 一目瞭然になるような機能はありますでしょうか。
 カーソルのある行・列が反転表示されるとか、
 あるいは微妙に色が変わるとか・・・。

 一応、カーソルのある行の行番号や列番号は太字になりますが、
 はっきり言ってぜんぜん目立ちません。

 ちょっとうまく説明できたか自信がありません。
 不明瞭な点があったらご指摘ください。


 以前ここで教えて頂いたVBAです。
[[20030313092225]] 『選択中のセルの色をかえるには』(ケン) 

 Private Sub Worksheet_SelectionChange(ByVal Target As Range)

   For Each c In UsedRange
      If c.Interior.ColorIndex = 4 Then
         c.Interior.ColorIndex = xlColorIndexNone
      End If
   Next

   Target.Cells.Interior.ColorIndex = 4

 End Sub
 シート名を右クリックしコード表示でそこに、このコードをコピペして下さい。
 ちょっと、やりたい事とは違うようですが・・・(ケン)

 ケンさん、ご回答ありがとうございます。
 ケンさんの VBA だとカーソルのあるセルが色がつくようになりますね。
 でも、私がやりたいのはカーソルのあるセルだけではなく
 カーソルのある行全体および列全体を目立たせたいということなのです
 (違う色にする、反転表示する、枠で囲む、なんでもいいです)。
 VBA をもうすこしいじくればできるんでしょうか・・・。

 いずれにしてもエクセル標準の機能には入っていない、というわけですか。
 この機能は絶対に標準装備されるべきだと何年も思っているのですが・・・。
 (Achilley)


 >VBA をもうすこしいじくればできるんでしょうか。出来ると思いますが今の私の力では
出来ません。ちょっと考えてみますが、保障はしません。いずれにしろその内に大先生
が考えてくれるとは思いますが・・・(ケン)


 良い機会なので、少し講義しましょう。
 最終的に選択したセルに色を付けているVBAコードがどれかわかりますか?
(kazu)


 コピペ出来なくなるのでダメでしょうけど、ご参考までに・・・(INA)

 Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Cells.Interior.ColorIndex = xlNone
    Columns(Target.Column).Interior.ColorIndex = 34
    Rows(Target.Row).Interior.ColorIndex = 35
    Selection.Interior.ColorIndex = 36
 End Sub

 私も参加させて頂いても良いでしょうか?
Target.Cells.Interior.ColorIndex = 4
この部分ですよね。(ケン)

 > Target.Cells.Interior.ColorIndex = 4
 > この部分ですよね。(ケン)
 そうです、そこで色を付けています。

 [INA]さんが答えを出してくれましたので、これで講義終了ですね。
 (kazu)

 kazuさんに直接教えて頂けるチャンスはめったにないので、ちょっと残念です。
INAさん参考に勉強さして頂きます。有難う御座いました。(ケン)

 INAさんのスクリプトで行・列に色がつきますが、
 たしかにコピー、ペーストができなくなってしまいますね。
 またセルの背景色も変わってしまうので、ちょっと実用的でないです。
 せっかく教えていただいたのに申し訳ありません。

 この機能がないと本当に目が疲れるんですよね。
 うっかり変更すべきでない行ののデータを変更してしまったり・・・。

 副作用なく行・列を目立たせるのは難しいのでしょうか?
 VBA 全然分からないのにお願いばかりで申し訳ありませんが・・・。
 (Achilley)


 >[INA]さんが答えを出してくれましたので、これで講義終了ですね。
 まだ、質問者にとっては未完成です。
 私の力では難しいので、講義の続行をお願い致します。

 オートシェイプを半透明にして、選択セルに重ねるとか・・・
  (INA)

 コピー&ペーストの件はいまいち分かりかねるのですが
>またセルの背景色も変わってしまうので
とあらばINAさんのSelection.Interior.ColorIndex = 36の部分の36を0にすれば良い
と思います。(ケン)


 >またセルの背景色も変わってしまうので

 というのは、もともと背景色がついていたセルと同じ行または列に
 カーソルを持ってゆくとそのもともとの背景色が
 消えてしまう(白くなってしまう)、という意味です。

 これは
 Selection.Interior.ColorIndex = 0
 としても変わりません。(Achilley)

 Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
 Cells.Interior.ColorIndex = xlNone
    Columns(Target.Column).Interior.ColorIndex = 34
    Rows(Target.Row).Interior.ColorIndex = 35
    Selection.Interior.ColorIndex = 36
 End Sub
また、意味が違うかもしれませんが、ダブルクリックするとその行列に色がつくように
なります。これだとコピペも出来るようです。(ケン)


 何かえらいことになってしまいましたが。
 とりあえずコピー・ペーストはできるようにしました。
 元の背景色が変わってしまう問題は残っています。
 (kazu)

 Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Application.CutCopyMode = xlCopy Then
        Exit Sub
     End If
    Cells.Interior.ColorIndex = xlNone
    Columns(Target.Column).Interior.ColorIndex = 34
    Rows(Target.Row).Interior.ColorIndex = 35
    Selection.Interior.ColorIndex = 36
 End Sub

 Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
 Cancel = True
 Application.ScreenUpdating = False
 If Target.Interior.Color <> Target.Offset(1, 1).Interior.Color Then
   Target.Offset(1, 1).Select: Selection.Copy
   Target.EntireRow.Select: Selection.PasteSpecial (xlPasteFormats)
   Target.EntireColumn.Select
   Selection.PasteSpecial (xlPasteFormats)
   Target.Select
 Else
   Rows(Target.Row).Interior.ColorIndex = 34
   Columns(Target.Column).Interior.ColorIndex = 34
 End If
 Application.CutCopyMode = False
 Application.ScreenUpdating = True
 End Sub

 大変参考になります。まだまだ、すべてを吸収は出来ませんが、いつかきっと・・です。
ところで、列名をクリックしてその列を選択すると列名が黒くなり白抜き文字になりますが
それは利用出来ないのですか?Excel2002からはその状態に近い物になり列名、行番号が1目
で分かります。図々しいと思いますが、是非教えてください。VBAを一寸でも理解したいです。
(ケン)

 target.entirecolumn.select replace:=false か何かだと思うんですけど、それが
 うまくいかない。だれか教えてください。複数領域選択は、上の式ではないようです。
 どう書くんですか?

 Public Ordr As Integer
 Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As   Boolean)
 Cancel = True
 Application.ScreenUpdating = False

 If Ordr = 0 Then
   Target.EntireRow.Select
   Ordr = 1
 Else
   Target.EntireColumn.Select
   Ordr = 0
 End If
 Target.Activate
 Application.ScreenUpdating = True
 End Sub


 皆様、いろいろ考えてくださってありがとうございます。

 しかし、申し訳ありませんがまだ実用的ではありません。
 実用にたえるにはどうしても以下の2点が必要です。

 1)右クリックしたときだけ、などではなく *常に* 行、列が
   ハイライトされること。最低限でも、セルに入力しているときに
     ハイライトされること。

   例えば、列Aに名前が入力されており、画面右端のほうの列Eに対応する住所を
   入力したいとします。列Eの正しい行に住所を間違いなく入力するには、
   カーソルを移動させてハイライト行が上下に移動するのを目で
   見ながら、カーソルが対応する名前のある行と同じ行にいることを
   確認し、入力するのが理想なのです。

 2)行・列をハイライトする方法は背景色の変更でも何でもかまいませんが、
   ハイライト後は元のセルの書式に戻すこと。

   ハイライト後白に戻す、という意味ではなく、例えばもともと
   背景色がグレーであるようなセルと同じ行または列にカーソルが来た場合、
   このグレーのセルもハイライトされて背景色が変わるわけですが、
   カーソルがこのセルと違う行、列に移動してこのセルのハイライトが
   解除になったらこのセルの背景色は再びグレーに戻ること。 

   さもないと、もともと色付けしてある表の上で使うと背景色が
   変わって無残なことになってしまいます。

 ちょっと注文が多すぎますか・・・ (Achilley)

 Private Sub Worksheet_SelectionChange(ByVal Target As Range)
 If WsFlg = 0 Then
   WsFlg = 1
   Application.ScreenUpdating = False
   Range(Columns(Target.Column).Address & "," & Rows(Target.Row).Address).Select
   Target.Activate
   Application.ScreenUpdating = True
 End If
 WsFlg = 0
 End Sub

 通りすがりの者さん有難う御座います。これらのコードはコピペして僕の宝箱にしまっておき、
勉強さしてもらいます。有難う御座いました。(ケン)

 いえいえこれは、ケンさんのアイディアです。

 Private Sub Worksheet_Change(ByVal Target As Range)
   WsFlg = 0
   Call Worksheet_SelectionChange(ActiveCell.Offset(1, -1))
 End Sub


 私も通りすがりの者さんのをパクって作ってみました(汗)。
 (ramrun)

 Dim WsFlg As Byte, AtFlg As Byte

 Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As  Boolean)
    If AtFlg = 0 Then
        AtFlg = 1
        CommandBars("Cell").Enabled = False
    Else
        AtFlg = 0
        CommandBars("Cell").Enabled = True
    End If
 End Sub

 Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If AtFlg = 1 Then
        Dim Cl1 As Long, Cl2 As Long, Rw1 As Long, Rw2 As Long
        If WsFlg = 0 Then
            WsFlg = 1
            Cl1 = Range(Target.Address).Column
            Cl2 = Range(Target.Address).Columns.Count
            Rw1 = Range(Target.Address).Row
            Rw2 = Range(Target.Address).Rows.Count
            Application.ScreenUpdating = False
            Range(Range(Columns(Cl1), Columns(Cl1 + Cl2 - 1)).Address & "," & _
                  Range(Rows(Rw1), Rows(Rw1 + Rw2 - 1)).Address).Select
            Target.Activate
            Application.ScreenUpdating = True
        End If
        WsFlg = 0
    End If
 End Sub


 (ramrun)冷奴をつまみにビールを飲むようになりますた

 Cl = Chr(Target.Column + 64)
 Rw = Target.Row
 Rg = Cl & ":" & Cl & "," & Rw & ":" & Rw
 Range(Rg).Select


 さらにいろいろとありがとうございます。

 私の使っているのは Excel 2000 です。Excel 2002 では行番号・列番号
 の色が変わるのですか。知りませんでした。でもやっぱり番号だけでは
 十分だとは思えません。

 ramrunさんがウィンドウ枠の固定のことをおっしゃっていましたが、
 それでもやはり固定された列がハイライト表示されるわけではないので
 あまり役に立たないのです。
 (Achilley)

 ところで 「使えた」もしくは 「使える」 のかどうか気になるところです。

 どのような表なのか分かりませんが、例えば見出し列を固定して、
 その見出し列のすぐ隣に見たい列をスクロールしておけばよい気がします。
 ウィンドウの分割の線を一時的に使ってもいいかも。

 画面の真ん中で作業しようとするから他の行列が目につくのでは?
 画面の端、もしくは固定したところに見たい行列を当てて作業すれば
 他の行列は目につきませんけど...
 これ、Achilleyさんが最初にいっているような定規を当てるやり方ですよ。
 私はいつもそう使っていて、不自由に感じたことは無いものですから。
 (ramrun)

 通りすがりの者さんの作を コピペ可 にできないか悪戦苦闘してたら(結局未完成 私にゃ一生無理だ)
 ramrunさんが NewVersion で出品?されてるではありませんか。
 DoubleClick で切り替えですね。 行・列番号で選択してるので何らかの制限は仕方ないことですかね。
 しかし作業中に行丸ごと、列丸ごと 色がついたり反転したりとすごい事になってますね。。。

 ramrunさん、Excel2002 羨ましい! 私に買って下され(笑) その前に PC 替えねば(爆)   (jun53)

 皆さん勉強さして頂いています。もう僕の宝箱は宝の山です。ただ自分のレベルが追いつかない
ですが・・・(^_^;  (ケン)

 ramrun さんのおっしゃるようにすればもちろん間違いは減りますが、
 やっぱり見にくいのです。もう何年もいろいろと試行錯誤していますが、
 能率的に間違いを減らして入力するには
 このような機能があることが理想的というのが私の結論です。

 頑張って文章で説明してみます。

 例えば、列Aに氏名があって、列Bにデータを入力しているとします。
 で、列Aを横目に見ながら列Bでカーソルを上下させて、
 正しい氏名と同じ行にいるかを確認し、データ入力をしたいわけです。

 この際に重要なのは、カーソルは列Bにありながら目は列Aを
 見ていたいということです。間違いやすい似たような名前が列Aに
 ずらっと並んでいれば列Aを一生懸命見なくてはなりませんから。
 列Aの名前があっているかを確かめるのにその左隣の
 列番号が太字化されるとか、右隣の列にカーソルがあるかを
 見るとかいうのでは意味がないのです。
 列Aを注視していないと間違えてしまいます。
 (大げさかと思われるかもしれませんが、
 大量のデータを入力すれば1つや2つは間違えますし、
 たとえ間違えないとしても必要以上に目を行ったり
 来たりさせるのは疲れます)。

 ですから、最善な方法は、列Aの該当セルが
 ハイライトされることなのです。
 それならば列Aを見て、正しい名前の入ったセル自体が
 ハイライトされたことを確認してから目を列Bに移して
 安心して列Bにデータを入力することができます。

 最後に肝心の「使える」か、ということですが、
 ramrun さんのコードはかなり使えると思います。
 ハイライトとコピペを同時に使えるならば
 もちろんそれがベストなのですが、
 既に実用にたえると思います。
 今度実際に使ってみます。
 どうもありがとうございました。
 (Achilley)

 なるほど。
 かなり詳しく書いて頂けたおかげで、状況がわかりました。
 もしかしたら、メニューの[データ]-[フォーム]が役に立つかもしれません。
 もうすでに試しているならゴメンナサイ(汗)。

 行列をハイライトさせ処理後は元に戻すとなると、各セルの色を事前に記録して
 おかねばなりません。
 普通はこういう場合、排他的論理和を使って色を反転表示させます。
 でもそうするとハイライトになるとは限りませんし、処理も重くなるでしょう。

 Excelはそもそも表計算ですから、機能の限界なのだと思います。
 Access(データベース)へ移行したほうがいいのかもしれません。

 (ramrun)

私もAchilleyさんと同じことができないかと思い、
検索してここに来ました。確かにどのように検索すればいいのか悩みました。

あれこれ探している内に、下記ソフト(Excelアドイン)を見つけました。
私はこれで超満足です。もう解決されているかもしれませんが、
ご参考になれば。。。

Vector
http://www.vector.co.jp/soft/winnt/business/se465131.html

作者HP
http://full-link.jp


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.