Вставить двумерный массив двойных значений с 3 десятичными позициями потерять разделитель и превратиться в тысячи

Я пытаюсь вставить двумерный массив Variant / String в диапазон. Это не проблема. Столбцы Variant / String могут содержать строки или двойные значения.

Все работает отлично, за исключением тех ячеек, где двойное значение содержит 3 десятичных знака или больше. Comma (,) – десятичный разделитель, а точка (.) – это тысячный разделитель для моего Excel.

например:

При приближении 2,3 в массиве он вставляет 2,3 в ячейку Excel

При приближении 2,34 в массиве он вставляет 2,34 в ячейку Excel

Когда в массиве приходит 2,321, он вставляет 2321 в ячейку Excel.value и показывает 2.321 в cell.text

При приближении 2,3215 в массиве он вставляет 23215 в ячейку Excel.value и показывает 23.215 в cell.text

Код:

Dim DataArray(2, 2) As Variant ... ... code that fills DataArray ... Range("A1").Resize(UBound(DataArray, 1) + 1,UBound(DataArray, 2) + 1).Offset(1, 0) = DataArray 

У меня была аналогичная проблема. Это просто классический случай, когда Excel неправильно интерпретирует тип конца варианта. К сожалению, эта аккуратная векторная формула для заполнения вашего диапазона должна идти. Вместо этого вы можете использовать что-то вроде этого (i и j указывают верхнюю левую ячейку вашего диапазона переменных):

 Dim cell As Range Dim x As String Dim i as integer, j as integer 'The first cell is "A1" i=1 j=1 For Each cell In Range(Cells(i,j),Cells(i+UBound(DataArray, 1),j+Ubound(DataArray))) x = DataArray(cell.Row - i, cell.Column - j) cell.Value = x 'Next line is optional If IsNumeric(x) Then cell.NumberFormat = "General" Next cell 

Протестировано и работает. Если вы опустите необязательную строку, Excel угадает формат, но в основном будет правильным. Если вы знаете, какой формат вы хотите для своих номеров, определите его на дополнительной строке. Вы можете попробовать другие форматы, такие как «###, ## 0.00», если вы хотите указать число десятичных знаков.

Надеюсь, это помогло.

Хорошо работает со следующей модификацией:

 Dim cell As Range Dim x As String Dim D as Double Dim i as integer, j as integer 'The first cell is "A1" i=1 j=1 For Each cell In Range(Cells(i,j),Cells(i+UBound(DataArray, 1),j+Ubound(DataArray))) x = DataArray(cell.Row - i, cell.Column - j) If IsNumeric(x) Then D = CDbl(x) cell.Value = D Else cell.value = x end if Next cell 

Огромное спасибо!!! 🙂

Давайте будем гением компьютера.