Excel VBA Loop Compare

M_Patton used Ask the Experts™
We have a macro which creates a list of contracted projects from a two dimensional array.  A user then adds an "X" to a cell one column to the left of that list to indicate which ones are in progress.  As projects are completed, they fall of the list; as new contracts come in, they are added.  Our challenge is that the "X" doesn't move each time the macro regenerates the list (because it has been manually entered).

The macro-generated list is in range C4:Dx.  We have copied the current list (and "X" column) to a parallel set of cells (I4:Kx) before we regenerate it.

I need help with the IF statement within a Do While loop that would:
a) Find an exact value match (if one exists) between Cx and Jx (like a LOOKUP function)
b) If there is a match, write the corresponding value from Ix to Bx
c) If not, set the corresponding value in column B to ""

In the attached example we have two sheets; what it is (IS sheet) and what it should be (SHOULD sheet).  In the IS sheet, the original list was copied from B4:D11 to I4:K11 and a new list was generated into C4:D12.  Since the first three rows match, everything is fine for them.  However, the fourth and fifth entries in the new list didn't exist in the old list, so the value in the B column for those rows should be "".  In contrast, because the new list is longer, there should be a corresponding "X" in B12 due to the Augusta match.

Any help is greatly appreciated.
Watch Question

Do more with

Expert Office
EXPERT OFFICE® is a registered trademark of EXPERTS EXCHANGE®
Top Expert 2015

I wasn't sure whether you want to do it with formula or macro's..Check the Column-A of the should be column..I have done the same with macro which does what you are looking for..




I did want it in a macro.   If you have that I'd be most appreciative.
Top Expert 2015
You can use the following macro..

Sub applf()

    Dim lrow As Long, lr As Long
    lrow = Cells(Cells.Rows.Count, "c").End(xlUp).Row
    lr = Cells(Cells.Rows.Count, "j").End(xlUp).Row

    Range("B4:B" & lrow).Formula = "=IF(SUMPRODUCT(($J$4:$J$" & lr & "=C4)*($I$4:$I$" & lr & "=""X""))>0,""X"","""")"
    Range("B4:B" & lrow).Value = Range("B4:B" & lrow).Value
End Sub

Open in new window



Nice and short!  I like it!

Do more with

Expert Office
Submit tech questions to Ask the Experts™ at any time to receive solutions, advice, and new ideas from leading industry professionals.

Start 7-Day Free Trial