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

Q&A

解決済

2回答

3556閲覧

エクセルに禁則文字を強調したい

yumeno

総合スコア27

0グッド

0クリップ

投稿2019/02/14 07:19

編集2019/02/15 05:36

0

0

観覧ありがとうございます。
初心者の私の問題について、解決方法をご存知でしたら教えていただきたいです。

方法は書式の設定、マクロ関数なんでもかまいません。
VBA以外の軽い方法で行いたいと考えています。

前提・実現したいこと

エクセル内に禁則文字が記入された際に、赤文字で強調したいです。
記入する文字は禁則文字のみ、禁則文字と通常文字、通常文字のみとパターンがあります。

禁則文字:http://support.plott.co.jp/wp-content/uploads/2017/04/kinsokumozi.pdf
※エクセルの別シートに転記する予定です

試したこと

MATCH関数、ワイルドカードの使用、IFCOUNT等使用しましたが、
一気に禁則文字をとることはできませんでした。

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

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

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

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

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

maisumakun

2019/02/14 07:23

「禁則文字」としたい文字は、どの文字でしょうか。
stdio

2019/02/14 08:20

随分とごり押し策ですが、このShift-JISの文字を禁句文字に設定するような関数を実装することですかね... 別のエクセルファイルにこれらの文字を1字づつセルにコピーして、そのエクセルファイルを実行時にそのブックを読み込んで、比較すれば出来なくはないかな....
ttyp03

2019/02/14 08:25

強調させるのは、禁則文字のみですか?セル内の文字列全てですか?
ttyp03

2019/02/14 08:26

それからタイトルでは「記入させない」のに対し質問内容は「強調したい」と矛盾しています。どちらかに統一をお願いします。
yumeno

2019/02/14 08:31

セル内の文字列すべてです
guest

回答2

0

ベストアンサー

数式だけでなんとかならないか模索しましたが、やはりVBAを使ったほうが手っ取り早いです。
標準モジュールに以下を追加。

VBA

1Function chkKinsoku(Target As Range) As Boolean 2 chkKinsoku = False 3 For i = 1 To Len(Target.Value) 4 Set Rng = Sheets("禁則文字").Cells.Find(What:=Mid(Target.Value, i, 1), LookIn:=xlValues, LookAt:=xlWhole) 5 If Not Rng Is Nothing Then 6 chkKinsoku = True 7 Exit For 8 End If 9 Next 10End Function

禁則文字シートに禁則文字が1文字1セルで登録されている前提です。
条件付き書式で、A1を対象としたいなら、こう書いてください。

Excel

1=chkKinsoku(A1)

パフォーマンスとか特に気にしていないのであしからず。

投稿2019/02/14 08:52

ttyp03

総合スコア17002

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

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

yumeno

2019/02/14 08:55

回答ありがとうございます!モジュールは便利ですね。 禁則文字が多く、確認する入力箇所が多いことから重くなってしまいました。 何かいい方法がないか、もう少し探って見ます。 本当にありがとうございます。
ttyp03

2019/02/14 08:57

やはり重いですか。 他に方法がないか考えてみます。
guest

0

禁則文字(※)とされていますが、とにかく指定された文字が含まれていたらダメとしたいんですよね?
それらの文字を正規表現で文字集合としてマッチングすればいいのではないかと。

ttyp03さんの回答と同様に、条件付き書式で=Validation(A1)といった感じで使用してください。

禁止文字シートのA1セルから下へ、セル毎に1文字の検出対象の文字があるものとしています。
変数などのネーミングや正規表現のメタ文字対応とかは手抜きなので、修正が必要かもしれません。

VBA

1Function Validation(Target As Range) As Boolean 2 '正規表現オブジェクト作成 3 Set reg = CreateObject("VBScript.RegExp") 4 5 '禁止文字の集合文字列を作成 6 With Sheets("禁止文字") 7 For Each Letter In Range(.Range("a1"), .Range("a1").End(xlDown)) 8 'メタ文字などのエスケープ 9 If InStr(Letter.Value, """^$?*+.|{}[]()") > 0 Then 10 reg.Pattern = reg.Pattern & "\" 11 End If 12 '空セルじゃなければ集合に追加(不要かも) 13 If Letter.Value <> "" Then 14 reg.Pattern = reg.Pattern & Letter.Value 15 End If 16 Next 17 End With 18 19 '文字集合とするために前後をくくる 20 reg.Pattern = "[" & reg.Pattern & "]" 21 22 '正規表現マッチング結果を返す 23 Validation = reg.Test(Target.Value) 24 25End Function

(※)行頭や行末には使ってはいけない文字を指すんじゃなかったかなぁ…とか。

投稿2019/02/14 13:21

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

yumeno

2019/02/15 02:11

禁則文字の定義を気にしていなかったため、振り返って勉強するいい機会になりました。ありがとうございます! ttyp03さんのほうが問題なく使えたので、ベストアンサーにさせていただきました。 lazybonesさんいつも回答本当にありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.30%

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

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

質問する

関連した質問