bedvit
Пользователь
Сообщений: 2477
Регистрация: 02.04.2015
Виталий
Друзья, всем привет!
Для всех кто любит VBA, решил написать помощник в длинной арифметики.
Это продолжение и наверное завершение моих предыдущих трех тем.
Реализация через .XLL, т.е. все очень просто — устанавливается как надстройка и готово!
Длинное число с математикой работает как экземпляр объекта.
Перегрузка операторов в VBA — мечта, поэтому тупо через свойства и методы.
Скорость работы — более чем в 10 раз быстрее чем все предыдущие решения (!100000=20 сек, 1000000!=’8,263931688331240E+5565708 — 50мин.)
Есть справка .Help:
Properties (Name-Type-Description)
1) L — as Object — LongNum
2) LNum — as Int32 — Converts the numeric value (Int32-Holds signed 32-bit (4-byte) integers that range in value from -2,147,483,648 through 2,147,483,647.).
3) LString(Optional format) — as String — Converts the StringExponential notation (format = «E…», example:»E5″=»1.11111E+…»)
4) Sign — As Integer — Gets a number that indicates the sign (negative, positive, or zero) of the currentLongNum object.
5) IsEven — As Boolean — Indicates whether the value of the current LongNum object is an even number.
Methods (Name-Return-Description)
1) Addition(LongNum, LongNum, Optional Subtraction) — As LongNum — Adds/Subtracts two LongNum values and returns the result.
2) Copy(LongNum) — No — Specifies the LongNum to which the specified object will be copied
3) Compare(LongNum, LongNum) — As Integer — Compares two LongNum values and returns an integer that indicates whether the first value is less than, equal to, or greater than the second value.
4) Divide(LongNum, LongNum) — As LongNum — Divides one LongNum value by another and returns the result.
5) Factorial(Int32) — As LongNum — Returns a BigInteger value — Factorial of a specified value.
6) Help — Msgbox — Help
7) HelpString — As String — Help
Modulus(LongNum, LongNum) — As LongNum — Performs integer division on two LongNum values and returns the remainder.
9) Multiply(LongNum, LongNum) — As LongNum — Returns the product of two LongNum values.
10) Negate(LongNum) — As LongNum — Negates a specified LongNum value.
11) Pow(LongNum, Int32) — As LongNum — Raises a LongNum value to the power of a specified value.
Подключаем .XLL. вносим код в обычный модуль, смотрим
Код |
---|
Option Explicit Sub Test() Dim LN As Object Dim LN2 As Object Set LN = CreateObject("LongNum") Set LN2 = CreateObject("LongNum") LN.LString = "4.564464545656464647E+45665" 'парсинг строки и строки в экспоненциальной записи в LongNum 'LN2.l = LN.l 'копия из LN в LN2 вариант1 LN.Copy LN2 'копия из LN в LN2 вариант2 LN2.LString = "65655654" 'парсинг строки и строки в экспоненциальной записи в LongNum LN2.LNum = 65655654 'в числовом формате 'LN.l = LN.Multiply(LN, LN2) 'умножить вариант 1 Set LN = LN.Multiply(LN, LN2) 'умножить вариант 2 Debug.Print "Вывести: строка= " & LN.LString Debug.Print "Вывести: в экспоненциальной записи= " & LN.LString("E5") 'E5 - 5 знаков в мантиссе, после запятой Debug.Print Application.Run("Fact", 50) 'бонус :) LN.Help 'Справка Debug.Print LN.HelpString 'Справка в строке StrPrint [a1], LN.LString End Sub Public Sub StrPrint(Cell As Range, ByVal s As String) 'вывести в ячейку/ки длинное число Dim x As Long, l As Long l = Len(s) For x = 0 To l 32766 Cell.Offset(0, x) = "'" & Mid$(s, 32766 * x + 1, 32766) Next End Sub |
Ввод: строка, экспоненциальной запись (с любой степенью), Long
Вывод: строка (обычная — по умолчанию, и экспоненциальная запись (с задаваемой мантиссой)
xll. не пролезают, залил на Яндекс диск:
Для Excelx32 —
https://yadi.sk/d/iM8ElM7UtGXet
Для Excelx64 —
https://yadi.sk/d/j2MCk4C_tGXez
Какие мнения?
«Бритва Оккама» или «Принцип Калашникова»?
Содержание
- Числовые типы данных (Visual Basic)
- Целочисленные числовые типы
- Производительность
- Большие целые числа
- Небольшие целые числа
- Целые числа без знака
- Неинтегральные числовые типы
- Производительность
- Малые величины
- Небольшие дробные числа
- VBA Long (пример) | Пошаговое руководство по длинному типу данных в Excel VBA
- Что такое длинный тип данных в VBA?
- Примеры длинного типа данных VBA
- VBA Long, пример №1
- Пример 2 на VBA Long
- Альтернативные варианты для Excel VBA Long Variable
- Тип данных Long (Visual Basic)
- Комментарии
- Литеральные назначения
- Советы по программированию
Числовые типы данных (Visual Basic)
Visual Basic предоставляет несколько числовых типов данных для обработки чисел в различных представлениях. Целочисленные типы представляют только целые числа (положительные, отрицательные и нулевые), а неинтегральные типы представляют числа как целыми, так и дробными частями.
Таблица, показывающая параллельное сравнение типов данных Visual Basic см. в разделе «Типы данных».
Целочисленные числовые типы
Целочисленные типы данных представляют только числа без дробных частей.
Подписанные целочисленные типы данных : SByte Data Type (8-bit), Short Data Type (16-bit), Integer Data Type (32-bit) и Long Data Type (64-bit). Если переменная всегда хранит целые числа, а не дробные числа, объявите ее как один из этих типов.
Целочисленные типы без знака : байтовый тип данных (8-разрядный), тип данных UShort (16-разрядный), тип данных UInteger (32-разрядный) и тип данных ULong (64-разрядный). Если переменная содержит двоичные данные или данные неизвестного характера, объявите ее как один из этих типов.
Производительность
Арифметические операции выполняются быстрее с целочисленными типами, чем с другими типами данных. Они являются самыми быстрыми Integer с типами UInteger в Visual Basic.
Большие целые числа
Если требуется содержать целое число, большее Integer , чем может содержать тип данных, можно использовать Long вместо него тип данных. Long переменные могут содержать числа от -9 223 372 036 854 775 808 до 9 223 372 036 854 775 807. Операции с Long немного медленнее, чем с Integer .
Если вам нужны даже большие значения, можно использовать десятичный тип данных. Вы можете хранить номера от -79 228 162 514 264 337 593 543 950 3355 до 79 228 162 514 264 337 593 543 950 335 в переменной Decimal , если не использовать десятичные разряды. Однако операции с Decimal числами значительно медленнее, чем с любым другим числовым типом данных.
Небольшие целые числа
Если вам не нужен полный Integer диапазон типа данных, можно использовать Short тип данных, который может содержать целые числа от –32 768 до 32 767. Для наименьшего целого диапазона SByte тип данных содержит целые числа от -128 до 127. Если у вас есть очень большое количество переменных, в которых хранятся небольшие целые числа, среда CLR иногда может более эффективно хранить ваши Short переменные SByte и сохранять потребление памяти. Однако операции с Short ими SByte несколько медленнее, чем с Integer .
Целые числа без знака
Если вы знаете, что переменная никогда не должна содержать отрицательное число, можно использовать неподписанные типы Byte , UInteger UShort и ULong т. е. Каждый из этих типов данных может содержать положительное целое число в два раза больше, чем соответствующий подписанный тип ( SByte , , Short Integer и Long ). С точки зрения производительности каждый неподписанный тип точно так же эффективен, как соответствующий подписанный тип. В частности, разделяется различием в Integer том, UInteger что они являются наиболее эффективными из всех простых числовых типов данных.
Неинтегральные числовые типы
Неинтегральные типы данных представляют числа как целыми, так и дробными частями.
Неинтегральные числовые типы данных: Decimal (128-разрядная фиксированная точка), один тип данных (32-разрядная плавающая точка) и двойной тип данных (64-разрядная плавающая точка). Все они являются подписанными типами. Если переменная может содержать дробь, объявите ее как один из этих типов.
Decimal не является типом данных с плавающей запятой. Decimal числа имеют двоичное целочисленное значение и целочисленный коэффициент масштабирования, указывающий, какая часть значения является десятичной дробной.
Переменные можно использовать Decimal для денежных значений. Преимуществом является точность значений. Тип Double данных выполняется быстрее и требует меньше памяти, но при этом возникают ошибки округления. Тип Decimal данных сохраняет полную точность до 28 десятичных разрядов.
Числа с плавающей запятой ( Single и Double ) имеют больше диапазонов, чем Decimal числа, но могут быть подвержены ошибкам округления. Типы с плавающей запятой поддерживают меньше значимых цифр, чем Decimal могут представлять значения большей величины.
Неинтегральные числовые значения могут быть выражены как mmmEeee, в котором ммм является мантисса (значащих цифр) и eee является экспонентой (мощностью 10). Самые высокие положительные значения неинтегральных типов : 7,9228162514264337593593950335E+28 для Decimal , 3,4028235E+38 для Single , и 1,79769313486231570E+308 для Double .
Производительность
Double является наиболее эффективным из дробных типов данных, так как процессоры на текущих платформах выполняют операции с плавающей запятой в двойной точности. Однако операции с Double такими целочисленными типами, как не так быстро, как Integer и в случае с целыми типами.
Малые величины
Для чисел с наименьшей возможной величиной (ближе всего к 0) Double переменные могут содержать числа меньше -4,9406564584124654E-324 для отрицательных значений и 4,9406564584124654E-324 для положительных значений.
Небольшие дробные числа
Если вам не нужен полный диапазон Double типа данных, можно использовать Single тип данных, который может содержать числа с плавающей запятой от -3,4028235E+38 до 3,4028235E+38. Наименьшие величины переменных — -1,401298E-45 для Single отрицательных значений и 1,401298E-45 для положительных значений. Если у вас есть очень большое количество переменных, в которых хранятся небольшие числа с плавающей запятой, среда CLR иногда может более эффективно хранить Single переменные и сохранять потребление памяти.
Источник
VBA Long (пример) | Пошаговое руководство по длинному типу данных в Excel VBA
Что такое длинный тип данных в VBA?
Long — это тип данных в VBA, который используется для хранения числовых значений, мы знаем, что целое число также содержит числовые значения, но Long отличается от целых чисел, поскольку диапазон для хранения данных очень велик в случае длинного типа данных также в long тип данных, мы также можем хранить десятичные значения, это встроенный тип данных.
«Длинный», как следует из названия, должен содержать ценность чего-то большого. «Длинный» — это числовой тип данных в VBA Excel.
Тип данных long в Excel VBA может содержать значения от 0 до 2, 147, 483, 647 для положительных чисел, а для отрицательного числа он может содержать значения от 0 до -2, 147, 483, 648.
Тип данных VBA Long требует 4 байта памяти вашего компьютера, это память переменных типа данных с двойным целым числом (2 байта) и половина памяти переменных с двойным типом данных (8 байтов)
Я никогда не видел сценария, в котором я хотел бы полностью использовать ограничение типа данных VBA Long за свою короткую карьеру. Но я покажу вам несколько примеров, чтобы лучше понять это.
Примеры длинного типа данных VBA
Ниже приведены примеры типа данных Excel VBA Long.
Вы можете скачать этот шаблон Excel для длинных данных VBA здесь — Шаблон Excel для длинных данных VBA
VBA Long, пример №1
Как только вы объявите тип данных переменной как «Long», вы можете присвоить значения от -2, 147, 483, 648 до 2, 147, 483, 648.
Например, объявите переменную как длинный тип данных.
Код:
Давайте присвоим значение как общее количество строк на листе.
Чтобы получить общее количество строк в коде листа Excel, это «Строки. Граф »
Код:
Теперь покажите значение в окне сообщения.
Код:
Запустите этот код и посмотрите, сколько всего строк на листе.
В нем говорится, что у нас более 1 миллиона строк на листе.
Теперь для лучшего понимания я изменю тип данных с LONG на INTEGER.
Код:
Если я запустил код VBA, я получу сообщение об ошибке «Переполнение».
Причина, по которой мы получили эту ошибку в VBA, состоит в том, что тип данных «Целое число» может содержать только значения от -31768 до 32767. В данном случае «Ряды. Count »вернет число, которое превышает предел« целочисленной »переменной.
Присвоение значения более 1 миллиона переменной, которая может содержать только 32767, вызывает здесь ошибку переполнения.
Пример 2 на VBA Long
Найдите последнюю строку с помощью длинной переменной
Поиск последней использованной строки рабочего листа является наиболее важным при кодировании. Чтобы найти последнюю использованную строку рабочего листа, необходимо объявить переменную. Хотя для объявления переменной и присвоения типа данных требуется некоторый здравый смысл.
Предположим, у вас есть данные, заканчивающиеся на 25000 строках, как показано на изображении ниже.
Теперь я знаю, что номер последней использованной строки — 25000, для этого нам не нужен тип данных «LONG», поскольку тип данных «INTEGER» может дать мне последнюю строку.
Взгляните на приведенный ниже код для получения информации.
Код:
Если я запустил этот код, я получу номер последней использованной строки рабочего листа, над которым я работаю в данный момент.
Программисту важно знать, какой размер данных у вас будет в будущем. Поскольку в настоящий момент данные могут заканчиваться на 25000-й строке, но если данные увеличиваются за пределы «целочисленного» предела, то есть 32767, это вызывает ошибку переполнения.
Например, увеличу данные до 32768 строк.
Теперь, если я снова запустил тот же код, я не получу значение, а получу ошибку, как показано ниже.
Помните, что я увеличил предел всего на 1 сверх предела значения «Целое число», поэтому я получил ошибку переполнения.
Поэтому важно знать размер ваших данных, прежде чем назначать тип данных переменной. Всегда лучше объявить переменную как «LONG», не задумываясь о размере ваших данных в будущем.
Альтернативные варианты для Excel VBA Long Variable
Вы, должно быть, уже думаете о том, что, если мы хотим удерживать значение больше, чем предел длинной переменной. Для этого нам нужно использовать разные типы данных, то есть VBA «String» или «Variant».
Помните, что в момент пересечения числа 2147483647 мы получим ошибку переполнения в VBA с типом данных LONG. Чтобы хранить больше этого числа, нам нужно использовать тип данных «String» или «Variant».
Для строки
Код:
Для варианта
Код:
Когда мы запускаем вышеуказанные коды, он покажет упомянутый номер.
Источник
Тип данных Long (Visual Basic)
Содержит 64-разрядные (8-байтовые) целые числа со знаком в диапазоне от -9 223 372 036 854 775 808 до 9 223 372 036 854 775 807 (9,2. E+18).
Комментарии
Long Используйте тип данных, чтобы содержать целые числа, которые слишком велики, чтобы поместиться в Integer тип данных.
Значение по умолчанию для типа Long — 0.
Литеральные назначения
Переменную можно объявить и инициализировать Long , назначив ей десятичный литерал, шестнадцатеричный литерал, восьмеричный литерал или (начиная с Visual Basic 2017) двоичный литерал. Если целочисленный литерал выходит за пределы диапазона Long (то есть, если он меньше Int64.MinValue или больше Int64.MaxValue), возникает ошибка компиляции.
В следующем примере целые числа, равные 4 294 967 296 и представленные в виде десятичного, шестнадцатеричного и двоичного литерала, назначаются значениям Long .
Префикс &h или &H используется для обозначения шестнадцатеричного литерала, префикса &b или &B для обозначения двоичного литерала и префикса &o или &O для обозначения восьмеричного литерала. У десятичных литералов префиксов нет.
Начиная с Visual Basic 2017, вы также можете использовать символ подчеркивания , _ в качестве разделителя цифр для повышения удобочитаемости, как показано в следующем примере.
Начиная с Visual Basic 15.5, вы также можете использовать символ подчеркивания ( _ ) в качестве ведущего разделителя между префиксом и шестнадцатеричными, двоичными или восьмеричной цифрами. Например:
Чтобы использовать символ подчеркивания в качестве начального разделителя, необходимо добавить следующий элемент в файл проекта Visual Basic (*.vbproj):
Числовые литералы также могут содержать L символ типа , обозначающий Long тип данных, как показано в следующем примере.
Советы по программированию
Вопросы взаимодействия. При взаимодействии с компонентами, не написанными для платформа .NET Framework, например с объектами автоматизации или COM, помните, что Long в других средах имеется другая ширина данных (32 бита). Если вы передаете 32-разрядный аргумент в такой компонент, объявите его как Integer в новом коде Long Visual Basic.
Расширение. Тип Long данных расширяется до Decimal , Single или Double . Это означает, что тип Long можно преобразовать в любой из этих типов без возникновения ошибки System.OverflowException.
Символы типов. При добавлении к литералу символа типа литерала L производится принудительное приведение литерала к типу данных Long . При добавлении символа идентификатора типа & к любому идентификатору производится принудительное приведение этого идентификатора к типу Long .
Источник
In this Article
- Long Variable Type
- LongLong data type
- LongPtr data type
- Decimal Values & Long Data Types
- Decimal / Double Data Type
- Declare Long Variable at Module or Global Level
- Module Level
- Global Level
- Format Long Stored as String
Long Variable Type
The VBA Long data type is used to store very long data values (-2,147,483,648 to 2,147,483,648). It can only store whole numbers (with no decimal places).
To declare an Long variable, you use the Dim Statement (short for Dimension):
Dim lngA as Long
Then, to assign a value to a variable, simply use the equal sign:
lngA = 30000
Putting this in a procedure looks like this:
Sub lngExample()
'declare the long variable
Dim lngA as Long
'populate the long variable
lngA = 30000
'show the message box
MsgBox lngA
End Sub
If you run the code above, the following message box will be shown.
LongLong data type
The LongLong data type is only available in the 64 bit version of Microsoft Office. If you are running a 32 bit version of Office on a 64 bit machine, this data type will not be available. It supports numbers in the range of -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807.
Dim lngA as LongLong
LongPtr data type
The LongPtr was introduced into VBA in order to support the 64 bit version of Microsoft Office. On a 32 bit system, it is treated as a Long and on 64 bit systems it is treated as a LongLong.
Dim lngA as LongPtr
Note: LongPtr is not available in Excel 2007 or earlier.
Decimal Values & Long Data Types
Long variables cannot store decimal values. If you pass a decimal number a long, the decimal number will be rounded to remove the decimal.
Therefore, if you were to run the procedure below:
Sub LngExampleB()
'declare the long variable
Dim lngA as Long
'populate the long variable
lngA = 3524.12
'show the message box
MsgBox lngA
End Sub
The decimal value would be rounded down, returning the following message:
However, this code below:
Sub LngExampleB()
'declare the long variable
Dim lngA as Long
'populate the long variable
lngA = 3524.12
'show the message box
MsgBox lngA
End Sub
Would return the following message box (rounding up):
Decimal / Double Data Type
If you want to store a decimal place, you would need to declare a variable that allows for decimal places. There are 3 data types that you can use – Single, Double or Currency.
Dim sngPrice as Single
Dim dblPrice as Double
Dim curPrice as Currency
The Single data type will round the decimal point slightly differently to the double and currency data type, so it is preferable to use double to single for accuracy. A Double can have up to 12 decimal places while Currency and Single can both have up to 4 decimal places.
Declare Long Variable at Module or Global Level
In the previous examples, we’ve declared the Long variable within a procedure. Variables declared with a procedure can only be used within that procedure.
Instead, you can declare Long variables at the module or global level.
VBA Coding Made Easy
Stop searching for VBA code online. Learn more about AutoMacro — A VBA Code Builder that allows beginners to code procedures from scratch with minimal coding knowledge and with many time-saving features for all users!
Learn More
Module Level
Module level variables are declared at the top of code modules with the Dim statement.
These variables can be used with any procedure in that code module.
Global Level
Global level variables are also declare at the top of code modules. However, instead of using the Dim statement, use the Public statement to indicate that the long variable is available to be used throughout your VBA Project.
Public lngA as Long
If you were to declare the long variable at a module level and then try to use it in a different module, an error would occur.
However, if you had used the Public keyword to declare the long variable, the error would not occur and the procedure would run perfectly.
Format Long Stored as String
There may be a time where you wish to format a long data type to a string – for example a date or you might want to display a currency symbol.
To achieve this, you use the Format function.
The following procedure:
Sub TestLongToString()
'declare the string variable
Dim strDate as string
'declare the long and populate the value
Dim lngDate as long
lngDate = 44055
'convert the long to a string formatted as a date
strDate = Format(lngDate, "dd mmmm yyyy")
'view the result
Debug.Print strDate
End Sub
would return the result below:
and the following procedure
Sub TestLongtoCurrencyString()
'declare the string variable
Dim strMoney As String
'declare the long and populate the value
Dim lngValue As Long
lngValue = 44055
'convert the long to a string with a currency symbol
strMoney = Format(lngValue, "$#,##0")
'view the result
MsgBox strMoney
End Sub
would return this result:
What is a Long Data Type in VBA?
Long is a data type in VBA used to store the numeric values. We know that integer also holds numeric values, but Long differs from integers as the data storage range is very big. In the case of the Long data type, we can hold decimal values too. So, it is a built-in data type.
“Long,” as the name says, should hold the value of something big. “Long” is a numerical data type in VBA Excel.
The Long data type in Excel VBA can hold the values from 0 to 2, 147, 483, 647 for positive numbers, and the negative number can hold from 0 to -2, 147, 483, 648.
VBA Long data type requires 4 bytes of memory storage of your computer. It is the double Integer data type, variable memory (2 bytes), and half of the double data type variable memory (8 bytes).
In my short career, we have never seen a scenario where we want to utilize the limit of a VBA Long data type fully. But, we will show you some examples to better understand it.
Table of contents
- What is a Long Data Type in VBA?
- Examples of VBA Long Data Type
- VBA Long Example #1
- VBA Long Example #2
- Alternatives to Excel VBA Long Variable
- Recommended Articles
- Examples of VBA Long Data Type
You are free to use this image on your website, templates, etc, Please provide us with an attribution linkArticle Link to be Hyperlinked
For eg:
Source: VBA Long (wallstreetmojo.com)
Examples of VBA Long Data Type
Below are the examples of excel VBA Long data types.
You can download this VBA Long Data Type Excel Template here – VBA Long Data Type Excel Template
VBA Long Example #1
As soon as you declare the variable data type as “Long,” you can assign the values from -2, 147, 483, 648 to 2, 147, 483, 648.
For example, declare the variable as a Long data type.
Code:
Sub Long_Example1() Dim k As Long End Sub
Let us assign the value as a total row count of the worksheet.
For getting the total count of rows in the excelThere are numerous ways to count rows in Excel using the appropriate formula, whether they are data rows, empty rows, or rows containing numerical/text values. Depending on the circumstance, you can use the COUNTA, COUNT, COUNTBLANK, or COUNTIF functions.read more worksheet, the code is “Rows. Count.”
Code:
Sub Long_Example1() Dim k As Long k = Rows.Count End Sub
Now, show the value in the message box.
Code:
Sub Long_Example1() Dim k As Long k = Rows.Count MsgBox k End Sub
Run this code and see what the total rows count in the worksheet is.
It says we have more than 1 million rows on the worksheet.
For better understanding, we will change the data type from LONG to INTEGER.
Code:
Sub Long_Example1() Dim k As Integer k = Rows.Count MsgBox k End Sub
If we run the VBA codeVBA code refers to a set of instructions written by the user in the Visual Basic Applications programming language on a Visual Basic Editor (VBE) to perform a specific task.read more, we get the error message “Overflow.”
We got this error in VBAVBA error handling refers to troubleshooting various kinds of errors encountered while working with VBA. read more because the data type “Integer” can only hold the values from -31768 to 32767. In this case, “Rows. Count” will return the number exceeding the limit of the “integer” variable.
Assigning the value of over 1 million to the variable which can hold only 32767 causes the overflow error here.
VBA Long Example #2
Find the Last Row Using Long Variable
Finding the last used row of the worksheet is the most important of the coding. To find the last used row of the worksheet requires a variable to be declared. While declaring the variable and assigning a data type requires some common sense.
As shown in the image below, assume you have data that ends at 25,000 rows.
Now, we know the last used row number is 25,000. So, for this, we do not need the “LONG” data type because the “INTEGER” data type can give me the last row.
Look at the below code for your information.
Code:
Sub Long_Example1() Dim k As Integer k = Cells(Rows.Count, 1).End(xlUp).Row MsgBox k End Sub
If we run this code, we will get the last used row number of the worksheet we are working on now.
Knowing the size of the data you will have in the future is important as a coder. Because at the moment, data may end at the 25,000th row, but if the data increases beyond the “Integer” limit, i.e., 32767, it causes an overflow error.
For example, I will increase the data to 32768th rows.
We will not get the value if I run the same code again. Rather, we will get the error below.
Remember, we have increased the limit by just 1, beyond the limit of the “Integer” value, so we got an “Overflow” error.
So, it is important to know the size of your data before you assign a data type to the variable. Therefore, it is always better to declare the variable as “LONG” without considering your future data size.
Alternatives to Excel VBA Long Variable
You must already be thinking about what if we want to hold the value more than the limit of a long variable. For this, we need to use different data types: VBA “String” or “Variant.”
Remember, when it crosses the number 2147483647, we will get an overflow error in VBAVBA Overflow Error or «Run Time Error 6: Overflow» occurs when the user inserts a value that exceeds the capacity of a specific variable’s data type. Thus, it is an error that results from the overloading of data beyond the desired data type limit of the variable.read more with the LONG data type. So, we need to use the “String” or “Variant” data type to store more than this number.
For String
Code:
Sub Long_Example2() Dim k As String k = 2147483648 MsgBox k End Sub
For Variant
Code:
Sub Long_Example2() Dim k As Variant k = 2147483648 MsgBox k End Sub
When we run the above codes, it will show the mentioned number.
Recommended Articles
This article has been a guide to VBA Long data type in Excel. Here, we learn how to use the VBA Long data type, practical examples, and a downloadable Excel template. Below are some useful Excel articles related to VBA: –
- VBA Row Count
- VBA End
- VBA Call Sub Procedure
- CDBL VBA
Что такое длинный тип данных в VBA?
Long — это тип данных в VBA, который используется для хранения числовых значений, мы знаем, что целое число также содержит числовые значения, но Long отличается от целых чисел, поскольку диапазон для хранения данных очень велик в случае длинного типа данных также в long тип данных, мы также можем хранить десятичные значения, это встроенный тип данных.
«Длинный», как следует из названия, должен содержать ценность чего-то большого. «Длинный» — это числовой тип данных в VBA Excel.
Тип данных long в Excel VBA может содержать значения от 0 до 2, 147, 483, 647 для положительных чисел, а для отрицательного числа он может содержать значения от 0 до -2, 147, 483, 648.
Тип данных VBA Long требует 4 байта памяти вашего компьютера, это память переменных типа данных с двойным целым числом (2 байта) и половина памяти переменных с двойным типом данных (8 байтов)
Я никогда не видел сценария, в котором я хотел бы полностью использовать ограничение типа данных VBA Long за свою короткую карьеру. Но я покажу вам несколько примеров, чтобы лучше понять это.
Примеры длинного типа данных VBA
Ниже приведены примеры типа данных Excel VBA Long.
Вы можете скачать этот шаблон Excel для длинных данных VBA здесь — Шаблон Excel для длинных данных VBA
VBA Long, пример №1
Как только вы объявите тип данных переменной как «Long», вы можете присвоить значения от -2, 147, 483, 648 до 2, 147, 483, 648.
Например, объявите переменную как длинный тип данных.
Код:
Sub Long_Example1 () Dim k As Long End Sub
Давайте присвоим значение как общее количество строк на листе.
Чтобы получить общее количество строк в коде листа Excel, это «Строки. Граф »
Код:
Sub Long_Example1 () Dim k As Long k = Rows.Count End Sub
Теперь покажите значение в окне сообщения.
Код:
Sub Long_Example1 () Dim k As Long k = Rows.Count MsgBox k End Sub
Запустите этот код и посмотрите, сколько всего строк на листе.
В нем говорится, что у нас более 1 миллиона строк на листе.
Теперь для лучшего понимания я изменю тип данных с LONG на INTEGER.
Код:
Sub Long_Example1 () Dim k As Integer k = Rows.Count MsgBox k End Sub
Если я запустил код VBA, я получу сообщение об ошибке «Переполнение».
Причина, по которой мы получили эту ошибку в VBA, состоит в том, что тип данных «Целое число» может содержать только значения от -31768 до 32767. В данном случае «Ряды. Count »вернет число, которое превышает предел« целочисленной »переменной.
Присвоение значения более 1 миллиона переменной, которая может содержать только 32767, вызывает здесь ошибку переполнения.
Пример 2 на VBA Long
Найдите последнюю строку с помощью длинной переменной
Поиск последней использованной строки рабочего листа является наиболее важным при кодировании. Чтобы найти последнюю использованную строку рабочего листа, необходимо объявить переменную. Хотя для объявления переменной и присвоения типа данных требуется некоторый здравый смысл.
Предположим, у вас есть данные, заканчивающиеся на 25000 строках, как показано на изображении ниже.
Теперь я знаю, что номер последней использованной строки — 25000, для этого нам не нужен тип данных «LONG», поскольку тип данных «INTEGER» может дать мне последнюю строку.
Взгляните на приведенный ниже код для получения информации.
Код:
Sub Long_Example1 () Dim k As Integer k = Cells (Rows.Count, 1) .End (xlUp) .Row MsgBox k End Sub
Если я запустил этот код, я получу номер последней использованной строки рабочего листа, над которым я работаю в данный момент.
Программисту важно знать, какой размер данных у вас будет в будущем. Поскольку в настоящий момент данные могут заканчиваться на 25000-й строке, но если данные увеличиваются за пределы «целочисленного» предела, то есть 32767, это вызывает ошибку переполнения.
Например, увеличу данные до 32768 строк.
Теперь, если я снова запустил тот же код, я не получу значение, а получу ошибку, как показано ниже.
Помните, что я увеличил предел всего на 1 сверх предела значения «Целое число», поэтому я получил ошибку переполнения.
Поэтому важно знать размер ваших данных, прежде чем назначать тип данных переменной. Всегда лучше объявить переменную как «LONG», не задумываясь о размере ваших данных в будущем.
Альтернативные варианты для Excel VBA Long Variable
Вы, должно быть, уже думаете о том, что, если мы хотим удерживать значение больше, чем предел длинной переменной. Для этого нам нужно использовать разные типы данных, то есть VBA «String» или «Variant».
Помните, что в момент пересечения числа 2147483647 мы получим ошибку переполнения в VBA с типом данных LONG. Чтобы хранить больше этого числа, нам нужно использовать тип данных «String» или «Variant».
Для строки
Код:
Sub Long_Example2 () Dim k As String k = 2147483648 MsgBox k End Sub
Для варианта
Код:
Sub Long_Example2 () Dim k As Variant k = 2147483648 MsgBox k End Sub
Когда мы запускаем вышеуказанные коды, он покажет упомянутый номер.