Страницы: 1
RSS
При вставке пропадает разделитель целой и дробной части, Решено
 
Приветствую!

При вставке десятичных чисел в виде текста (в примере это результат Split'а), разделитель целой и дробной части будет удалён для чисел с разрядами 3 и более
Решение: элементы массива Split'а строковые и преобразование их не изменит, так что используем переменную
Если числа получены как-то по-другому, то просто не забываем их преобразовать, иначе это сделает Excel и не всегда корректно  :D
Код и скрины
— как можете заметить, при вставке абсолютно плевать, какой был разделитель целой и дробной части — всё будет числами и не всегда корректными  :D
Суть проблемы в 2ух строках кода
объяснил на Split'е, т.к. после него и обнаружил эту проблему + понял (и захотел тоже показать), что элементы Split'а (строковый массив) не преобразовать в числа напрямую, пока они внутри массива
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Цитата
Jack Famous написал: При Spli'е... разделитель целой и дробной части будет удалён
Не понял. См. картинку. На месте точечка.
 
vikttur, ошибся — при вставке пропадает он
При вставке пропадает разделитель целой и дробной части, Решено
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
В каком месте проблему увидеть?
 
vikttur, красным на листе подсветил: при вставке ТЕКСТА "1,111", вставилось (Excel преобразовал, умножив на 1000) ЧИСЛО 1111
Дополнил СС сутью  :)
Изменено: Jack Famous - 23.04.2021 13:59:19
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
А Split при чем? Значение преобразовывается, когда от Split следа не осталось.
Код
Sub Test()
    Dim arr(1 To 2, 1 To 1)

    arr(1, 1) = "1,111"
    arr(2, 1) = "1.111"

    Range("A4").Resize(UBound(arr, 1), UBound(arr, 2)).Value = arr
End Sub

Догадка.
У американцев запятая  - разделитель групп разрядов, поэтому число так и воспринимается (с преобразованием). А Split - текстовый оператор, все значения, полученные в массив, редактор понимает как тексты, и не иначе
 
vikttur, я уже предложил название с ним не связанное - запутался  :oops:
Но саму инфу по Split'у надо оставить - то, что его строковые элементы не преобразовать в числа, пока они в массиве тут тоже важно
Изменено: Jack Famous - 23.04.2021 14:04:39
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
На майских создам отдельную тему с систематизацией подобных эффектов (давно их коллекционирую).
Результат работы "2 строк кода" указан верно и не зависит от региональных настроек.
Владимир
 
Цитата
vikttur: Догадка … У американцев
скорее всего так и есть, потому что запятая у пиндосов как раз разделитель разрядов и его Excel просто опускает за ненадобностью (спасибо, бл%% большое  :D )
Странно (на самом деле нет), что как всегда порядка нет, ведь Immediate выводит с учётом настроек (с запятой у меня)

sokol92, жду подробный разбор  ;)
Изменено: Jack Famous - 23.04.2021 14:29:33
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Пока для разминки (решать без доски, а затем проверить). Что будет отображено в ячейке после оператора

Код
Range("A1").Value=arg

где ячейка A1 имеет общий формат; текущий стиль ссылок ячеек A1;  arg принимает одно  из следующих значений:

1. "1234,567.89"
2. "12,34,567.89"
3. "2.2.2"
4, "20 oct 20"
5. "12/1"
6, "1/0"
7, "11-11"
8. "=R1C11+R2C11"
9. "=K1+/K2"

Пока писал, пришло сообщение что В.В. предоставил мне дополнительные дни на подготовку сообщения. :D  
Владимир
 
Создал тему.
Владимир
Страницы: 1
Наверх