You say you are using a lot of columns already. I am assuming you are only talking about Sheet3 here and that on Sheet2, columns B & C are available to use as helper columns. If this is not the case post back & I'll modify the code again.
If my assumption about the columns on Sheet2 is correct, then try this version.
<font face=Courier New><br><SPAN style="color:#00007F">Private</SPAN> <SPAN style="color:#00007F">Sub</SPAN> Worksheet_Change(<SPAN style="color:#00007F">ByVal</SPAN> Target <SPAN style="color:#00007F">As</SPAN> Range)<br> <SPAN style="color:#00007F">Dim</SPAN> aData, aList, t<br> <SPAN style="color:#00007F">Dim</SPAN> i <SPAN style="color:#00007F">As</SPAN> <SPAN style="color:#00007F">Long</SPAN>, j <SPAN style="color:#00007F">As</SPAN> <SPAN style="color:#00007F">Long</SPAN>, R <SPAN style="color:#00007F">As</SPAN> <SPAN style="color:#00007F">Long</SPAN>, C <SPAN style="color:#00007F">As</SPAN> <SPAN style="color:#00007F">Long</SPAN>, k <SPAN style="color:#00007F">As</SPAN> <SPAN style="color:#00007F">Long</SPAN><br> <SPAN style="color:#00007F">Dim</SPAN> s <SPAN style="color:#00007F">As</SPAN> <SPAN style="color:#00007F">String</SPAN><br><br> aData = ActiveSheet.UsedRange.Offset(1).Value<br> R = <SPAN style="color:#00007F">UBound</SPAN>(aData, 1)<br> C = <SPAN style="color:#00007F">UBound</SPAN>(aData, 2)<br> <SPAN style="color:#00007F">ReDim</SPAN> aList(1 <SPAN style="color:#00007F">To</SPAN> R * C, 1 <SPAN style="color:#00007F">To</SPAN> 3)<br> <SPAN style="color:#00007F">For</SPAN> i = 1 <SPAN style="color:#00007F">To</SPAN> R<br> <SPAN style="color:#00007F">For</SPAN> j = 1 <SPAN style="color:#00007F">To</SPAN> C<br> s = aData(i, j)<br> <SPAN style="color:#00007F">If</SPAN> Len(s) > 0 <SPAN style="color:#00007F">Then</SPAN><br> k = k + 1<br> aList(k, 1) = s<br> t = Split(s, " ")<br> aList(k, 2) = t(UBound(t))<br> <SPAN style="color:#00007F">On</SPAN> <SPAN style="color:#00007F">Error</SPAN> <SPAN style="color:#00007F">Resume</SPAN> <SPAN style="color:#00007F">Next</SPAN><br> aList(k, 3) = t(UBound(t) - 1)<br> <SPAN style="color:#00007F">On</SPAN> <SPAN style="color:#00007F">Error</SPAN> <SPAN style="color:#00007F">GoTo</SPAN> 0<br> <SPAN style="color:#00007F">End</SPAN> <SPAN style="color:#00007F">If</SPAN><br> <SPAN style="color:#00007F">Next</SPAN> j<br> <SPAN style="color:#00007F">Next</SPAN> i<br> <SPAN style="color:#00007F">With</SPAN> Sheets("Sheet2")<br> Intersect(.UsedRange.Offset(1), .Columns("A")).Clear<br> <SPAN style="color:#00007F">With</SPAN> .Range("A2").Resize(R * C, 3)<br> .Value = aList<br> .Sort Key1:=.Cells(1, 2), Order1:=xlAscending, _<br> Key2:=.Cells(1, 3), Order2:=xlAscending, Header:=xlNo<br> .Offset(, 1).Resize(, 2).ClearContents<br> .RemoveDuplicates Columns:=1, Header:=xlNo<br> <SPAN style="color:#00007F">End</SPAN> <SPAN style="color:#00007F">With</SPAN><br> <SPAN style="color:#00007F">With</SPAN> .Range("A1", .Range("A" & .Rows.Count).End(xlUp))<br> .BorderAround LineStyle:=xlContinuous<br> .Borders(xlInsideHorizontal).LineStyle = xlContinuous<br> <SPAN style="color:#00007F">End</SPAN> <SPAN style="color:#00007F">With</SPAN><br> <SPAN style="color:#00007F">End</SPAN> <SPAN style="color:#00007F">With</SPAN><br><SPAN style="color:#00007F">End</SPAN> <SPAN style="color:#00007F">Sub</SPAN><br><br></FONT>