人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

エクセルの関数についてです。セルに1から15までの数字が「1,3,15」、「2,3」、「1,5,10」のように個数も数字もランダムにカンマに区切られて並んでいる列があります。特定のセルに、10が含まれている場合は1を、含まれていない場合は0を返すような関数を組むことは可能でしょうか。その際に、1~5については、10?15がセルに含まれている時に1~5が含まれていると解釈しないような関数を求めています。(もちろん、1と15両方ともセルに含まれている場合は、1で組んでも15で組んでも、含まれていると認識される必要があります。)

●質問者: kaerukaerukaeru
●カテゴリ:コンピュータ 科学・統計資料
✍キーワード:エクセル セル ランダム 数字 解釈
○ 状態 :終了
└ 回答数 : 6/6件

▽最新の回答へ

1 ● alfa156ts
●27ポイント

A列にその数列がある場合、B列に下記のように記載します。

【例(B1)】=IF(FIND("10",A1),1,0)

ただし、見つからない場合にはエラーが出るので、Cの列にでもERROR.TYPE()を使って上手く0を表示してあげてください。

後半の問いは意味がわかりませんでした。

http://www.yahoo.co.jp


2 ● owl
●27ポイント

文意を読み解くのに少々手間取ってしまいました。

=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 にて作成。ウィルスセキュリティ 最新パターンでチェック済みです。


3 ● owl
●26ポイント

大変申し訳ありません。先程の回答では質問の読み落としがありましたので、訂正かたがた追記させていただきます。先程の計算式では、「ランダムに」という条件をクリアしていません。また、小数が含まれていた場合には対応できませんでした。

そこで、1つの計算式にまとめるということにこだわらない方向で、もう 1案作成し、別シートにして再アップロード致しました。シート名「Answer1145366534 (2)」のほうです。

http://www010.upp.so-net.ne.jp/catwalk/lib/Answer1145366534....(約40KB)

(ウィルスチェック済み)※先程と同じファイル名での再UPです

数字を一旦セル毎に切り出し、判定しています。作例ではカンマで区切られた数字が 8個までという上限を置いています。

この切り出しにかなり煩雑な手順を要していますので、可能であれば Excelへデータを読み込む際に「カンマ区切りテキスト」として読み込めば、(HLOOKUP() の式だけでできるので)手間は相当省けるのではないかと思います。

拡張性を考慮したため少々面倒なことになってしまっています。数字の種類が15個しかないということでいいのなら IF() 関数の入れ子という力業で書き下せばいいかもしれません。

あとは頑張ってみてください。


4 ●
●10ポイント

通常の関数ではちょっと無理があると思います。

マクロを使ったユーザ定義関数でよければ比較的スマートにご要望の機能を実現できそうです。

まず、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がセットされます。

一度試してみてください。

参考になると幸いです。


5 ● Baku7770
●10ポイント

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)

になります。

Excel(エクセル)基本講座:文字列の関数(1)


1-5件表示/6件
4.前の5件|次5件6.
関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ