質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

Q&A

2回答

320閲覧

Excelでやりたいです。

zuzu1984

総合スコア31

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

0グッド

0クリップ

投稿2018/02/07 11:03

可能であればExcelで以下を行いたいです。

B1セルに“リンゴ”という文字が入っている場合は、赤セルすべてに"R"いう文字に入れる。
B1セルに“ぶどう”という文字が入っている場合は、青セルすべてにに"R"いう文字に入れる。
B1セルに“バナナ”という文字が入っている場合は、黄色セルすべてにに"R"いう文字に入れる。

と、いうように、B1の文字によってRを入れる個所が指定できるように定義したいです。

数式をどのように使うのか、またルールをどのように定義すると条件によって設定できるのか困っています。
御教授宜しくお願い致します。

イメージ説明

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答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
jawa

総合スコア3013

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

赤セルに=if(B1="リンゴ","R")と入れる。
青セルに=if(B1="ぶどう","R")と入れる。
黄色セルに=if(B1="バナナ","R")と入れる。

投稿2018/02/07 11:29

apo

総合スコア349

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ttyp03

2018/02/08 00:17

一致しないとき"FALSE"が出ちゃうので、=if(B1="リンゴ","R","")としたほうがいいですね。
ExcelVBAer

2018/02/08 00:21

数式をコピペした時に、参照のセル位置が変わらないよう B1 → $B$1 としたほうがいいですね。 ※質問者さんの画像では B2 らしき雰囲気もありますが。。。
退会済みユーザー

退会済みユーザー

2018/02/08 02:20

VBAでやりたいんじゃないの?
ExcelVBAer

2018/02/08 02:38

「数式をどのように使うのか」ってありますからねぇ。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問