teratail header banner
teratail header banner
質問するログイン新規登録

Q&A

解決済

2回答

6574閲覧

禁則文字が含まれているセルの文字列を赤文字で強調したい

yumeno

総合スコア27

0グッド

0クリップ

投稿2019/02/15 04:02

編集2019/02/15 05:39

0

0

前提・実現したいこと

禁則文字が含まれているセルの文字列を赤文字で強調したい
以下のような問題に対して、どうしたら解決されるかおわかりであれば教えてください。

発生している問題・エラーメッセージ

以下、太文字の部分に禁則文字を入れたセルを指定しているのですが、
なぜか一番上(A1)の値しか見てくれません。

条件付書式にて

数式
=iferror(find(Sheet2!$A$1:$A$1000,b14),0)>0
・適用先
$B$14:$L:$1000

データが膨大になることが考えられるため、
プロシージャは使わないようにしたいです

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

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

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

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

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

firedfly

2019/02/15 05:30 編集

ご自分で試したけれどうまくいかなかった関数・パターンが他にもあれば それを書いておいて頂けると幸いです。
guest

回答2

0

ベストアンサー

こんにちは。

対象セルの文字列に検索範囲のセルの文字が含まれているかを検索する場合、
単純にFINDを使う訳にいきません(FINDは文字列から文字を探す関数)。下の数式でどうでしょう。

数式のB14となっているところはA1のはずです。
また、検索範囲に空白セルが含まれると必ずヒットしてしまうので注意してください。

数式 =ISNA(LOOKUP(0, 0/FIND(Sheet2!$A$1:$A$1000, A1), Sheet2!$A$1:$A$1000))=FALSE ・適用先 $B$14:$L:$1000

参考:VLOOKUP 検索範囲でワイルドカードは使えない?実はこんな方法があるんです。

投稿2019/02/15 04:08

編集2019/02/15 06:12
firedfly

総合スコア1133

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

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

yumeno

2019/02/15 04:14

ありがとうございます。その通りですね。 適用先が間違えていて、 $B$14 にすればよいということでしょうか? うまくいかないのでこれも間違えているのでしょうか・・・
firedfly

2019/02/15 04:17

すいません。よく見ると数式は合ってる気もしました……。適用先も正しいです。 となると iferror か find の使い方が間違っていることになります。
firedfly

2019/02/15 04:19

FINDは`FIND("O", ”AOC”)`のように ”AOC” に含まれる ”O” の位置を返す関数なので、 そこが間違っていそうです。
yumeno

2019/02/15 04:21

なるほど、やはり”○”の部分は複数領域r取れないのでしょうか・・・関数で実現するのは難しいのですかね・・・
firedfly

2019/02/15 04:23

VLOOKUP あたりを使えばできると思います。
yumeno

2019/02/15 04:25

Vlookup,indexはすでに組み合わせて使用しましたが、自分の力では無理でした。
firedfly

2019/02/15 04:38

なかなかエグイ数式になりました。 参考サイトを読んでみてください。
yumeno

2019/02/15 05:17

ありがとうございます、参考サイトは既に勉強させていただきました。 試してみたところ、 ・適用先 $B$14:$L:$1000⇒対象セルが全部強調 $B$14     ⇒対照の文字が阿多場合B14のみが強調 といった具合でした。
firedfly

2019/02/15 05:23

私の手元ではうまくいっているので、あと一歩だとは思います。 あるいはyumenoさんのExcelがわたしの想定外の作りをしているか……。
firedfly

2019/02/15 05:29

ちなみに、$A$1:$A$1000 に空セルが含まれると、すべて強調されてしまいます。
yumeno

2019/02/15 05:35

空欄が入っていました!調整したところ、ずれた位置で反応しました。
yumeno

2019/02/15 05:39

で、できました!!!!!正しく他の禁則文字についても反応し、かつ文字列でも大丈夫です!!!!すごい!!!!!
ttyp03

2019/02/15 05:47

おー、すごい!!
yumeno

2019/02/15 06:08

すごいですねーーー!!感動しました!
guest

0

まずFIND関数の第一引数と第二引数が逆です。
またFIND関数の第二引数には範囲の指定はできません。
もしExcel2016以降をお使いでしたら、TEXTJOIN関数を用いることで、範囲内の文字列を結合することが可能です。

EXCEL

1FIND(B14,TEXTJOIN("",$A$1:$A$100))

これで問題は解決できるはずですが、B列に格納している値は文字なのでしょうか?文字列でしょうか?
当然文字列だと思いますが、そうするとFINDでは検索ができません。
B列の値丸ごとを検索してしまうためです(1文字ずつの判定ではない)。
というわけで前回の回答では数式での判定を断念して、VBAマクロを用いるようにしました。
もし他に良い案があればまた回答させていただきます。

投稿2019/02/15 04:36

ttyp03

総合スコア17002

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

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

yumeno

2019/02/15 05:18

文字列です。そのため今回の問題にぶつかっていました。 通常のエクセル関数では無理なんですね・・・
ttyp03

2019/02/15 05:26 編集

少なくとも私の技術と調べた感じでは文字に分解することができそうもありません。 マクロをなるべく使用したくないようですが、パフォーマンス重視のコードを書けばそれほど遅くなるとも思いません。 ただ適用範囲が$B$14:$L:$1000と広めなので、やはり限界はあるでしょう。 これは例えワークシート関数だけで完結できたとしても同じだと思います。 今のところ2つ案があります。 1つは前回回答したVBAマクロを使う方法をもっと改善させる(アイデアはあるのですが時間がありません。。。) もうひとつは運用で逃げる方法です。 今は条件付き書式でリアルタイム反映だと思いますが、チェックボタンのようなものを設けてそのときにだけ行う方法です。 チェックボタン、保存イベントなど、要所要所で実施すれば記入ミスは防げるはずです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.30%

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

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

質問する

関連した質問