[[20140916195648]] 『判別方法』(ys) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『判別方法』(ys)

  A    B   C

1  A  いちご  ○
2  A  いちご  ○
3  B  いちご  ○
4  B  めろん     
5  B  めろん
6  B  りんご  ○
7  B  りんご  ○
8  A  りんご  ○
9  A  もも
10 A  もも

この様な表があり、C列に
例えばイチゴグループの中でA列が全て同じであれば
空白、そうでなければ○と判別する関数を入れたいです。
(B列は何百という種類があります。
A列はAとBの二種類しかありません。)

マクロで作成したのですが、3万件以上データがあるので
遅くて使い物になりません。(私のマクロの組み方が悪いのかも・・・・)

関数で判定する方法を教えてください。
よろしくお願いします。

< 使用 Excel:Excel2003、使用 OS:Windows7 >


 関数はエキスパートさんにお任せしますが、下記のマクロでも遅いでしょうか。

 Sub Sample()
    Dim datTbl
    datTbl = Range("A1").Resize(Cells(Rows.Count, "B").End(xlUp).Row, 2)

    Dim resTbl
    resTbl = Range("C1").Resize(UBound(datTbl, 1), 1)

    Dim dic
    Set dic = CreateObject("Scripting.Dictionary")

    Dim r As Long
    For r = 1 To UBound(datTbl, 1)
        If dic.exists(datTbl(r, 2)) = False Then
            dic(datTbl(r, 2)) = datTbl(r, 1)
        Else
            If dic(datTbl(r, 2)) <> "〇" Then
                If dic(datTbl(r, 2)) <> datTbl(r, 1) Then dic(datTbl(r, 2)) = "〇"
            End If
        End If
    Next

    Dim k
    For Each k In dic.keys
        If dic(k) <> "〇" Then dic(k) = ""
    Next

    For r = 1 To UBound(datTbl, 1)
        resTbl(r, 1) = dic(datTbl(r, 2))
    Next

    Range("C1").Resize(UBound(datTbl, 1), 1) = resTbl
 End Sub

(Mook) 2014/09/16(火) 20:39


 こんばんは。

 エキスパートでなくて恐縮ですが、

 =IF(COUNTIF(B$1:$B$10,B1)=SUMPRODUCT((A$1:A$10=A1)*(B$1:B$10=B1)),"","○")

 ではどうでしょう。
(mas_k) 2014/09/16(火) 21:05

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.