• ベストアンサー

エクセルVBAのイベントで色付け

以前条件付書式で対応できない4色以上の問題で質問しましたが、 応用がきかず再度質問に参りました。 データリストの表です。 2行目に見出しがあります。B4:G4とします。 その下(3行目)に日にちを入力するようにしています。3行目から10行目 とします。 つまりB4:G10までが対象になります。 2行目にはそれぞれ違った色を付けています。 この様な場合で、 B4:G10に日にちが入ると、その列にある2行目の見出しの色と同じ 色を付ける、というようにしたいのですが、前回教えていただいた ものを参考にしてみたのですが、応用ができませんでした・・・ どなたか教えていただけないでしょうか。

質問者が選んだベストアンサー

  • ベストアンサー
  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.5

#1-4のmerlionXXです。 さきほど回答したダブルクリックの件ですが、#3でWendy02さんがご回答のように日付か否かの判断をいれてやれば何もダブルクリックを無効にする必要はないですね。修正します。 以下だけで対応可能です。 Private Sub Worksheet_Change(ByVal Target As Range) Dim c As Integer If Intersect(Target, Range("B3:G10")) Is Nothing Then Exit Sub If Target.Cells.Count > 1 Then MsgBox "対象セルはひとつにしてね。" Exit Sub End If c = Target.Column If IsDate(Target.Cells.Text) Then Target.Interior.ColorIndex = Cells(2, c).Interior.ColorIndex Else Target.Interior.ColorIndex = xlNone End If End Sub

4k3s4r3
質問者

お礼

ありがとうございました。ばっちりできました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (5)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.6

#3の回答者ですが、 >どういう訳か日付を入れても >色が変わりませんでした。実際の範囲はF4:AZ503で、 おそらく、見出しの色が間違ってはいないようですから、後は、ここの場所です。  If IsDate(Target.Cells.Text) Then ここで判定される、日付とは、日付と判定されるべきものですから、数字でもシリアル値でもありません。あくまでも、書式で日付と判定できるものです。なお、Taget.Cells は、ここでは、Target.Cells(1) と同じ意味です。

4k3s4r3
質問者

お礼

たびたびすみませんでした。日付をユーザー定義で「05/25」のように しています。2008/5/25のようにも変えたりしたのですが、状況が 変わりまんでした。私の気づいていない部分でミスがあるかもしれ ませんが・・・。

全文を見る
すると、全ての回答が全文表示されます。
  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.4

> 範囲内で、ダブルクリックしても色がつきますが、こういうものでしょうか? ダブルクリックで色がついたのではなく、ダブルクリック後に確定(Enterキーまたは矢印キー)したからChangeイベントが発生したのです。範囲内でダブルクリックしても無反応になるようにするなら同じシートモジュールに以下を追記してみてください。 Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) If Intersect(Target, Range("B3:G10")) Is Nothing Then Exit Sub Cancel = True End Sub

全文を見る
すると、全ての回答が全文表示されます。
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんばんは。 すでに回答は出ていますが、私の考え方を示しておきます。 基点となるセルが決まっている場合には相対位置で言いますが、イベント・ドリブン型は、あくまでも、ユーザー設定が基本ですから、通常は、絶対位置のセルのアドレスを使います。私の経験では、ご質問の相対位置の考え方は、マクロをより複雑化させますので、自分で理解しにくくなります。 なお、セル等の位置情報は、ご自分で直してください。 ---------------------------------------------- Private Sub Worksheet_Change(ByVal Target As Range) 'セルを二つ以上選択したりしたら、不可 If Target.Cells.Count > 1 Then Exit Sub '色を変える範囲 If Not Intersect(Target, Range("G4:G10")) Is Nothing Then Exit Sub   'もし、日付なら色を変更する   If IsDate(Target.Cells.Text) Then     Target.Cells.Interior.ColorIndex = _     Cells(2, Target.Column).Interior.ColorIndex '元になる行(2)   Else    'そうでない場合は書式を含めて元に戻す     Target.Cells.Interior.ColorIndex = xlNone     Target.NumberFormat = "General"   End If End Sub '書式自体も戻さないと、一般の数字が日付に変更されてしまいます。 #以前の質問 http://oshiete1.goo.ne.jp/qa3994153.html 一応、確認はしました。

4k3s4r3
質問者

お礼

ご回答ありがとうございました。 ためさせていただいたのですが、どういう訳か日付を入れても 色が変わりませんでした。実際の範囲はF4:AZ503で、 見出しの行が3行目で、 If Not Intersect(Target, Range("F4:AZ503")) Is Nothing Then Exit Sub Cells(3, Target.Column).Interior.ColorIndex  としています。

全文を見る
すると、全ての回答が全文表示されます。
  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.2

もう回答は出ていますが 日付を入れたセルについて   セルの値 Target.Vakue   列 Target.Column   行 Target.Row で捉えられることは、前の質問回答でも出てたでしょう。 同列の第2行は    Cells(2,Target.Column) であることが思いつかないですか。 このセルの色は Cells(2,Target.column).Interior.ColorIndexで捉えられるので、Teget.Interior.Colorindex の値に をCells(2,Target.column).Interior.ColorIndex の値を代入すればよい。 新しい知見は何も必要ないと思うが。 ーー あと、条件が整えば色をつける範囲B4:G10のチェックですが、Interceptが定石ですが (下記は範囲内外検出テスト用) Private Sub Worksheet_Change(ByVal Target As Range) If Target.Row > 3 And Target.Row < 11 And Target.Column > 1 And Target.Column < 8 Then MsgBox "範囲内" Else MsgBox "範囲外" End If End Sub というようなものでも良いではないですか。

4k3s4r3
質問者

お礼

前回はありがとうございました。 今回もご回答ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。
  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.1

以前した質問の関連質問なら以前の質問へのリンクくらい張りましょうよ。 > 2行目に見出しがあります。B4:G4とします。 2行目ならB2:G2なのでは? > その下(3行目)に日にちを入力するようにしています。3行目から10行 とします。 > つまりB4:G10までが対象になります。 3行目から10行目ならG3:G10でしょう? 上記だとして、 Private Sub Worksheet_Change(ByVal Target As Range) Dim c As Integer If Intersect(Target, Range("B3:G10")) Is Nothing Then Exit Sub c = Target.Column Target.Interior.ColorIndex = Cells(2, c).Interior.ColorIndex End Sub もし見出しがB2:G2ではないのなら違ってきますが・・・。

4k3s4r3
質問者

お礼

こんばんは。リンクのことから、説明の間違い・・・すべて仰るとおりでした。スミマセン。 ためさせていただき、見事にできました。ただ、こういうものなのかわかりませんが、ひとつ疑問に思うことがあります。 範囲内で、ダブルクリックしても色がつきますが、こういうものでしょうか?

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • セルの色付け

    B列に何か文字でも数字でも入力されれば(空白でなくなれば) A列のB列と同じ行のセルに色がつくという設定をしたいと思います。 条件付書式で設定ができると思うのですが どうすればいいでしょうか?

  • エクセルでのセルの色づけ方法

    教えてください。 エクセルで、8000行、15列程度の表があります。 例えば、A2に、Aと入力すると、A2とA1の両セルが水色 Bと入力すると、A2とA1の両セルが黄 Cと入力すると、A2とA1の両セルが赤 他にも、例えば C4に、Bと入力すると、C4とC3の両セルが赤 Bと入力すると、C4とC3の両セルが黄 Cと入力すると、C4とC3の両セルが赤   などのように、A=水色   B=黄色   C=赤になるように 条件付き書式を設定し、その書式を他のセルへコピーして、 1000行位までは、ちゃんと保存できたのですが、8000行程度まで、コピーして、保存すると、『保存できません』と表示されてしまい、1000行以上は条件付き書式のコピーをしても、コピーはできますが、保存できないため、大変困っています。。。もしかして、条件付き書式には、書式のコピーができる制限があるのでしょうか?あとは、VBなどで対応 するしかないのでしょうか。VBもまったく分かりません。。 是非、よろしくお願いいたします。

  • エクセルで土・日のセルに幅広く色をつけたい

    エクセルで予定表を作成しています。A列に日付・BからH列まで項目を設けています。(A列は、33行目まで日付が入力されています) A列に条件付書式で、条件付書式の設定で条件(1)数式が=WEEKDAY(A33)=1  パターン  色  ブルー  フォント  赤 A列に条件付書式で、条件付書式の設定で条件(2)数式が=WEEKDAY(A33)=7  パターン  色  グリーン フォント  赤 の設定を行いました。 A列の 土・日のフォントが赤に、セルの色がブルー・グリーンになるのですがBからH列はセルに色がつきません。 A33:H33  までの設定にするとセルの色がグレーになります。 AからHまでセルに同じ色を表示する設定はあるのでしょうか。

  • Excelの日程表について

    日程表でB列とC列に日付を入れたら横についているカレンダーに関数や条件付書式を利用して、色を付けるようにしたいのですが、どのようにすればよろしいでしょうか? よろしくお願いします。

  • エクセルの色付けについて質問です

    こんにちは。お世話になります。 以前に似た質問をしたことがあるのですが、 どうか更に教えて下さい。 エクセルで1月2月はピンク3月4月は黄色と色付けをしたいのですが、 以前の質問で6色あるため条件つき書式ではできないことがわかりました。 そこでちょっと考えてみたのですが、 ボタンにマクロを記録させて、ピンクボタンとか黄色ボタンをつくり 色付けを簡単に行えるようにするのはどうかと考えました。 たとえばこういうことなんですが↓↓↓  A B  C D  E F  G  H   I  J  K 1桃 黄 青 水 赤 黒 灰    2 3 A~Gにはボタンをつけて、 2行目3行目も同じボタンをつけて H~Kの同じ行すべてに色をつける感じで…。 1行1行6個ボタンに記録させて、 根気強く頑張るかと思ったのですが、 もっとスマートな方法はきっとあるのでしょうね。 相変わらず説明がうまくなくてすみません。 やりたいことはご理解いただけるでしょうか? マクロは記録して簡単なことぐらいしか出来ないのですが、 もっとスマートな方法があれば教えて頂きたいのです! 宜しくお願い致します。 用はすごく簡単な操作で表に色がつけばいいのですが、 皆さんだったらどのようなやり方をしますか? ぜひ教えて下さい。

  • エクセルVBA 複合 条件付き書式の方法

    いつもお世話になっております。 エクセルで条件付き書式を設定したいのですが、複数の条件で、複雑な条件なので、 通常の条件付き書式ではできないと判断しましたので、質問をさせて頂きます。 私自身、VBAを読み取れるほどの知識は御座いません… どなたか少しの解説とヒントなどを頂けませんでしょうか? よろしくお願いいたします((+_+)) 添付の画像のように D列に「個数」、H列に「完了個数」、I列に「キャンセル個数」(すべて数値、表示はユーザー定義で"個"を追加しているだけです) B列やFG列などに手動または条件付き書式で色がついております。 条件: 2行目 D列には個数が入力され、H列には個数がなければ「塗りなし」 3行目 D列に入力された個数とI列に入力された値が違う時、「塗りなし」 4、6行目 D列に入力されている個数とI列の値が同じであれば「薄い黄色」になる 5行目 D列に入力された個数とI列に入力された値が同じであれば「グレー」になる 尚且つ、B列やF4G4など、手動で色を付けてあるセルは、その色を残す このような条件で設定したいのですが、VBA記述はどのようにしたらよいのでしょうか? 類似の質問回答を沢山見ましたが、初心者なので応用が利きません… 条件が複雑なので、こんなことできるのだろうかと不安です… どなたかヒントだけでも教えていただけないでしょうか? 何卒、よろしくお願い申し上げますm(__)m

  • エクセル 条件付書式設定の数式

    以下の条件で色の塗りつぶしを行いたいのですが、ご教授願います。 A列で同じ年月の中からの最終行と同行のB列を12か月分取得し、 色の塗りつぶしを条件付書式 か VBAにて行いたいです。 ABを範囲指定してからの条件付書式では、 数式で =ROW(A1)=MATCH(2009.01,$A$1:$A$100,1) で  1行A3とB3の色を変えることはできまたが、条件付書式 では3条件までですので、これでは対応できなくて困っております。    A  |B 2009.01 |10 2009.01 |20 2009.01 |40 ←このA3とB3を色変更 2009.02 |30 2009.02 |20 2009.02 |50 ←このA6とB6を色変更 2009.03 |10 2009.03 |40 ←このA8とB8を色変更 2009.04 |10 2009.04 |30 ←このA10とB10を色変更     :     : 2009.12 |10 2009.12 |30 ←このAとBを色変更 1ヶ月ごとの最終行(12個分)色を変える方法を宜しくお願いします。

  • 条件付書式で色づけしたセルの数をカウントしたい

    WINDOWS XP EXCELL 2003です。 いつもお世話になります。 それそれのタイトル行に 7~556の行があり、 在庫警告  D列  条件付書式で =E7<BS7 で赤色に塗りつぶしに 在庫数   E列  =F7-G7+BR7 注文    F列  =SUMPRODUCT((H7:BQ7)*(MOD(COLUMN(H7:BQ7),2)=1)) 出荷    G列  =SUMPRODUCT((H7:BQ7)*(MOD(COLUMN(H7:BQ7),2)=0)) 適正在庫数 BS列 数値を入力 何かいい方法をと思い色々調べましたが私が必要としているものが中々見つかりません。 条件付書式で =E7<BS7 で試行錯誤しました。 例えば 条件付書式で =(E7<BS7=”1”,””) とかで1がでればとCOUNT関数でできないとか 全然駄目ですよね。 御指導を仰ぎたいのは E列の条件付書式で赤と塗りつぶされたセルの数をカウント ができたらと思いますが何かいい方法はありませんでしょうか。 可能ならよろしく御願いします。

  • ExcelのVBAで、条件でセルに色付けしたい

    VBは超初心者です。どなたか教えてください。 データをシートに貼り付けた後の処理で、あるセルの値を判断して その行(範囲あり)を灰色に塗りつぶしたいのです。 よろしくお願いします。 例えば、A列のセルに"B"の文字が入っていたら "10B"の行(A2からC2)が灰色に。 A列 B列  C列 10A 1000  あさん 10B 1500  いさん 20A  300  うさん

  • 条件付書式設定の方法(エクセル)

    下記のような条件付書式を設定したいのですが、設定行数が約5000行となりますので出来るだけ簡単に設定する方法を、どうか御教示お願いいたします。 E列の条件付書式 =SUM($E$1:$E$5)=10000 ならばE1からE5は青色 =SUM($E$6:$E$10)=10000 ならばE1からE5はは黄色 E列は5行毎に青色と黄色を繰り返す F列の条件付書式 =SUM($F$1:$F$5)=500 ならばF1からF5は青色 =SUM($F$6:$F$10)=500 ならばF6からF10は青色 F列も5行毎に青色と黄色を繰り返す G列の条件付書式 =SUM($G$1:$G$5)=500 ならばG1からG5は青色 =SUM($G$6:$G$10)=500 ならばG6からG10は青色 G列も5行毎に青色と黄色を繰り返す よろしくお願いいたします。

このQ&Aのポイント
  • 新品のdcp914プリンターで印刷するとピンク色のみが出力されるトラブルが発生しています。
  • お使いの環境はWindows11で無線接続されています。
  • 関連するソフト・アプリや電話回線の情報は不明です。
回答を見る

専門家に質問してみよう