find first occurance of certain value in grid

E

Eric_in_EVV

I have a worksheet that is 7 columns by 5 rows...in any one of those cells
the user can input a certain text value, say "X". I need to find which cell
that value is in and then test the next two cells, going across and then down
to see if the same value exists in order to assign points based on a
predefined points system. Any ideas on how to do that ?
 
R

Ron Rosenfeld

If I understand you correctly; the formula needs to check whether values are
found in the below way anywere in the array.of 7*5

Col Col
Row x
Row x

Please note that this is an array formula; you press CTRL+SHIFT+ENTER to
enter the formula. If successful in 'Formula Bar' you can notice the curly
braces at both ends like "{=<formula>}". I have tried this in A1:G5..You can
modify the range to suit..

=IF(MIN(IF(A1:G5="X",ROW(A1:G5))),IF(INDEX(A1:G5,MIN(IF(A1:G5="X",ROW(A1:G5)))+1,MIN(IF(A1:G5="X",COLUMN(A1:G5)))+1)="X","Values
found in order","First value one"),"No values found")

If this post helps click Yes

I think a problem with your proposed solution would be a pattern such as:



| | | | | | | |
| | | | | | | |
| | | | X | | X | |
| | | | | | | X |
| | | | | | | |

In other words, if the grid is A1:G5, with "X" in D3, F3, G4

I would expect the OP would want a Pattern Found since F3 and G4 meet the
criteria.

I also would have thought the OP would want the following to be differentiated:


| | | | | | | |
| | | | | | | |
| | | | X | | X | X |
| | | | | | | X |
| | | | | | | |

--ron
 
R

Ron Rosenfeld

I have a worksheet that is 7 columns by 5 rows...in any one of those cells
the user can input a certain text value, say "X". I need to find which cell
that value is in and then test the next two cells, going across and then down
to see if the same value exists in order to assign points based on a
predefined points system. Any ideas on how to do that ?

You write that you want to check "the next two cells", so it appears that you
want to match either of three patterns:


Pattern 1
| X | X |
| | |


Pattern 2
| X | |
| | X |


Pattern 3
| X | X |
| | X |



If that is the case, the below UDF can return the appropriate pattern:

To enter this User Defined Function (UDF), <alt-F11> opens the Visual Basic
Editor.
Ensure your project is highlighted in the Project Explorer window.
Then, from the top menu, select Insert/Module and
paste the code below into the window that opens.

To use this User Defined Function (UDF), enter a formula like

=PatternMatch(Grid,TextValue)

in some cell.

===================================
Option Explicit
'Make case insensitive
Option Compare Text
Function PatternMatch(Grid As Range, TextValue As String) As String
Dim c As Range
PatternMatch = "No Match"
For Each c In Grid.Resize _
(Grid.Rows.Count - 1, Grid.Columns.Count - 1)
If c.Value = TextValue Then
If c.Offset(0, 1).Value = TextValue And _
c.Offset(1, 1).Value = TextValue Then
PatternMatch = "Pattern 3"
Exit Function
ElseIf c.Offset(1, 1).Value = TextValue Then
PatternMatch = "Pattern 2"
Exit Function
ElseIf c.Offset(0, 1).Value = TextValue Then
PatternMatch = "Pattern 1"
Exit Function
End If
End If
Next c
'check last row for Pattern 1
For Each c In Grid.Resize(1, Grid.Columns.Count -
1).Offset(rowoffset:=Grid.Rows.Count - 1)
If c.Value = TextValue And _
c.Offset(0, 1).Value = TextValue Then
PatternMatch = "Pattern 1"
Exit Function
End If
Next c
End Function
=============================
--ron
 
R

Rick Rothstein

Clarification please... your subject line as well as your request indicates
that multiple cells can contain the text you are looking for... ignoring the
text "after" them, if C4 and B5 both contained this text, which of them
would be considered the "first occurance" as your subject line indicates you
are looking for? That is, are you looking row by row or column by column to
find the first occurance?

As for the "the next two cells, going across and then down" part of your
question, did you mean to look in the 3 cells that Ron's answer is based on,
or were you describing a 2x2 grid of cells?
 
E

Eric_in_EVV

Let me try to clarify with by way of an example spreadsheet:

A B C D E
1 x would equal 1 point
2 x x would equal 2 points
3 x x x would equal 1 point
4 x x x would equal 2 points (1 for A4 and 1
for D4 & E4 combined)

In other words, any single occurance gets one point, whereas any consecutive
multiple occurance ALSO gets one point. Does that help to clarify ?
 
E

Eric_in_EVV

One more thing I failed to mention...the grid is essentially a calendar.
This spreadsheet is going to be used for attendance tracking...to log
absences, where a multi-day absence with a single cause is considered to be
the same as a single day absence.
 
D

Domenic

Try...

F1, confirmed with CONTROL+SHIFT+ENTER, and copied down:

=SUM(IF(FREQUENCY(IF(A1:E1="x",COLUMN(A1:E1)),IF(A1:E1<>"x",COLUMN(A1:E1)
)),1))
 
R

Rick Rothstein

This should work...

=1+SUMPRODUCT(--(MID(TRIM(IF(A1=""," ","X")&IF(B1=""," ","X")&IF(
C1=""," ","X")&IF(D1=""," ","X")&IF(E1=""," ","X")),ROW($1:$5),1)=" "))
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top