gpchicago08
asked on
EXCEL: cleaning up a list using search
I keep getting errors after the search function is added. Please see attached file. I am looking to get a clean list of active project numbers and descriptions starting in cell F5.
I have an INACTIVE column that, once filled, formats the text to the left as strikethrough.
The bottom of the list is at ROW 1001
Here is my desire:
Pull a list of project numbers and names that have NOTHING in the INACTIVE column (column D). In other words, I would like a clean list of only ACTIVE projects.
TIA
ProjectList.xlsx
I have an INACTIVE column that, once filled, formats the text to the left as strikethrough.
The bottom of the list is at ROW 1001
Here is my desire:
Pull a list of project numbers and names that have NOTHING in the INACTIVE column (column D). In other words, I would like a clean list of only ACTIVE projects.
TIA
ProjectList.xlsx
ASKER
Close but not really what I was intending. I don't want a macro to run. I have a formula here that does the OPPOSITE of what I need. It gives me all of the INACTIVE projects. Can you help me invert the SEARCH function so that I can get sort to all empty cells?
Plop this into F5 of my original file and hit ctrl-shft-enter and then drag it down a few cells to see how it works. It automatically updates the list based on whether something is in the cell.
Plop this into F5 of my original file and hit ctrl-shft-enter and then drag it down a few cells to see how it works. It automatically updates the list based on whether something is in the cell.
=INDEX($A$5:$A$1001,MATCH(SMALL(IFERROR(SEARCH(,$D$5:$D$1001),2^32)+ROW($D$5:$D$1001)/1000,ROWS($F$5:F5)),IFERROR(SEARCH(,$D$5:$D$1001),2^32)+ROW($D$5:$D$1001)/1000,0))
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
That's quite a formula! At first glance I'm not even sure how it works.
I played around with a couple simpler formulas that aren't as clever and take an extra column, but maybe when you revisit this spreadsheet in a month or two you might come to appreciate them.
First, I built on your idea to swap the sense of the Inactive Column to mean Active when it has an X. (You could easily add a column that did that swap for you and then base results on it.)
First, in E4 I put a 0
Then in E5, F5, and G5 I put:
=IFERROR(MATCH("x",OFFSET( active,E4, 0),0)+E4," ")
=IF(E5<>"",INDEX(PROJECTSA CCTG,E5,1) ,"")
=IF(E5<>"",INDEX(PROJECTSA CCTG,E5,2) ,"")
where active is a named range for what started as the INACTIVE column. Then copy these formulas down.
The workhorse here is the combination of match and offset. Offset uses the previously found row (thus the 0 in E4) as a starting row for the match operation. I think this might prove faster should your number of projects ever grow quite large.
I played around with a couple simpler formulas that aren't as clever and take an extra column, but maybe when you revisit this spreadsheet in a month or two you might come to appreciate them.
First, I built on your idea to swap the sense of the Inactive Column to mean Active when it has an X. (You could easily add a column that did that swap for you and then base results on it.)
First, in E4 I put a 0
Then in E5, F5, and G5 I put:
=IFERROR(MATCH("x",OFFSET(
=IF(E5<>"",INDEX(PROJECTSA
=IF(E5<>"",INDEX(PROJECTSA
where active is a named range for what started as the INACTIVE column. Then copy these formulas down.
The workhorse here is the combination of match and offset. Offset uses the previously found row (thus the 0 in E4) as a starting row for the match operation. I think this might prove faster should your number of projects ever grow quite large.
ASKER
I used my original code and changed my logic
Y = 5
For X = 5 To 1001
If Range("D" & X) = "" Then
Range("F" & Y).Value = Range("A" & X).Value
Range("G" & Y).Value = Range("B" & X).Value
Y = Y + 1
End If
Next
I have attached a macro enabled Excel file containing the macro which has been run for you.
ProjectList.xlsm