>それと併せて
上記以降も解釈して組み込んでみました。
なお、深く考えていませんが、
>合計数値が3個以上
これと、
>2個だけの記号
これが6個を超えることはないんでしょうか。
また、
>特殊カウントがされる度に併せて、下から下にと
この記述がよくわかりません。
Sub sample1()
Dim ChkRng1 As Range
Dim ChkRng2 As Range
Dim ChkRng3 As Range
Dim ChkRng4 As Range
Dim ChkRng5 As Range
Dim Cnt3Rng As Range
Dim Cnt2Rng As Range
Dim AnsRng As Range
Dim ColCnt As Long
Dim HitCnt As Long
Dim i As Long
Dim j As Long
With ThisWorkbook.Sheets(1)
Set ChkRng1 = Range(.Cells(6, 4), .Cells(8, 7))
Set ChkRng2 = Range(.Cells(9, 4), .Cells(11, 7))
Set ChkRng3 = Range(.Cells(12, 4), .Cells(14, 7))
Set ChkRng4 = Range(.Cells(15, 4), .Cells(17, 7))
Set ChkRng5 = Range(.Cells(18, 4), .Cells(20, 7))
Set Cnt3Rng = Range(.Cells(11, 13), .Cells(11, 18))
Set Cnt2Rng = Range(.Cells(11, 19), .Cells(11, 24))
Set AnsRng = Range(.Cells(10, 27), .Cells(11, 36))
For ColCnt = 1 To 10
.Cells(10, 11).Value = AnsRng(1, ColCnt).Value
AnsRng(2, ColCnt).Value = ""
HitCnt = 0
If isHit(ChkRng1, AnsRng(1, ColCnt).Value) = True Then
HitCnt = HitCnt + 1
End If
If isHit(ChkRng2, AnsRng(1, ColCnt).Value) = True Then
HitCnt = HitCnt + 1
End If
If isHit(ChkRng3, AnsRng(1, ColCnt).Value) = True Then
HitCnt = HitCnt + 1
End If
If isHit(ChkRng4, AnsRng(1, ColCnt).Value) = True Then
HitCnt = HitCnt + 1
End If
If isHit(ChkRng5, AnsRng(1, ColCnt).Value) = True Then
HitCnt = HitCnt + 1
End If
AnsRng(2, ColCnt).Value = HitCnt
Next ColCnt
i = 0
j = 0
For ColCnt = 1 To 10
If AnsRng(2, ColCnt).Value >= 3 Then
i = i + 1
Cnt3Rng(1, i) = AnsRng(1, ColCnt).Value
End If
If AnsRng(2, ColCnt).Value = 2 Then
j = j + 1
Cnt2Rng(1, j) = AnsRng(1, ColCnt).Value
End If
Next ColCnt
End With
End Sub
'//-------------ヒット判定関数
Function isHit(MyRange As Range, MyData As Variant) As Boolean
Dim ColNum As Long
isHit = False
With MyRange(2, 1)
If (.Value = MyData) And _
((.Offset(-1, 0).Value = MyData) Or _
(.Offset(-1, 1).Value = MyData) Or _
(.Offset(1, 0).Value = MyData) Or _
(.Offset(1, 1).Value = MyData)) Then
isHit = True
Exit Function
End If
End With
For ColNum = 2 To 3
With MyRange(2, ColNum)
If (.Value = MyData) And _
((.Offset(-1, -1).Value = MyData) Or _
(.Offset(-1, 0).Value = MyData) Or _
(.Offset(-1, 1).Value = MyData) Or _
(.Offset(1, -1).Value = MyData) Or _
(.Offset(1, 0).Value = MyData) Or _
(.Offset(1, 1).Value = MyData)) Then
isHit = True
Exit Function
End If
End With
Next ColNum
With MyRange(2, 4)
If (.Value = MyData) And _
((.Offset(-1, -1).Value = MyData) Or _
(.Offset(-1, 0).Value = MyData) Or _
(.Offset(1, -1).Value = MyData) Or _
(.Offset(1, 0).Value = MyData)) Then
isHit = True
Exit Function
End If
End With
End Function
お礼
そうなんですよw 下の方をカウントしてるみたいで、目的の所とは違う場所をカウントしてるようです。 今頑張ってソースをみなおしてます。(D6 : G20 )をカウントのフォーカスに定めるには何処から見直しが必要ですか?