|re: "is there anyway that it can be set up to run everytime data is input into another row into those columns..."|
I put the code inside a Worksheet_Change event, set to trigger on a change to Column I.
What this means is that you can make any changes you want to in your spreadsheet and nothing will happen until you make a change to a cell in Column I.
Right after you make the change in Column I, the event will fire and the code will do exactly what it was doing before - i.e. take the data in the last row and update the sheet.
re: "If you tell me how it is set up I will learn to use it"
Enter your data in A - H first, and then enter your data in I. Once the data is entered in I, the code will run.
Note: Any change in Column I, anywhere on the sheet, will cause the code to run. If there are no duplicates, nothing should happen, so that may not be a big deal, I just wanted you to be aware of that fact.
If you want the code to fire on a change to a different column, change the 9 to be the number of the column you want to trigger the code with.
Private Sub Worksheet_Change(ByVal Target As Range)
Dim lastRow As Integer
Dim firstAddress As String
'Run code after entry is made in Column I
If Target.Column = 9 Then
'find last Row in Vendor list
lastRow = Range("D" & Rows.Count).End(xlUp).Row
'Search for Vendor in list above the new entry
With Range("D13:D" & lastRow - 1)
Set c = .Find(Range("D" & lastRow), lookat:=xlWhole)
'If found then...
If Not c Is Nothing Then
firstAddress = c.Address
'...Check Account Number
If Range("E" & c.Row) = Range("E" & lastRow) Then
'If it matches, Copy old Due Date, Delete old Row and Exit
Range("G" & lastRow) = Range("G" & c.Row)
'If Account Number doesn't macth, Search for Vendor again
Set c = .FindNext(c)
Loop While Not c Is Nothing And c.Address <> firstAddress