If you're on .NET 4.0 or later, you can use CTypeDynamic instead. See also this question.
Dim t As Type = value.GetType()
cell2.SetCellValue(CTypeDynamic(value, t))
You might also want to consider changing your settings' storage mechanism a bit. Putting several different types in a Dictionary of Objects may make future maintenance and debugging obnoxious. As an off the cuff idea, one possibility would be a simple wrapper class with private type-specific dictionaries and overloaded accessors and mutators.