Translation function - one word set to another
Best approach
If your vocabulary library is very large you need to implement another data structure and sorting algorithm for your vocabulary. I would go with Bucket Sort. You need to partition your strings into separate buckets of characters
to optimize. Comparing entire strings is not efficient.
Alternative approach
If you are lazy or prefer a different approach, utilize Microsoft Query (ACE.OLEDB - SQL) which is much more efficient than any VBA code. Dump your vocabulary to a single worksheet and execute an SQL to find your matches like so (for each sentence separately):

Split string to tokens and dump it to another worksheet DumpedTokens

Execute a query like this:


Find all matches in the Vocab worksheet. Keep tokens that don't have translations:
SELECT Iif(Vocab.Word = NULL, Dumped.Token, Vocab.TranslatedWord) FROM [DumpedTokens$] as Dumped 
LEFT OUTER JOIN [VocabularySheet$] as Vocab 
ON UCase(Vocab.Word) = UCase(Dumped.Token)


Join the strings back into sentences

This will probably run a couple of seconds.
If you want you can use my SQL AddIn to Excel which makes it easier to write SQL queries in Excel: http://www.analystcave.com/excel-tools/excel-sql-add-in-free/