ExcelBanter

ExcelBanter (https://www.excelbanter.com/)
-   Excel Discussion (Misc queries) (https://www.excelbanter.com/excel-discussion-misc-queries/)
-   -   Another Sum Question (https://www.excelbanter.com/excel-discussion-misc-queries/31287-another-sum-question.html)

Erin Shellman

Another Sum Question
 

I am using a rather large genomic data set in which I need to classify
certain gene functions as one of three things. Each gene (row) has
several ID numbers associated with it. For instance one row could look
like "GO:0005524,GO:0000074,GO:0005730." I need excel to find a match,
and then add one to an adjacent column (basically tallying). For
instance, if I search for "GO:0005524" I need excel to search the 1001
rows containing this information, and then when it finds a row with
"GO:0005524" to add one to the adjacent column while staying within the
same row. That is, I don't just want a sum of how often "GO:0005524"
occurs in the whole set, I need to know if it occurs in a cell, and if
so for an adjacent cell to increase by one.

I tried to write a formula for this but didn't have much luck because
all of the MATCH, LOOKUP, etc. functions weren't really appropriate. I
also tried to use a macro, but because I don't really know Visual Basic
I couldn't edit it properly. Any help on this problem would be greatly
appreciated.


--
Erin Shellman
------------------------------------------------------------------------
Erin Shellman's Profile: http://www.excelforum.com/member.php...o&userid=24417
View this thread: http://www.excelforum.com/showthread...hreadid=380164


anilsolipuram


I am assuming that column A as the id number COLUMN , which we need to
search and column b is the adjacent column which need to be incremented
when ever we find a match.


try this macro and let me know

Sub Macro1()
Dim INIT, I As Variant
I = 0
Columns("A:A").Select 'column a for serching
Selection.Find(What:="GO:0005524", After:=ActiveCell,
LookIn:=xlFormulas _
, LookAt:=xlPart, SearchOrder:=xlByRows,
SearchDirection:=xlNext, _
MatchCase:=False).Activate 'searching a id
INIT = ActiveCell.Address
Range(INIT).Offset(0, 1).Value = Range(INIT).Offset(0, 1).Value + 1
'incrementing adjacent column
While I = 0
Selection.FindNext(After:=ActiveCell).Activate
If ActiveCell.Address = INIT Then
I = 1
Else
Range(ActiveCell.Address).Offset(0, 1).Value =
Range(ActiveCell.Address).Offset(0, 1).Value + 1
End If
Wend
End Sub


--
anilsolipuram
------------------------------------------------------------------------
anilsolipuram's Profile: http://www.excelforum.com/member.php...o&userid=16271
View this thread: http://www.excelforum.com/showthread...hreadid=380164


Erin Shellman


Awesome! It works! Thanks a lot. What would I have to change if I
wanted it also to add to other rows? I am classifying those IDs as one
of three things which fall into one three columns. I see how I change
what it is searching for, but how can I tell it to not tally in the
column directly adjacent, but rather in a column two or three away?


--
Erin Shellman
------------------------------------------------------------------------
Erin Shellman's Profile: http://www.excelforum.com/member.php...o&userid=24417
View this thread: http://www.excelforum.com/showthread...hreadid=380164


Erin Shellman


Oh, I found one problem with that macro. It doesn't count multiple
occurances of the ID. Some of the IDs have numbers that show up in a
cell more than once, and need to be counted more than once. Is that
easy to fix?


--
Erin Shellman
------------------------------------------------------------------------
Erin Shellman's Profile: http://www.excelforum.com/member.php...o&userid=24417
View this thread: http://www.excelforum.com/showthread...hreadid=380164


anilsolipuram


You mean in one cell you have value like "GO:0005524 GO:0005524
GO:0005524" ,is that what you mean.


--
anilsolipuram
------------------------------------------------------------------------
anilsolipuram's Profile: http://www.excelforum.com/member.php...o&userid=16271
View this thread: http://www.excelforum.com/showthread...hreadid=380164


Erin Shellman


That's right. That happens sometimes.


--
Erin Shellman
------------------------------------------------------------------------
Erin Shellman's Profile: http://www.excelforum.com/member.php...o&userid=24417
View this thread: http://www.excelforum.com/showthread...hreadid=380164


anilsolipuram


let me know if this macro solves the problem


Sub Macro1()
Dim INIT, I, t, incr As Variant
I = 0
Columns("A:A").Select 'column a for serching
Selection.Find(What:="GO:0005524", After:=ActiveCell,
LookIn:=xlFormulas _
, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False).Activate 'searching a id
INIT = ActiveCell.Address
t = Split(ActiveCell.Value, "GO:0005524")
Range(INIT).Offset(0, 1).Value = Range(INIT).Offset(0, 1).Value +
UBound(t) 'incrementing adjacent column
While I = 0
Selection.FindNext(After:=ActiveCell).Activate
If ActiveCell.Address = INIT Then
I = 1
Else
t = Split(ActiveCell.Value, "GO:0005524")
Range(ActiveCell.Address).Offset(0, 1).Value =
Range(ActiveCell.Address).Offset(0, 1).Value + UBound(t)
End If
Wend
End Sub


--
anilsolipuram
------------------------------------------------------------------------
anilsolipuram's Profile: http://www.excelforum.com/member.php...o&userid=16271
View this thread: http://www.excelforum.com/showthread...hreadid=380164


Erin Shellman


It's still only counting one ID per cell.


--
Erin Shellman
------------------------------------------------------------------------
Erin Shellman's Profile: http://www.excelforum.com/member.php...o&userid=24417
View this thread: http://www.excelforum.com/showthread...hreadid=380164


anilsolipuram


How do you know it's counting only 1 ID per cell,is adjacent incremented
by only 1 when there is multiple occurence of ID in a cell


--
anilsolipuram
------------------------------------------------------------------------
anilsolipuram's Profile: http://www.excelforum.com/member.php...o&userid=16271
View this thread: http://www.excelforum.com/showthread...hreadid=380164


Erin Shellman


Yes, that's how I can tell. I just look at the first cell with multiple
occurances of the ID it is searching for and it only writes 1 rather
than the true number in the cell.


--
Erin Shellman
------------------------------------------------------------------------
Erin Shellman's Profile: http://www.excelforum.com/member.php...o&userid=24417
View this thread: http://www.excelforum.com/showthread...hreadid=380164


anilsolipuram


Can you download this zip file with excel file, execute the macro and
see whether it works. It is working for me.

test it and let me know


+-------------------------------------------------------------------+
|Filename: test.zip |
|Download: http://www.excelforum.com/attachment.php?postid=3511 |
+-------------------------------------------------------------------+

--
anilsolipuram
------------------------------------------------------------------------
anilsolipuram's Profile: http://www.excelforum.com/member.php...o&userid=16271
View this thread: http://www.excelforum.com/showthread...hreadid=380164


Erin Shellman


Yeah, that worked for me too. When I was testing it on the real data I
switched out the "GO:0005524" code with another number but I didn't
change anything else. Would that have anything to do with it?


--
Erin Shellman
------------------------------------------------------------------------
Erin Shellman's Profile: http://www.excelforum.com/member.php...o&userid=24417
View this thread: http://www.excelforum.com/showthread...hreadid=380164


anilsolipuram


the below will prompt for ID, instead of hardcoding in the macro code.

try this and let me know

Sub Macro1()
Dim INIT, I, t, incr, id As Variant
I = 0
id = InputBox("Enter the id to find")
Columns("A:A").Select 'column a for serching
Selection.Find(What:=id, After:=ActiveCell, LookIn:=xlFormulas _
, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False).Activate 'searching a id
INIT = ActiveCell.Address
t = Split(ActiveCell.Value, id)
Range(INIT).Offset(0, 1).Value = Range(INIT).Offset(0, 1).Value +
UBound(t) 'incrementing adjacent column
While I = 0
Selection.FindNext(After:=ActiveCell).Activate
If ActiveCell.Address = INIT Then
I = 1
Else
t = Split(ActiveCell.Value, id)
Range(ActiveCell.Address).Offset(0, 1).Value =
Range(ActiveCell.Address).Offset(0, 1).Value + UBound(t)
End If
Wend
End Sub


--
anilsolipuram
------------------------------------------------------------------------
anilsolipuram's Profile: http://www.excelforum.com/member.php...o&userid=16271
View this thread: http://www.excelforum.com/showthread...hreadid=380164


Erin Shellman


It works with no issues! Thanks a lot! What part of the macro would I
change if I needed the tallying column to be something besides B:B?


--
Erin Shellman
------------------------------------------------------------------------
Erin Shellman's Profile: http://www.excelforum.com/member.php...o&userid=24417
View this thread: http://www.excelforum.com/showthread...hreadid=380164


anilsolipuram


I added code that will prompt you with option to enter which column to
search like A OR B OR C, enter just the column name.


Sub Macro1()
Dim INIT,col, I, t, incr, id As Variant
I = 0
id = InputBox("Enter the id to find")
col = InputBox("Enter which column to search eg: A OR B OR C OR
D.....")
Columns(col & ":" & col).Select 'column a for serching
on error goto a:
Selection.Find(What:=id, After:=ActiveCell, LookIn:=xlFormulas _
, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False).Activate 'searching a id
INIT = ActiveCell.Address
t = Split(ActiveCell.Value, id)
Range(INIT).Offset(0, 1).Value = Range(INIT).Offset(0, 1).Value +
UBound(t) 'incrementing adjacent column
While I = 0
Selection.FindNext(After:=ActiveCell).Activate
If ActiveCell.Address = INIT Then
I = 1
Else
t = Split(ActiveCell.Value, id)
Range(ActiveCell.Address).Offset(0, 1).Value =
Range(ActiveCell.Address).Offset(0, 1).Value + UBound(t)
End If
Wend
a:
if err.description<"" then
msgbox "no match found"
end if
End Sub


--
anilsolipuram
------------------------------------------------------------------------
anilsolipuram's Profile: http://www.excelforum.com/member.php...o&userid=16271
View this thread: http://www.excelforum.com/showthread...hreadid=380164



All times are GMT +1. The time now is 04:55 AM.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
ExcelBanter.com