Option Explicit
Sub AlignLists()
' stanleydgromjr, 10/26/2012
' http://www.excelforum.com/excel-programming-vba-macros/871565-matching-cells-from-two-seperate-sheets-of-excel-data-while-creating-a-third-sheet.html
Dim w1 As Worksheet, w2 As Worksheet, wR As Worksheet
Dim r As Long, lr As Long, d As Range
Application.ScreenUpdating = False
Set w1 = Worksheets("Sheet1")
Set w2 = Worksheets("Sheet2")
If Not Evaluate("ISREF(Results!A1)") Then Worksheets.Add(After:=w2).Name = "Results"
Set wR = Worksheets("Results")
wR.UsedRange.Clear
lr = w1.Cells(Rows.Count, 1).End(xlUp).Row
w1.Range("A1:K" & lr).Copy wR.Cells(1, 2)
lr = w2.Cells(Rows.Count, 1).End(xlUp).Row
w2.Range("A1:K" & lr).Copy wR.Cells(1, 15)
lr = wR.Cells(Rows.Count, 2).End(xlUp).Row
With wR.Range("A2:A" & lr)
.FormulaR1C1 = "=RC[1]&RC[2]"
.Value = .Value
End With
lr = wR.Cells(Rows.Count, 15).End(xlUp).Row
With wR.Range("N2:N" & lr)
.FormulaR1C1 = "=RC[1]&RC[2]"
.Value = .Value
End With
lr = wR.Cells(Rows.Count, 1).End(xlUp).Row
wR.Range("A2:L" & lr).Sort key1:=wR.Range("A2"), order1:=1
lr = wR.Cells(Rows.Count, 14).End(xlUp).Row
wR.Range("N2:Y" & lr).Sort key1:=wR.Range("N2"), order1:=1
lr = wR.Cells.Find("*", , xlValues, xlWhole, xlByRows, xlPrevious, False).Row
Set d = Range("A1:A" & lr)
r = 2
Do While d.Cells(r, 1) <> ""
If d.Cells(r, 1).Offset(, 13) <> "" Then
If d.Cells(r, 1) < d.Cells(r, 1).Offset(, 13) Then
d.Cells(r, 1).Offset(, 13).Resize(, 12).Insert -4121
ElseIf d.Cells(r, 1) > d.Cells(r, 1).Offset(, 13) Then
d.Cells(r, 1).Resize(, 12).Insert -4121
lr = lr + 1
Set d = Range("A1:A" & lr)
End If
End If
r = r + 1
Loop
wR.Columns(1).Delete
wR.Columns("L:M").ClearContents
lr = wR.Cells.Find("*", , xlValues, xlWhole, xlByRows, xlPrevious, False).Row
wR.Range("L2:L" & lr).FormulaR1C1 = "=EXACT(RC[-10],RC[3])"
With wR.Range("M2:M" & lr)
.FormulaR1C1 = "=RC[9]/RC[-4]"
.NumberFormat = "0.00%"
End With
wR.Cells.EntireColumn.HorizontalAlignment = xlCenter
wR.Cells.EntireColumn.AutoFit
wR.Activate
Application.ScreenUpdating = True
End Sub
Bookmarks