The following is just a test to see if I've got the logic right and you're getting the results you want. Later I can speed it up.
A file would be really, really helpful.
Sub A_New_Compare()
Dim i, j As Long
Dim StartTime As Double
Dim MinutesElapsed As String
'Remember time when macro starts
StartTime = Timer
Set sht1 = Worksheets("BASELINE_7NOV16")
Set sht2 = Worksheets("BASELINE_14NOV16")
'Sht2Dlr = Sht2.Cells(Sht2.Rows.Count, "D").End(xlUp).Row 'Sht2(Nov14) sheet, column D last row.
Sht2Flr = sht2.Cells(sht2.Rows.Count, "F").End(xlUp).Row 'Sht2(Nov14) sheet, column F last row.
'Sht1Dlr = .Cells(.Rows.Count, "D").End(xlUp).Row 'Sht1(Nov7) sheet, column D last row.
Sht1Glr = sht1.Cells(sht1.Rows.Count, "G").End(xlUp).Row 'Sht1(Nov7) sheet, column G last row.
For i = 2 To Sht1Glr
GVal = sht1.Cells(i, "G")
If Application.CountIf(sht2.Range("F:F"), GVal) > 0 Then
For j = 2 To Sht2Flr
' If Application.CountIf(Sht2.Range("D:D"), Sht1.Cells(i, "D")) < 1 Then'use MATCH instead to find the entry?
If sht2.Cells(j, "F").Value = GVal Then
If sht2.Cells(j, "D").Value <> sht1.Cells(i, "D").Value Then
sht1.Cells(i, "AI").Value = sht2.Cells(j, "D").Value
Exit For 'only if there's only never more than 1 row on each sheet with F and G columns the same.
End If
End If
Next j
Else
' .Cells(i, "U").Value = ""
End If
Next i
'Determine how many seconds code took to run
MinutesElapsed = Format((Timer - StartTime) / 86400, "hh:mm:ss")
'Notify user in seconds
MsgBox "This code ran successfully in " & MinutesElapsed & " minutes", vbInformation
End Sub