Value war bisher immer ein Variant, zumindest bei den Delphi- und Excelversionen, mit denen ich zu tun hatte.
Warum soll das jetzt anders sein.
Variant hat den Vorteil, dass man da "reinschieben" kann was man will und den Nachteil, dass da interpretiert wird, wie Excel, ... es wollen.
Und da können zuweilen Unterschiede zwischen gewünscht, erwartet und tatsächlich auftreten
Den Typ von Value erfährt man (meist) durch Nachschauen in der
PAS-Datei zur entsprechenden Typelib.
Alternativ in die Doku schauen:
excel.range.value
Warum sollten TestArray[0] und TestArray[i] den gleichen Wert enthalten? Das kann nur dann zutreffen, wenn i = 0.
Und 19.862.388,00 sowie 198,62388 zeigen eindeutig, dass FloatToStr das Komma als Dezimaltrenner liefert, während Excel den Punkt als Dezimaltrenner erwartet und dann irgendwie interpretiert, nur nicht richtig.
Die Stringkonvertierung von Doublewerte bei der Zuweisung auf Value ist schlicht und einfach überflüssig und Kontraproduktiv.