可能であればExcelで以下を行いたいです。
B1セルに“リンゴ”という文字が入っている場合は、赤セルすべてに"R"いう文字に入れる。
B1セルに“ぶどう”という文字が入っている場合は、青セルすべてにに"R"いう文字に入れる。
B1セルに“バナナ”という文字が入っている場合は、黄色セルすべてにに"R"いう文字に入れる。
と、いうように、B1の文字によってRを入れる個所が指定できるように定義したいです。
数式をどのように使うのか、またルールをどのように定義すると条件によって設定できるのか困っています。
御教授宜しくお願い致します。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答2件
0
Excelのワークシート関数でセルの色を判定できるものは用意されていません。
ですのでセルの色を判定するならVBAを利用するか、人が色を判断して色ごとに式をわける必要があります。
人が色を判断し式を変える手法についてはapoさんからアドバイスが出ていますので、私からはVBAを利用する方法をご紹介します。
VBAで実装
今回行いたいことは、
①B1セルの値を判断する
②B4以降のセルの色を判断する
③①と②の組み合わせを判断し、"R"の文字をセットする
です。
このうちどこまでをVBAに処理させるか?というところがありますが、ここは利用状況によって判断が必要になる部分です。
①~③まですべてVBAで行うこともできますが、今回は一番シンプルに、ワークシート関数ではできない部分のみVBAで実現したいと思います。
①~③の中でVBAでないとできないことは、セル色の判定です。
先にも書きましたが、ワークシート関数にはセルの色を調べてくれるような関数が用意されていません。
ですが、ないものは作ればいい、というのがこの方法です。
独自の関数を作成する
まず、関数を作成します。
ワークシートから利用できる関数を作る場合は、まず「開発」メニューからVBEditor画面を開き、「標準モジュール」を追加してそこにコードを記述します。
関数名はCellColor
など、わかりやすいものがいいでしょう。
VBAでセルの色を取得するには、Cellの.Interior.ColorIndex
プロパティを参照します。
今回は指定したセルの色を返す関数がほしいので、
Function CellColor(vCell As Range) As Long '引数で受け取ったセルの背景色を返す CellColor = vCell.Interior.ColorIndex End Function
というコードで十分です。
これでワークシート上でもCellColor関数を利用することができるようになります。
作成した関数を利用する
まず、ためしにB4セルに=CellColor(B4)
という式を書いてみましょう。
どの赤を使っているかで結果は異なりますが、一般的な赤なら3が返されると思います。
同様に青・黄色のセルにも式を書いてみると、そのセルの色に対応する番号が返されると思います。
私の環境では
赤: 3
青:23
黄; 6
でした。
これを判定条件に組み込んでいきます。
今回の判定条件は
①B1セルが"りんご"でセルの色が赤
②B1セルが"ぶどう"でセルの色が青
③B1セルが"ばなな"でセルの色が黄
のいずれかを満たした場合に"R"を出力します。
それぞれAND関数を使って式にすると、
①AND($B$1="りんご", CellColor(B4) = 3)
②AND($B$1="ぶどう", CellColor(B4) =23)
③AND($B$1="ばなな", CellColor(B4) = 6)
となります。
これら「いずれかを満たしたら」という部分はOR関数を利用して
OR(①, ②, ③)
という式を作ります。
①~③を埋め込むと
OR(AND($B$1="りんご", CellColor(B4) = 3), AND($B$1="ぶどう", CellColor(B4) =23), AND($B$1="ばなな", CellColor(B4) = 6))
となります。
これで①~③のいずれかを満たしたらTrueを返す式が出来上がりました。
最後に、IF文で上記を満たしたとき"R"、それ以外は空白を返すようにします。
=IF(OR(AND($B$1="りんご", CellColor(B4) = 3), AND($B$1="ぶどう", CellColor(B4) =23), AND($B$1="ばなな", CellColor(B4) = 6)), "R", "")
少し長い式になりましたが、これをB4セルに記述し、セルの「コピー」⇒「数式の貼り付け」で他のセルにもコピーすれば目的の結果が得られると思います。
VBAを利用する分すこし敷居が高くなっていますが、質問のタグにVBAを含められていましたのでご紹介させていただきました。
どのセルも同じ式を使っていますので、後からセルの色だけを変更しても結果が反映されるのが利点でしょうか。
今回、色の取得部分のみをVBAで関数にしましたが、全てをVBAで自動化することももちろんできます。
その方がワークシート関数での条件判定がいらなくできたりといったメリットもありますが、反面、少し動作を変えたいときにもVBA側を変更したり、別個に似たような関数を作成する必要がでてきたりします。
そんなわけで今回はセル背景色の取得部分のみをVBAで関数化しました。
シンプルな分、使いまわしが効くのではないかと思います。
参考になれば幸いです。
投稿2018/02/08 01:38
編集2018/02/08 01:51総合スコア3013
0
赤セルに=if(B1="リンゴ","R")と入れる。
青セルに=if(B1="ぶどう","R")と入れる。
黄色セルに=if(B1="バナナ","R")と入れる。
投稿2018/02/07 11:29
総合スコア349
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/02/08 00:21
退会済みユーザー
2018/02/08 02:20
2018/02/08 02:38
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。