Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Что возвращает "Len" для числа? - Мир MS Excel

Регистрация · Логин: · Пароль: · · Забыли пароль?
Страница 1 из 11
Модератор форума: _Boroda_, Pelena, Manyasha, SLAVICK 
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Что возвращает "Len" для числа? (Макросы/Sub)
Что возвращает "Len" для числа?
Rioran Дата: Среда, 03.05.2017, 12:21 | Сообщение № 1
Группа: Авторы
Ранг: Ветеран
Сообщений: 902
Репутация: 285 ±
Замечаний: 0% ±

Excel 2013
Всем привет!

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

[vba]
Код
Sub Len_Test()
    Dim X, Y&, Z#: X = 363601: Y = 363601: Z = 363601
    Debug.Print "Работаем с 6-ти значным числом:"
    Debug.Print "Len(Variant) = " & Len(X) ' Возвращает 6
    Debug.Print "Len(Integer) = " & Len(Y) ' Возвращает 4 !!!???
    Debug.Print "Len(Double) = " & Len(Z) ' Возвращает 8 !!!???
    Debug.Print "Len(Variant to String) = " & Len(X & "") ' Возвращает 6
    Debug.Print "Len(Integer to String) = " & Len(Y & "") ' Возвращает 6
    Debug.Print "Len(Double to String) = " & Len(Z & "") ' Возвращает 6
End Sub
[/vba]
Собственно, вопрос: а что происходит? =)


Роман, Москва, voronov_rv@mail.ru
Яндекс-Деньги: 41001312674279
 
Ответить
СообщениеВсем привет!

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

[vba]
Код
Sub Len_Test()
    Dim X, Y&, Z#: X = 363601: Y = 363601: Z = 363601
    Debug.Print "Работаем с 6-ти значным числом:"
    Debug.Print "Len(Variant) = " & Len(X) ' Возвращает 6
    Debug.Print "Len(Integer) = " & Len(Y) ' Возвращает 4 !!!???
    Debug.Print "Len(Double) = " & Len(Z) ' Возвращает 8 !!!???
    Debug.Print "Len(Variant to String) = " & Len(X & "") ' Возвращает 6
    Debug.Print "Len(Integer to String) = " & Len(Y & "") ' Возвращает 6
    Debug.Print "Len(Double to String) = " & Len(Z & "") ' Возвращает 6
End Sub
[/vba]
Собственно, вопрос: а что происходит? =)

Автор - Rioran
Дата добавления - 03.05.2017 в 12:21
sboy Дата: Среда, 03.05.2017, 12:38 | Сообщение № 2
Группа: Проверенные
Ранг: Ветеран
Сообщений: 851
Репутация: 226 ±
Замечаний: 0% ±

Excel 2010
Добрый день.
тут у Вас, видимо опечатка? т.к. объявлена Long
[vba]
Код
Debug.Print "Len(Integer) = " & Len(Y) ' Возвращает 4 !!!???
Debug.Print "Len(Integer to String) = " & Len(Y & "") ' Возвращает 6
[/vba]
А по существу вопроса, выдает не длину числа, а размер в байтах для его хранения Long 4, Double 8


Сообщение отредактировал sboy - Среда, 03.05.2017, 12:38
 
Ответить
СообщениеДобрый день.
тут у Вас, видимо опечатка? т.к. объявлена Long
[vba]
Код
Debug.Print "Len(Integer) = " & Len(Y) ' Возвращает 4 !!!???
Debug.Print "Len(Integer to String) = " & Len(Y & "") ' Возвращает 6
[/vba]
А по существу вопроса, выдает не длину числа, а размер в байтах для его хранения Long 4, Double 8

Автор - sboy
Дата добавления - 03.05.2017 в 12:38
Michael_S Дата: Среда, 03.05.2017, 12:39 | Сообщение № 3
Группа: Друзья
Ранг: Старожил
Сообщений: 1823
Репутация: 341 ±
Замечаний: 0% ±

Excel2016
судя по всему - число байтов, отведенных для переменной. Ибо 4 и 8 возвращает при любых числах.
Почему так -ХЗ.


ЯД: 41001136675053
WM: R389613894253
 
Ответить
Сообщениесудя по всему - число байтов, отведенных для переменной. Ибо 4 и 8 возвращает при любых числах.
Почему так -ХЗ.

Автор - Michael_S
Дата добавления - 03.05.2017 в 12:39
Матраскин Дата: Среда, 03.05.2017, 12:43 | Сообщение № 4
Группа: Друзья
Ранг: Обитатель
Сообщений: 375
Репутация: 81 ±
Замечаний: 0% ±

20xx
https://msdn.microsoft.com/ru-ru/library/dxsw58z6(v=vs.90).aspx
Цитата
Возвращает целое число, содержащее либо количество знаков в строке, либо количество байтов, необходимых для сохранения переменной.


в интернете опять кто-то не прав

Сообщение отредактировал Матраскин - Среда, 03.05.2017, 12:45
 
Ответить
Сообщениеhttps://msdn.microsoft.com/ru-ru/library/dxsw58z6(v=vs.90).aspx
Цитата
Возвращает целое число, содержащее либо количество знаков в строке, либо количество байтов, необходимых для сохранения переменной.

Автор - Матраскин
Дата добавления - 03.05.2017 в 12:43
sboy Дата: Среда, 03.05.2017, 12:47 | Сообщение № 5
Группа: Проверенные
Ранг: Ветеран
Сообщений: 851
Репутация: 226 ±
Замечаний: 0% ±

Excel 2010
И для Variant
Цитата
Если же аргумент имеет значение типа Variant, то функция Len обрабатывает его так же, как и значение типа String, и всегда возвращает число содержащихся в нем символов
 
Ответить
СообщениеИ для Variant
Цитата
Если же аргумент имеет значение типа Variant, то функция Len обрабатывает его так же, как и значение типа String, и всегда возвращает число содержащихся в нем символов

Автор - sboy
Дата добавления - 03.05.2017 в 12:47
Rioran Дата: Среда, 03.05.2017, 13:56 | Сообщение № 6
Группа: Авторы
Ранг: Ветеран
Сообщений: 902
Репутация: 285 ±
Замечаний: 0% ±

Excel 2013
тут у Вас, видимо опечатка? т.к. объявлена Long

sboy, привет, действительно - признаю опечатку по Фрейду =)

Michael_S, Матраскин, sboy, спасибо за ответы.


Роман, Москва, voronov_rv@mail.ru
Яндекс-Деньги: 41001312674279
 
Ответить
Сообщение
тут у Вас, видимо опечатка? т.к. объявлена Long

sboy, привет, действительно - признаю опечатку по Фрейду =)

Michael_S, Матраскин, sboy, спасибо за ответы.

Автор - Rioran
Дата добавления - 03.05.2017 в 13:56
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Что возвращает "Len" для числа? (Макросы/Sub)
Страница 1 из 11
Поиск:

Яндекс цитирования
© 2010-2017 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!