Dim is for declaring your variables. It is always good programming habit to declare every single variable you use (check out the help file for Data Types for an good explanation of the various types you can declare variables as). I have a somewhat unorthodox way of declaring my variables that I acquired from Greg Truby, which I'll explain a bit more in depth at a later time (possibly in a PM).
LR is a variable I commonly use to refer to the "Last Row" of the data.
i is a "looping" variable. I like to use i, j, k, l, m, n as looping variables simply due to other programming I've learned. It seems to be a somewhat universal norm to use those letters as looping variables.
In the code I provided, we found the Last Row by looking in Column H. The line of code: LR = Range("H" & Rows.Count).End(xlUp).Row is a great univeral line of code to find the last row. "H" refers to the column it is looking in for the last row. Rows.Count returns the very last row in the spreadsheet (65536 in Excel 2003, 1048576 for Excel 2007, and something larger for Excel 2010). Using .End(xlUp), that looks upward, from that VERY last cell in the column to find the first
populated cell (ie, it skips every blank). Then .Row returns the row of the range object returned.
Next, the loop. Looping through a range is something that is VERY common to see in VBA code. It is identifiable by either a For/Next loop or a Do While/Until Loop. Here, we are looping one-by-one using a For-Next loop. Since we are altering the number of rows by inserting (or deleting), we need to loop backwards through the code (Step -1) to prevent items from being skipped over (which, again, I'll explain at another time).
So basically, the line "For i = LR to 3 Step -1" is telling the code to
start at LR (the last row), and go
to 3, by incrementing i by
step -1.
I'd recommend playing with the code on a copy of your sheet, and changing various things in the code. See what you can come up with.