[[20050115133859]] 『セルの色を変える?』(トマト) ページの最後に飛ぶ

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

 

『セルの色を変える?』(トマト)

 セルでC5を選ぶと左側の5と上側のCの所が
 色が変わるのですが
 その様な感じでC5を選ぶとA5のセルの色を
 変える事なんて出来るのでしょうか?
 ちなみにC6を選ぶとA6、D5を選ぶとA5と
 言う感じに選んだ行のA列のセルの色を
 変えたいのですが・・・

 (トマト)


 今日はマクロ達人の方々があまりお見えではないので、取り合えず私のやっている方法です。
 作業セルを例えば Z1 として、色を変えたいA列のセルに条件付き書式で
 数式が− =ROW()=$Z$1 とし、書式−パターンで好きな色を選択します。
 次に、シートの見出しを右クリック−コードの表示をクリック、
 表示されたウインドウに下記のコードをコピーして下さい。
 尚、C5:C7 のように範囲を選んだ場合でも1番上のセルしか色が付きません。
 まだまだマクロは未熟なもので、、、。(純丸)

 Private Sub Worksheet_SelectionChange(ByVal Target As Range)

   Range("Z1") = Target.Row

 End Sub


 出来ました
 ありがとうございました。
 かなり困っていたので助かりました。
 また、何かありましたらそのときはお願いします。

 (トマト)


 解決済みで余談ですが、複数セルの場合は以下のような感じでしょうか。
 ただ、飛び飛びの場合はループさせての処理になるのかな・・・。
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Const MyColor As Integer = 34
    With Cells(Target.Row, 1).Resize(Selection.Count)
        If .Interior.ColorIndex = MyColor Then
            .Interior.ColorIndex = xlNone
        Else
            .Interior.ColorIndex = MyColor
        End If
    End With
End Sub
 同じ色の行を選択したときは消すようになってます。

 的外れでした。_/ ̄|○ il||li
こうかな・・・。
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Const MyColor As Integer = 34
    Range(Cells(1, 1), Cells(65536, 1)).Interior.ColorIndex = xlNone
    With Cells(Target.Row, 1).Resize(Selection.Count)
        .Interior.ColorIndex = MyColor
    End With
End Sub

 (川野鮎太郎)


 さすが鮎さん、作業セルなど関係なく、複数セルにも対応して完璧ですね。私もこれに切り替えます。
 トマトさん、私のはやめてこちらに切り替えてましょう。
 (純丸) やっぱり達人は違う。


 と・と・とんでもないですぅ・・・。
 達人の域には到底達していません(^_^A;               え?判ってるって?(笑
 (川野鮎太郎)


 完璧・・と言っておいて何ですが、色を変えたい行にもともとついていた色も消えてしまいますよね。
 これを回避するには色をクリアするセルを設定しないといけませんか? 例えばイベント発生直前の
 セルアドレスを記憶している、、、なんてことは無いのでしょうか? それがわかればそこだけ消せる理屈ですが。
 (純丸)


 あ!そっか・・・。範囲指定で消すのでそこで区別しているつもりだったけど、
 条件付書式は、書式より条件のほうが優先でしたね。

 う〜ん(/-_-\)どしよ・・・。

 うっと、えっと、あの・・・(_ _ ;)尸"マイリマシタ・・・
 条件付書式との併用がベストみたいです。(^_^A;
  
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim MyRow As Long
If Target.Count > 100 Then Exit Sub '100より多く選択はダメ。
    MyRow = ActiveCell.Row
    Range("Z1:Z65536").ClearContents
    MyCount = Selection.Count
    For i = 0 To MyCount - 1
        Cells(MyRow + i, 26) = MyRow + i
    Next i
End Sub

 こうして、条件付書式で純丸さんの案で=ROW()=$Z$1を=ROW()=Z1 (^_^A;

 でもセルを複数選択で・・・・・下から上に選んじゃ(*/∇\*)イヤン

 (川野鮎太郎)


http://ryusendo.no-ip.com/cgi-bin/upload/src/up0212.xls

 こんな表なもんで、、、。まだ上のコードをセットする前のファイルですが、うまくいきそうですね。
 鮎さん、感謝、感謝、m(__)m。トマトさん、レスをお借りし、失礼しました。(純丸)


 複数列にまたがって範囲選択すると _/ ̄|○ il||li になってしまう、、、(泣)。(純丸)


 そうなんですよね(;^_^A アセアセ
 改良の余地ありです。
 ただ上記も速度が遅いので以下のほうが良いみたい。
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim MyA() As Long
If Target.Count > 100 Then Exit Sub
    MyCount = Selection.Rows.Count
    MyRow = ActiveCell.Row
    Range("Z1:Z65536").ClearContents
    ReDim MyA(MyCount - 1, 0)
    For i = 0 To MyCount - 1
        MyA(i, 0) = ActiveCell.Row + i
    Next i
    Cells(MyRow, 26).Resize(MyCount).Value = MyA()
End Sub
 (川野鮎太郎)


 速度気にせず・・・(;^_^A アセアセ
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim MyC As Long
Dim c As Range
    If Target.Count > 100 Then Exit Sub
        Range("Z1:Z65536").ClearContents
        For Each c In Selection
            Cells(c.Row, 26).Value = c.Row
        Next c
End Sub
 少しおかしかったので修正しました。
 1/15 22:30 

 (川野鮎太郎)

 ぱっとしか見ていないので見当違いだったらごめんちゃいです。
Option Explicit
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim C As Range, i As Long
Range("A2:B15").FormatConditions.Delete
If Intersect(Target, Range("E2:F15")) Is Nothing Then Exit Sub
For Each C In Selection
i = C.Row
With Range("A" & i, "B" & i)
    If .FormatConditions.Count < 3 Then
        .FormatConditions.Add Type:=xlExpression, Formula1:="=ROW()=" & i
        .FormatConditions(1).Interior.ColorIndex = 37
    End If
End With
Next
End Sub
http://ryusendo.no-ip.com/cgi-bin/upload/src/up0214.xls
(SoulMan)


 質問した後、急遽会社を出て先ほど帰宅しました。遅レスすみません。
 SoulManさんまで登場していただき、 ありがとうございました。
 サンプルシート、うまく動いているようです。
 鮎さんもいろいろ提示いただいてありがとうございました。(純丸)

 横からすみません
 純丸さんの上記exlの例で
 条件書式の書き方をお教えください。
            B          C           D
    1    ノート前残 えんぴつ前残 ファイル前残
    となっていますので・・・、

 E5をアクティブの時
  B5を青、C5とD5を透明
 F5をアクティブの時
  C5を青、B5とD5を透明
 G5をアクティブの時
  D5を青、B5とC5を透明
 としたい。
   質問
 =Row=$D$20の条件書式に、どういう書き方をすればいいのでしょうか、
 お教えください。
 (Ty)


 To Tyさん
 マクロのコードを以下にして、B5の条件付書式を =AND(ROW()=$D$20,COLUMN()=$D$21-3)
 として、C,D列にコピーしてみてください。
 
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
   If Target.Count <> 1 Then Exit Sub
   Range("D20") = Target.Row
   Range("D21") = Target.Column
End Sub

 (川野鮎太郎)

 純丸さん、ありがとうございました。
 朝からずっと条件書式とマクロを考えていましたが、できませんでした。
 条件書式はわかったんですが、
 Target.Columnを Target.Colmunとしていました。
 今わかりました。
  (Ty)


 Tyさん、こんばんは。え〜っと、2つ上のレスは自分ではありません。どなたですかぁ?
 いずれにせよ、代わりに回答していただき、ありがとうございました。今日は寒くて
 1日中、こたつでゴロゴロしてました。(純丸)


 名前入れるの忘れてました(^_^A;
 (川野鮎太郎)


 鮎さんだったんだ。フォロー感謝です。(純丸)

コメント返信:

[ 一覧(最新更新順) ]


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