• ベストアンサー

エクセルで、あるセルを参照に空白のセルを塗りつぶす方法

仕事で毎時間の各商品の売れ具合を、エクセルで日々表にしています。表は多い(多)普通(普)少ない(少)無し(無)と数段階に区切って表示して、それぞれに(多)なら赤、(普)なら黄~とそのセルを塗りつぶしています。表内のセルには、条件付き書式をかけているのでA商品の売り上げ9時台が「普通」なら、対象のセルに普と入力すると、そのセルは自動的に黄色で塗りつぶされるようにしています。 そして、9時台が「普通」で、同じ商品の10~14時台まで同じ「普通」の売り上げが続き、15時に「多い」になったら、10~14時台のセルを9時台と同じ状態が続いたということで、セルの中には何も入力せず、色だけ黄色で塗りつぶしています。 (一つの商品は時間毎に右のセルに移動して、始めから終わりまで同じ行で表示しています。) 前置きが長くなってしまいましたが、質問させていただきたいのは、 あるセル(例:セルA2)に「普」と入力し、塗りつぶしも(条件付き書式で自動的に)黄色になった場合に、そのセルの右隣のセル(例:セルB2)に何も入力されていなければ、同じ色(黄色)に塗りつぶし、さらにその右隣のセル(例:セルC2)にも何も入力されていなければ、これも同じ色(黄色)に塗りつぶす~という作業を、同じ行の右隣のセルに何か入力されるまで繰り返す。という指示をエクセルに与えることは可能でしょうか?(ソフトはエクセル2000を使用しています) 自分で関数で色々試してみましたが、出来ずに困っています。 これは、マクロ(VBA?)というもので、出来るのでしょうか? 私はマクロを全然使ったことが無いのですが、もしマクロで出来る場合、マクロ初心者の私では難しいでしょうか? 長々とした、わかりづらい質問で申し訳ありません。 宜しくお願いいたします。

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

  • ベストアンサー
noname#148473
noname#148473
回答No.4

#1です。条件付書式であることをすっかり忘れていました。失礼しました。 結局、セルに入力された文字によって判別するように仕様変更しました。よって、条件付き書式の設定は不要になります。 #1に書いたのと同じ手順で実行してください。 '------------------------------------------------ Sub 自動塗りつぶし()      Dim c, d As Variant   Dim i, k As Integer   Dim cl As Long         For Each c In Selection     k = c.Column     For i = 0 To -k + 1 Step -1       d = c.Offset(0, i).Value       Select Case d         Case "多"           c.Interior.Color = QBColor(12)           Exit For         Case "普"           c.Interior.Color = QBColor(14)           Exit For         Case "少"           c.Interior.Color = QBColor(9)           Exit For       End Select     Next   Next    End Sub '------------------------------------------------ なお、ご質問には「少」の時の背景色が書かれていませんでしたので、サンプルでは緑にしてあります。変更したい場合は、         Case "少"           c.Interior.Color = QBColor(9) の部分の「QBColor(9)」のカッコ内の数値を、下記の表にしたがって変更してください。 8 灰色 9 青 10 緑 11 シアン 12 赤 13 マゼンダ 14 黄色 15 白 最後になりましたが、imogasiさん、ご指摘ありがとうございました。

demand
質問者

補足

ご回答ありがとう御座います。 そして返信が送れて、申し訳ありませんでした。 回答を2件頂いた時点で、自分で実際に教えていただいた方法で試して補足を入力し、送信が終わってから回答が増たことに気付きました。それなので、回答1に対する補足は無視して下さい。 今回教えていただいたマクロの表を回答1と同じ手順で操作しましましたら、一瞬でセルが塗りつぶされました。 こんな素晴らしいことが出来るなら、自分でもマクロを少しずつ覚えていこうと思いました。 またエクセルでどうしても分からないことが出てきたら質問させていただきます。 その節は宜しくお願い致します。

その他の回答 (5)

回答No.6

#2で回答した者です。 何の解説もせずすみません。 http://oshiete1.goo.ne.jp/kotaeru.php3?q=591014 にLookupの数字のセルの話を説明していますので見てください。 (分かりにくいかな?) lookupやMatch関数の場合、検索の型というのがあって 1.一致したものがなければエラーを表示するか、 2.なければ、検索値の値を超えない物の中で一番大きな値を表示するか という指定ができます。 今回使用しているのは2の方で、通常 こちらの場合には、ソート順に並んでいる事が必要になります。 (今回の場合は、最後の字がわかればいいのでソートの必要はありませんが) そして、"熙"(第2水準の一番最後の文字)という文字は今回出てきませんので、 自分のセルより左側のセルで"熙"を超えない一番大きな 字(最後の入力セル)を持ってきます。 ですから、"普","多","少"という文字よりも大きな字 (ソートしたときに3文字より後になる字) ならどんな字でも構いません。 ・・・と説明しながら(説明が間違っていたらすみません) =OFFSET($A$2,0,MATCH("熙",$A$2:A2)-1)="普" のかわりに =LOOKUP("熙",$A$2:A2)="普" でいい事に気づきました。 もし、使われるようでしたらこちらに変更してみてください。 ("黑"が字の中で一番大きい字かもしれません)

demand
質問者

お礼

再質問に対しても、ご回答頂きありがとう御座います。 "熙" は、この式で文字の並び順で使う文字だったのですね。 文字にも数値のように大小があることを始めて知りました。 教えていただいたHPを拝見させて頂きました。 以前から、あまり分からなかったオフセットやルックアップ関数について説明があり、うれしかったです。 またエクセルでどうしても分からないことが出てきたら質問させていただきます。 その節は宜しくお願い致します。 本当にありがとう御座いました。

  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.5

コードで解決しているようですが、参考に条件付き書式の条件を作ってみました。 A2セルの例で、『数式が』で、下記のように式をセットします。  条件1: =INDEX($A2:A2,,MATCH("",$A2:A2,-1))="多"  条件2: =INDEX($A2:A2,,MATCH("",$A2:A2,-1))="普"  条件3: =INDEX($A2:A2,,MATCH("",$A2:A2,-1))="少" パターンは好きな色をセットします。 塗つぶしたい範囲にコピーします。

demand
質問者

お礼

ご回答ありがとう御座います。 試してみた所、こちらも上手く塗りつぶすことが出来ました。 私の持っているエクセル関数の本は、インデックスとマッチ関数の組み合わせを使う具体例として、大量にデータがある一覧から、2つの条件が交差したセルの値を求める方法が載っていて、まさかこの組み合わせを条件付き書式に入れると、このような作業が出来るとは、まったく知りませんでした。 またエクセルでどうしても分からないことが出てきたら質問させていただきます。 その節は宜しくお願い致します。

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.3

#1ご回答のfuji2002さんへ。 基本的にご質問者が回答のテストをして、良否を判断すれば良いことは重々存じておりますが、横から口出しする失礼をして済みません。 また私の非力から、下記が見当違いの節は、お詫び申し上げます。 実は私もVBAでの回答を考えていまして、骨格は出来てテストしましたらうまく行きません。(そのうちふとと見ると回答が出ました)。旨く行かないのはなぜだろうといろいろやって見ますと (1)Interior.ColorIndex (2)FormatConditions(1).Interior.ColorIndex (3)FormatConditions(2).Interior.ColorIndex (4)FormatConditions(3).Interior.ColorIndex がそれぞれ違うようで、(特に(1)と(2)は。多分セットされる場所が違うらしい。値がセットされると、(2)以下が優先された感じになるよう。)、質問者は(2)(3)(4)の条件付書式で、同行の列の左の方のセルの色書式を設定しているはずで、#1はそれを聞いておられないコードのようでうまく行くでしょうか。(A3に「セルの値が」「等しい」「2」で黄色を設定して、私がやったところ、変化なしでした。) 質問者はVBAになれておられないようなので、ご作成者で、もう一度うまく行くかテストをして頂けませんか。 (私は「FormatConditionsのアイテム1か2か3のどれかが1つでも設定されているか」を聞くプロパティが、本やヘルプを調べても判らずVBAでは断念しました。かといって条件つき書式を使っても回答は出そうにないですが。)

demand
質問者

お礼

ご回答ありがとう御座います。 そして回答1に対する補足が遅れて申し訳ありませんでした。 回答を拝見すると、マクロについての部分は難しくて分かりませんでしたが、回答するためにマクロを作って頂いていたんですね。 ありがとう御座います。 またエクセルでどうしても分からないことが出てきたら質問させていただきます。 その節は宜しくお願い致します。

回答No.2

A2セルの条件付き書式で  1つ目 「数式が」「=OFFSET($A$2,0,MATCH("熙",$A$2:A2)-1)="普"」      書式ボタンで パターン「黄色」  2つ目 「数式が」「=OFFSET($A$2,0,MATCH("熙",$A$2:A2)-1)="多"」      書式ボタンで パターン「赤色」  3つ目 「数式が」「=OFFSET($A$2,0,MATCH("熙",$A$2:A2)-1)="少"」      書式ボタンで パターン「何色?」 後は右側にコピー貼り付けでどうでしょうか? 考え違いをしていたらすみません。

demand
質問者

お礼

素早いご回答ありがとう御座います。 回答を拝見すると、条件付き書式の中に関数を組み込む方法で、自分で試してみたときは出来ませんでした。 しかし、今回教えていただいた方法を試してみたら文字を打ち込むと右隣のセルが指定した範囲まで一瞬で塗りつぶされて、成功しました。 ありがとう御座いました。 教えていただきたいのですが、マッチ関数の中にある"熙"の意味が分かりません。エクセルのヘルプで検索しても「該当結果がありません」と出ます。 それに、関数を見てみると循環参照のエラーが出できそうでしたけど、そんなこともありませんでした。

noname#148473
noname#148473
回答No.1

VBAで作ってみました。 ご質問の条件が少々複雑でしたので、ご希望通りのものになっているか自信がありませんが、試してみてください。 使い方ですが、メニューバーから「ツール」→「マクロ」→「VisualBasicEditor」を選びます。VisualBasicEditorが別ウィンドウで起動します。VisualBasicEditorのメニューバーの「挿入」→「標準モジュール」を選びます。 画面の右半分に真っ白な広いウィンドウが開きますので、ここに下記の点線内の内容を貼り付けます。 '------------------------------------------------ Sub 自動塗りつぶし()      Dim c As Variant   Dim i, k As Integer   Dim cl As Long         For Each c In Selection     k = c.Column     For i = 0 To -k + 1 Step -1       cl = c.Offset(0, i).Interior.Color       If Len(c.Offset(0, i).Value) > 0 Then         c.Interior.Color = cl         Exit For       End If     Next   Next    End Sub '------------------------------------------------ 貼り付けたら、Excelのほうに戻って、 処理を行いたい範囲を選択します。セル1つだけでもOKです。 メニューバーから「ツール」→「マクロ」→「マクロ」を選びます。「マクロ」と書かれたウィンドウが画面上に開きます。「自動塗りつぶし」という行が反転していることを確認して(反転していないときは、クリックして反転させる)「実行」ボタンを押します。 処理内容としては、選択されたセルひとつひとつについて左隣のセルに何らかの文字が入っているか確認し(文字が入っていなければ更に左を探す)、文字が入っていれば、処理中のセルの色を文字の入ったセルと同じ色に変更します。この作業を選択されたセルの数だけ繰り返しています。 正常に動かない、よくわからない点などありましたら、補足をお願いします。

demand
質問者

補足

素早いご回答ありがとう御座います。 しかもマクロの表まで作っていただき、さらに詳しい 入力の方法まで説明していただきありがとう御座います。マクロ初心者の私には(マクロの表を貼り付ける)罫線のない真っ白なシートが出てきて驚いています。 さっそく教えていただいた方法を試してみました。 しかし実行ボタンを押しても、セルを塗りつぶすことが出来ませんでした。 参照元(左隣)のセルの設定を色々変えてやり直してみた所、参照元のセルに文字を入力する場合、「普」と入力して、ツールバーの塗りつぶしの色から黄色を指定して塗りつぶすしてから、マクロの実行ボタンを押すと指定した右側のセルが一瞬で同じ色に塗りつぶされますが、 参照元のセルに「普」と入力すると黄色で塗りつぶすように(条件付き書式を)設定した場合は、実行ボタンを押しても右側のセルになんの変化もありませんでした。(「多」「少」でも同じ結果でした。) 条件付き書式の内容は、「セルの値が」「次の値に等しい」「="普"」です。 教えていただいた方法を試すときに手違いがあったかもしれません。出来れば条件付き書式の塗りつぶしでもマクロが実行されるか試していただけないでしょうか? 宜しくお願いいたします。

関連するQ&A