「ランダムな数字を含む集団」を比較する方法を教えてください。


ランダムな数字の入っている集団A (例:1, 5, 8, 9, 12, 14, 17, 27, 100, 120, 133)
ランダムな数字の入っている集団B(例:2, 4, 10, 11, 19, 120, 201, 303, 500)

ひとつの集団の中に同じ数字は含みません。データはコンマで区切られた数値として持っています。エクセルへのインポート法は知っています。

集団Aと集団Bを比べた時に、同じ数字が入っているかいないか(上の例なら「入っている」)、入っているなら何か(上の例なら「120」)を簡単に調べるにはどうしたらいいでしょうか?エクセルのピポットテーブルやマクロは使ったことがありませんが、詳しく紹介してくだされば使用可能と思います。またエクセルにこだわるつもりはありませんので、この機能にだけ特化したフリーソフトやWeb上で使用可能なものなどを紹介してくださってもありがたいです。

回答の条件
  • 1人2回まで
  • 登録:2006/06/06 14:04:49
  • 終了:2006/06/06 15:14:08

ベストアンサー

id:gong1971 No.2

gong1971回答回数443ベストアンサー獲得回数682006/06/06 14:59:50

ポイント60pt

> エクセルへのインポート法は知っています。

との事なので、集団Aが A1:A11 に、集団Bが B1:B9 に入っているとして、

C1に以下の数式を入力します。

=IF(ISERROR(VLOOKUP(B1,A$1:A$11,1,0)),"",VLOOKUP(B1,A$1:A$11,1,0))

C1のセルをコピーして C2:C9 に貼り付けます。

この時、C列に同じ数字が表示されます。(無ければ何も表示されません)


これで使いにくい点があれば修正しますので、ご希望をお知らせ下さい。

id:wanko3

できました!ありがとうございます!

2006/06/06 15:12:43

その他の回答(1件)

id:int80h No.1

int80h回答回数359ベストアンサー獲得回数252006/06/06 14:20:55

ポイント20pt

集団A、B共にソートされた状態なら、バイナリサーチで比較的簡単に調べられると思います。

id:wanko3

共にソートされていますが、バイナリサーチが分かりません。C言語の知識が必要ですか?ちなみに普段はMac(OS10.4)を使っているので、Macでできる物がベストです。

2006/06/06 14:43:11
id:gong1971 No.2

gong1971回答回数443ベストアンサー獲得回数682006/06/06 14:59:50ここでベストアンサー

ポイント60pt

> エクセルへのインポート法は知っています。

との事なので、集団Aが A1:A11 に、集団Bが B1:B9 に入っているとして、

C1に以下の数式を入力します。

=IF(ISERROR(VLOOKUP(B1,A$1:A$11,1,0)),"",VLOOKUP(B1,A$1:A$11,1,0))

C1のセルをコピーして C2:C9 に貼り付けます。

この時、C列に同じ数字が表示されます。(無ければ何も表示されません)


これで使いにくい点があれば修正しますので、ご希望をお知らせ下さい。

id:wanko3

できました!ありがとうございます!

2006/06/06 15:12:43
  • id:bonlife
    以下のようなVBAのFunctionを作って処理しても良いと思います。
    (インポートせず、そのままの内容を1つのセルに貼り付けた状態で、データが昇順に並んでいなくても処理可能です。)

    Public Function compCsvNum(str As String, str2 As String) As Boolean
    '
    ' カンマ区切り数値比較マクロ
    '

    ' 入力値をカンマで区切って配列にセット
    numArray = Split(str, ",")
    numArray2 = Split(str2, ",")
    ' 配列の大きさの間、比較処理
    ' 比較前に半角スペースを削除
    For i = 0 To UBound(numArray)
    For j = 0 To UBound(numArray2)
    If Trim(numArray(i)) = Trim(numArray2(j)) Then
    compCsvNum = True
    End If
    Next
    Next
    If compCsvNum <> True Then
    compCsvNum = False
    End If
    End Function

    セルA1に"1, 5, 8, 9, 12, 14, 17, 27, 100, 120, 133"
    セルA2に"2, 4, 10, 11, 19, 120, 201, 303, 500"
    という値が入っている場合、適当なセルに以下のように記述することで、比較結果を知ることが可能です。

    =IF(compCsvNum(A1,A2),"一致する数値あり","一致する数値なし")

    参考になれば幸いです。

    ユーザ定義関数については以下が参考になると思います。
    http://hp.vector.co.jp/authors/VA016119/hajimete/udf1.html
    http://hp.vector.co.jp/authors/VA016119/hajimete/udf2.html

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません