[[20160130083620]] 『セルに色を付ける』(セイラ) ページの最後に飛ぶ

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

 

『セルに色を付ける』(セイラ)

教えていただけたら幸いです
下記のようにマクロを組んでいますが

別ファイルからシートからコピペした時
マクロが動いてくれる様にするには
どのようにしたらよろしいのでしょうか
よろしくお願いいたします

Sub 色()

Dim R As Range

Set Target = Range("A:I")
If Intersect(Target, Range("I:I")) Is Nothing Then Exit Sub
For Each R In Intersect(Target, Range("I:I"))
Range(Cells(R.row, 1), Cells(R.row, 9)).Interior.ColorIndex = 0
Select Case R
Case "A1"
Range(Cells(R.row, 1), Cells(R.row, 9)).Interior.ColorIndex = 36
Case "A2"
Range(Cells(R.row, 1), Cells(R.row, 9)).Interior.ColorIndex = 36
Case "B1"
Range(Cells(R.row, 1), Cells(R.row, 9)).Interior.ColorIndex = 37

Case "B2"
Range(Cells(R.row, 1), Cells(R.row, 9)).Interior.ColorIndex = 37

End Select

Next

End Sub

< 使用 Excel:Excel2010、使用 OS:Windows8 >


>別ファイルからシートからコピペした時
>マクロが動いてくれる様にするには
そういう特定のイベントは無いですね。

(コピー云々を考えずに)普通にChangeイベント処理で対応したら
何かまずいことがありますか?

ところで、提示されたマクロは、
・常に(IfはいつもFalseで、Exit Subすることはありません)
・I列のすべてのセルに対して処理を行う
ものになっていますが、これは意図した動作ですか?
実際に使っているんですか?

(γ) 2016/01/30(土) 09:37


 すでにγさんから指摘がありますが、【コピペした時のみ】という判定、粘り強く、こつこつとコードを重ねれば
 できないことはないと思いますが、通常のChangeイベントで処理するのがよろしいのでは?
 もしかしたらコピペ後、I列のセルを手入力で変更する場合もあるかもしれませんし、その場合に対処しないと
 シート上のI列の値とその行の色の状態が規定外の組み合わせになるかもしれませんので。

 アップされたコードそのものは、もしかしたら、かって Changeイベントに書かれていたものを移植して
 引数として渡されていた Target を無理やり(?)マクロ内で設定したのかもしれませんね。
 なので、結果としては無条件実行になっています。

 テーマとは離れますが、分岐条件やループが入り組んだコードですので、インデントを付けて記述するようにしましょう。
 (というか、コードは常にインデントをつけて記述しましょう)
 また、モジュール先頭に Option Explicit を記述し、プロシジャ内で使う変数についてはすべて明示的に定義するようにしましょう。

 以下、コード例です。
 シートのシートタブを右クリックしてでてきたところ(シートモジュール)にいかを貼り付けて試してみてください。

 ★γさんからの重要な指摘、I列のすべてのセルを処理するようになっている構え、そのままでアップ。
  そこを訂正しました。(11:45)

 Private Sub Worksheet_Change(ByVal Target As Range)
    Dim R As Range
    Dim myArea As Range
    Dim mycix As Long

    Set myArea = Intersect(Target, Columns("I"), UsedRange)
    If myArea Is Nothing Then Exit Sub

    For Each R In myArea.Cells
        mycix = xlNone
        Select Case R.Value
            Case "A1", "A2"
                mycix = 36
            Case "B1", "B2"
                mycix = 37
        End Select

        R.EntireRow.Range("A1:I1").Interior.ColorIndex = mycix

    Next

 End Sub

(β) 2016/01/30(土) 11:40


Γ様  ベータ様
有難う御座います

下記の件はその通りです

アップされたコードそのものは、もしかしたら、かって Changeイベントに書かれていたものを移植して

 引数として渡されていた Target を無理やり(?)マクロ内で設定したのかもしれませんね。
 なので、結果としては無条件実行になっています。

実際勉強不足で 落ちてるコード改良するのが正直精一杯でして
無駄なコード たぶん有るだろうなって思うところ
動けばいいで 先行してるのが事実です
お恥ずかしいところです

今後ともよろしくお願いいたします

(セイラ) 2016/01/31(日) 07:24


コメント返信:

[ 一覧(最新更新順) ]


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