プロが教えるわが家の防犯対策術!

同一グループ内での判定をしたいのです。

同一グループ内に
●が3つ以上⇒よくできました
●が2つ以下⇒残念でした

連想配列を使うとおもうのですが、●の数をカウントする方法がわからなくて困っています。

お手数ですが、ご教示していただけないでしょうか?
よろしくお願いします。

https://gyazo.com/f278471bb255c3c2f79a4052b6c8c4e6

A 回答 (4件)

以下の数式をC1セルに入力して、C2セル以降にコピーしてください。



=IF(COUNTIF($A$1:$A$14,A1)>=3,"よくできました","残念でした")
    • good
    • 0
この回答へのお礼

回答ありがとうございました。

お礼日時:2020/10/03 07:23

こんばんは!



No.1さまが回答されている方法が一番簡単だと思いますが、
どうしてもVBAでなければダメですか?

配列を使った方法をご希望のようなので、
一例です。

Sub Sample1()
 Dim myDic As Object
 Dim i As Long, lastRow As Long
 Dim myR

  Set myDic = CreateObject("Scripting.Dictionary")
   lastRow = Cells(Rows.Count, "A").End(xlUp).Row
    myR = Range(Cells(1, "A"), Cells(lastRow, "C"))
     For i = 1 To UBound(myR, 1)
      If myR(i, 2) = "●" Then
       If Not myDic.exists(myR(i, 1)) Then
        myDic.Add myR(i, 1), 1
       Else
        myDic(myR(i, 1)) = myDic(myR(i, 1)) + 1
       End If
      End If
     Next i

     For i = 1 To UBound(myR, 1)
      If myDic.exists(myR(i, 1)) Then
       If myDic(myR(i, 1)) >= 3 Then
        myR(i, 3) = "よくできました"
       Else
        myR(i, 3) = "残念でした"
       End If
      Else
       myR(i, 3) = "残念でした"
      End If
     Next i
    '//▼シート上に一気に吐き出す//
    Range(Cells(1, "A"), Cells(lastRow, "C")) = myR
     Set myDic = Nothing
End Sub

こんな感じでいけると思います。

※ どうみてもNo.1さまの関数の方が簡単みたいですね。m(_ _)m
    • good
    • 0
この回答へのお礼

このように記載するのですね。
参考になりました。
もっと精進します。
回答ありがとうございました。

お礼日時:2020/10/03 07:24

No.1です。


すいません、間違えました。以下が正解です。

=IF(COUNTIFS($A$1:$A$14,A1,$B$1:$B$14,"●")>=3,"よくできました","残念でした")
    • good
    • 0
この回答へのお礼

回答ありがとうございました。

お礼日時:2020/10/03 07:23

VBAでやるにしても何故連想配列になっているのかが不明ですけど。

(他言語経験者?)
数式を事前に埋め込んでってのが嫌であれば、ワークシート関数をVBAで実行させるだけではないかと初級者は思います。

とは言ってもOfficeぶっ壊してますので具体的には書けませんのでごめんなさい。
勘で書いても検証できないですし。
    • good
    • 0
この回答へのお礼

いつも回答ありがとうございます。

お礼日時:2020/10/03 07:23

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!