A列にその数列がある場合、B列に下記のように記載します。
【例(B1)】=IF(FIND("10",A1),1,0)
ただし、見つからない場合にはエラーが出るので、Cの列にでもERROR.TYPE()を使って上手く0を表示してあげてください。
後半の問いは意味がわかりませんでした。
文意を読み解くのに少々手間取ってしまいました。
=IF(ISERR(FIND($B$1,A3)),0,IF(NOT(ISERR(VALUE(MID(A3&";",FIND($B$1,A3),LEN($B$1)+1)))),0,IF(NOT(ISERR(VALUE(MID(";"&A3,FIND($B$1,A3),LEN($B$1)+1)))),0,1)))
これでいかがでしょうか。
$B$1セルに、検索したい数値を入れておきます。
A3セルに、検索対象の文字列(「1,3,15」など)を入れておきます。
大まかに解説します。仮に「15」を探すとします。
最初の IF() 関数で、文字列の中に「15」があるか探します。FIND() 関数を使用します。無ければ、0 を返します。
ここではまだ「15」という文字列があるか無いか調べただけですので、それが「15」なのか「215」なのか「1500」なのかわかりません。
そこで、次に、FIND() 関数で引っ掛かった文字列に 1文字足して、それが数値として成り立つかどうか調べます。これには VALUE() 関数を使用します。
1文字後ろに足したとき「15,」になれば、VALUE() 関数ではエラーになります。この場合、数字が「150」などではないことがわかります。
同様に、頭に 1文字足して、その数字が「315」などでないことを調べます。
以上からお判りのとおり、この関数にも穴があります。
他にもいい方法があるかもしれませんが、ワークシート関数で解くならば、こんな感じだと思います。
http://www010.upp.so-net.ne.jp/catwalk/lib/Answer1145366534....(約16KB)
Excel97 にて作成。ウィルスセキュリティ 最新パターンでチェック済みです。
大変申し訳ありません。先程の回答では質問の読み落としがありましたので、訂正かたがた追記させていただきます。先程の計算式では、「ランダムに」という条件をクリアしていません。また、小数が含まれていた場合には対応できませんでした。
そこで、1つの計算式にまとめるということにこだわらない方向で、もう 1案作成し、別シートにして再アップロード致しました。シート名「Answer1145366534 (2)」のほうです。
http://www010.upp.so-net.ne.jp/catwalk/lib/Answer1145366534....(約40KB)
(ウィルスチェック済み)※先程と同じファイル名での再UPです
数字を一旦セル毎に切り出し、判定しています。作例ではカンマで区切られた数字が 8個までという上限を置いています。
この切り出しにかなり煩雑な手順を要していますので、可能であれば Excelへデータを読み込む際に「カンマ区切りテキスト」として読み込めば、(HLOOKUP() の式だけでできるので)手間は相当省けるのではないかと思います。
拡張性を考慮したため少々面倒なことになってしまっています。数字の種類が15個しかないということでいいのなら IF() 関数の入れ子という力業で書き下せばいいかもしれません。
あとは頑張ってみてください。
通常の関数ではちょっと無理があると思います。
マクロを使ったユーザ定義関数でよければ比較的スマートにご要望の機能を実現できそうです。
まず、EXCELのVBAで正規表現を使えるようにライブラリ参照の設定を行います。
以下のURLを参考にしてください。
VBAのマクロではユーザ定義関数というものを作成できます。
下記のようなマクロを作成します。
マクロの作成は以下のような手順で行います。
EXCELの[ツール(T)]-[マクロ(M)]-[Visual Basic Editor(V) Alt+F11]でMicrosoft Visual Basicの画面を開きます。
[挿入(I)]-[標準モジュール(M)]とし、標準モジュールの編集画面を開きます。
そこに以下の内容を貼り付けます。
Function numCheck(target As String, checkNum As Integer) ' ' numCheck ' カンマ区切りの数値データをチェックする独自関数 ' Dim re As New RegExp ' ' checkNumを含む正規表現のパターンを定義 ' re.Pattern = "(^|,)" & checkNum & "(,|$)" ' ' targetの値が正規表現にマッチする場合、1を返す ' If re.test(target) = True Then numCheck = 1 Else ' ' targetの値が正規表現にマッチしない場合、0を返す ' numCheck = 0 End If ' End Function
その後、保存してMicrosoft Visual Basicの画面は終了します。
これでユーザ定義関数の作成は完了です。
後は、EXCELのワークシート上で通常の関数と同様にユーザ定義関数を呼び出します。
使い方は以下の通りです。
=numCheck(対象となるセル,含まれているか確認する数字)
たとえば、A1というセルに"1,2,3,4,5"という値が入っている場合、
=numCheck(A1,3)
とするとそのセルには1がセットされます。
=numCheck(A1,6)
とするとそのセルには0がセットされます。
一度試してみてください。
参考になると幸いです。
6~15迄は#a1の通り、FIND関数で見つけられますが、1~5は簡単ではないですね。
ケースを考えます、Xは求めたい値(1~5です)Aはセルの値とします。便宜上共に文字列とします。
Aに数字が一つしか入っていない場合
A=Xなら1
先頭にある場合
AがX&","で始まるなら1
中間にある場合
Aの中に","&X&","があるなら1
末尾にある場合
Aが","&Xで終わるなら1でそれ以外は0ですから
セルA1にX、B1にAが入っているとして、
=IF(OR($A$1&","=LEFT(B1,LEN($A$1)+1),NOT(ISERR(FIND(","&$A$1&",",B1,1))),(","&$A$1=RIGHT(B1,LEN($A$1)+1)),$A$1=B1),1,0)
になります。
自作で関数を組んでしまうのが楽かと思います。サンプルを作成してみました。
Public Function kaeru(myNum As Integer, myStr As String) As String
'
' kaeru Macro
'
mySyr = Trim(myStr) '入力値から余分な空白を取る
myArray = Split(myStr, ",") '入力値を","で区切って配列をつくる
myAnswer = 0 'myAnswer(答え)に0を入れておく
For i = 0 To UBound(myArray) '配列を順番に開ける
If myArray(i) = myNum Then 'myNum(判定文字)が配列にあれば
myAnswer = 1 '答えに1を入れる
End If
Next
kaeru = myAnswer '関数kaeruに答えを返す
End Function
任意のセルに=kaeru(10,A5)というように括弧内に検索値と検索セルを指定します。
ココにサンプルファイルを置いておきます。マクロですので開くときに「ウイルスを含んでいる可能性があります」うんぬんいわれますが「有効」にして問題ありません。
のどれかで使用できると思います。
コメント(0件)