Wiki

Обновлено:

01.07.2024

 

 

 

 

Раздел:

Версия COM/XLL

id

Свойства/Методы класса, Функции, Команды меню

COM: BignumArithmeticInteger

4.0

1

Help

HTML Справка (без параметров). Открывает html-страницу с описанием свойств и методов класса.

void Help()

COM: BignumArithmeticInteger

4.0

2

Bignum

Принимает и возвращает BSTR строку StringBSTR (задает число или возвращает значение).

BSTR Bignum(LONG Bignum, LONG BignumBase=10) = BSTR 
Bignum-индекс длинного числа в массиве. 
BignumBase-база длинного числа (от 2 до 62), по умолчанию = 10.

COM: BignumArithmeticInteger

4.0

3

Sign

Возвращает знак длинного числа

LONG Sign(LONG Bignum)

Возвращает 1 если Bignum > 0, 0 если Bignum = 0, и -1 если Bignum < 0.

COM: BignumArithmeticInteger

4.0

4

Even

Определяет, является ли Bignum четное или нечетное.

LONG Even(BYTE Bignum)

Возвращает 1 если Bignum четное, 0 если Bignum нечетное.

COM: BignumArithmeticInteger

4.0

5

Compare

Сравнивает два длинных числа.

LONG Compare(LONG Bignum1, LONG Bignum2)

Возвращает 1 если Bignum1 Bignum2, 0 если Bignum1 Bignum2, и -1 если Bignum1 Bignum2.

COM: BignumArithmeticInteger

4.0

6

BignumSet

Задает число с параметрами аналогичными методу Bignum().

BignumSet
(LONG Bignum, BSTR StringBSTR, LONG BignumBase=10)

COM: BignumArithmeticInteger

4.0

7

Sum

Суммирует два длинных числа.

Sum(BYTE BignumSet, BYTE Bignum1, BYTE Bignum2); 
BignumSet = Bignum1 + Bignum2

COM: BignumArithmeticInteger

4.0

8

SumL

Суммирует длинное число с обычным.

SumL(BYTE BignumSet, BYTE Bignum1, LONG_PTR LONG_PTR); 
BignumSet = Bignum1 + LONG_PTR(
х64:LONG_PTR= LONGLONG, х32:LONG_PTR= LONG)

COM: BignumArithmeticInteger

4.0

9

Abs

Возвращает модуль числа

Abs(
BYTE BignumSet, BYTE Bignum1); 
Возвращает модуль значения из Bignum1 в BignumSet.

COM: BignumArithmeticInteger

4.0

10

Negate

Задает значение с противоположным знаком

Negate(
BYTE BignumSet, BYTE Bignum1); 
Возвращает значение с противоположным знаком из Bignum1 в BignumSet. BignumSet = - Bignum1.

COM: BignumArithmeticInteger

4.0

11

Subtract

Вычитает из одного длинного числа другое

Subtract(
BYTE BignumSet, BYTE Bignum1, BYTE Bignum2); 
BignumSet = Bignum1 - Bignum2

COM: BignumArithmeticInteger

4.0

12

SubtractL

Вычитает из длинного числа обычное.

SubtractL(BYTE BignumSet, BYTE Bignum1, LONG_PTR LONG_PTR); 
BignumSet = Bignum1 - LONG_PTR.

COM: BignumArithmeticInteger

4.0

13

Multiply

Умножает одно длинное число на другое. 

Multiply(BYTE BignumSet, BYTE Bignum1, BYTE Bignum2); 
BignumSet = Bignum1 * Bignum2.

COM: BignumArithmeticInteger

4.0

14

MultiplyL

Умножает длинное число на обычное. 

MultiplyL(BYTE BignumSet, BYTE Bignum1, LONG_PTR LONG_PTR); 
BignumSet = Bignum1 * LONG_PTR.

COM: BignumArithmeticInteger

4.0

15

Divide

Делит одно длинное число на другое

Divide(
BYTE BignumQuotient, BYTE BignumRemainder, BYTE Bignum1, BYTE Bignum2); 
При делении получаем частное в BignumQuotient, остаток от деления в BignumRemainder = Bignum1 / Bignum2.

COM: BignumArithmeticInteger

4.0

16

DivideL

Делит длинное число на обычное.

DivideL(
BYTE BignumQuotient, BYTE BignumRemainder, BYTE Bignum1, LONG_PTR LONG_PTR); 
При делении получаем частное в BignumQuotient, остаток от деления в BignumRemainder = Bignum1 / LONG_PTR.

COM: BignumArithmeticInteger

4.0

17

Power

Возводит в степень длинное число.

Power(
BYTE BignumSet, BYTE Bignum1, LONG_PTR LONG_PTR);
Возводит в степень LONG_PTR длинное число Bignum1, результат возвращает в BignumSet. BignumSet = Bignum1 ^ LONG_PTR.

COM: BignumArithmeticInteger

4.0

18

Clone

Копирует одно длинное число в другое.

Clone(BYTE BignumSet, BYTE Bignum1); 
Копирует Bignum1 в BignumSet. 
BignumSet = Bignum1

COM: BignumArithmeticInteger

4.0

19

RootRem

Извлекает корень длинного числа

RootRem(
BYTE BignumRoot, BYTE BignumRemainder, BYTE Bignum1, LONG_PTR n_root);
Извлекает корень n_root-степени из Bignum1. 
Целочисленный результат возвращает в BignumRoot, остаток в BignumRemainder = (n-th root)√ Bignum1.

COM: BignumArithmeticInteger

4.0

20

Factorial

Возвращает факториал для длинного числа

Factorial(
BYTE BignumSet, LONG n);
Возвращает в BignumSet факториал n!

COM: BignumArithmeticInteger

4.0

21

Fibonacci

Возвращает в число Фибоначчи для длинного числа

Fibonacci(
BYTE BignumSet, LONG_PTR n);
Возвращает в BignumSet число Фибоначчи n. 
Fn+1 = Fn + Fn-1

COM: BignumArithmeticInteger

4.0

22

LucNum

Возвращает число Лукаса для длинного числа

LucNum(
BYTE BignumSet, LONG_PTR n); 
Возвращает в BignumSet число Лукаса n. 
Ln+1 =Ln + Ln-1

COM: BignumArithmeticInteger

4.0

23

FileSet
 
Загружает длинное число из файла (*.txt)

FileSet(BYTE Bignum, BSTR StringBSTRFileName, LONG BignumBase=10);
Принимает BSTR* строку StringBSTRFileName в качестве полного пути и имени файла. 
Bignum-индекс длинного числа в массиве. 
BignumBase-база числа (от 2 до 62), по умолчанию = 10.

COM: BignumArithmeticInteger

4.0

24

FileGet

Сохраняет длинное число в файл (*.txt)

FileGet(BYTE Bignum, BSTR StringBSTRFileName, LONG BignumBase=10);
Сохраняет длинное число в файл (*.txt). 
Принимает BSTR* строку StringBSTRFileName в качестве полного пути и имени файла. 
Bignum-индекс длинного числа в массиве. 
BignumBase-база числа (от 2 до 62), по умолчанию = 10.BignumSet

COM: BignumArithmeticInteger

4.0

25

Clear

Освобождает память занятую длинным числом

Clear(
LONG Bignum=-1);
Освобождает память занятую длинным числом Bignum, или освобождает память занятую всеми числами при заданном параметре по умолчанию = -1.

COM: BignumArithmeticInteger

4.0

26

BignumArraySize

Возвращает количество чисел Bignum в созданном классе/массиве

LONG Val = BignumArraySize();
Возвращает количество чисел Bignum в созданном классе/массиве.
Начиная с v2.0.0.0 (теперь массив чисел может быть произвольного размера, а не как ранее 256 чисел, размер увеличиваться автоматически.)

COM: BignumArithmeticFloat

4.0

1

Help

HTML Справка (без параметров). Открывает html-страницу с описанием свойств и методов класса.

void Help()

COM: BignumArithmeticFloat

4.0

2

SizeBits

Задает и возвращает размер длинного числа.

LONG Val = SizeBits(BYTE Bignum, LONG_PTR* pVal) = .LONG Val;
Задает и возвращает размер длинного числа в БИТАХ LONG Val. 
Bignum-индекс длинного числа в массиве (0-255).

COM: BignumArithmeticFloat

4.0

3

Bignum

Принимает и возвращает BSTR строку StringBSTR (задает число или возвращает значение).

BSTR* String = Bignum(BYTE Bignum, LONG BignumBase=10, LONG_PTR Precision=0, BSTR Separator=”.”, VARIANT_BOOL eNotationOFF=0) = BSTR* String; 
Принимает и возвращает BSTR* строку String (задает число или возвращает значение). 
Bignum-индекс длинного числа в массиве. 
BignumBase-база длинного числа (от 2 до 62), по умолчанию = 10. 
Precision – точность (кол-во значимых цифр в числе), по умолчанию = 0 - максимальная (равна заданному размеру в битах). 
Separator – символ разделителя целой и дробной частей числа, по умолчанию точка(“.”). 
eNotationOFF – по умолчанию =0 - экспоненциальная запись (Е-нотация), 1 – дробная по выбранному основанию.
Для Е-нотации с основанием от 2 до 62: в десятичном основании - символ 'e', в других 2 - 9,11 - 62 - символ '@'.
Мантисса выводится в указанном основании, экспонента всегда в десятичном формате.

COM: BignumArithmeticFloat

4.0

4

Sign

Возвращает знак длинного числа

LONG Val = Sign(BYTE Bignum); 
Возвращает знак длинного числа LONG Val.
Возвращает 1 если Bignum > 0, 0 если Bignum = 0, и -1 если Bignum < 0.

COM: BignumArithmeticFloat

4.0

5

Compare

Сравнивает два длинных числа.

LONG Val = Compare(BYTE Bignum1, BYTE Bignum2); 
Возвращает 1 если Bignum1 > Bignum2, 0 если Bignum1 = Bignum2, и -1 если Bignum1 < Bignum2.

COM: BignumArithmeticFloat

4.0

6

SizeBitsSet

Метод. Задает размер длинного числа.

SizeBitsSet(BYTE Bignum, LONG_PTR SizeBits);
Задает размер длинного числа в БИТАХ LONG Val.

COM: BignumArithmeticFloat

4.0

7

BignumSet

Задает длинное число.

BignumSet(BYTE Bignum, BSTR StringBSTR, LONG BignumBase=10, BSTR Separator=”.”); 
Задает число с параметрами, аналогичными методу Bignum(), см. Bignum().

COM: BignumArithmeticFloat

4.0

8

Sum

Суммирует два длинных числа.

Sum(BYTE BignumSet, BYTE Bignum1, BYTE Bignum2);
BignumSet = Bignum1 + Bignum2

COM: BignumArithmeticFloat

4.0

9

SumL

Суммирует длинное число с обычным.

SumL(BYTE BignumSet, BYTE Bignum1, LONG_PTR LONG_PTR); 
BignumSet = Bignum1 + LONG_PTR(
х64:LONG_PTR= LONGLONG, х32:LONG_PTR= LONG)

COM: BignumArithmeticFloat

4.0

10

Abs

Возвращает модуль числа

Abs(
BYTE BignumSet, BYTE Bignum1); 
Возвращает модуль значения из Bignum1 в BignumSet.

COM: BignumArithmeticFloat

4.0

11

Subtract

Вычитает из одного длинного числа другое

Subtract(
BYTE BignumSet, BYTE Bignum1, BYTE Bignum2); 
BignumSet = Bignum1 - Bignum2

COM: BignumArithmeticFloat

4.0

12

SubtractL

Вычитает из длинного числа обычное.

SubtractL(BYTE BignumSet, BYTE Bignum1, LONG_PTR LONG_PTR); 
BignumSet = Bignum1 - LONG_PTR.

COM: BignumArithmeticFloat

4.0

13

Multiply

Умножает одно длинное число на другое. 

Multiply(BYTE BignumSet, BYTE Bignum1, BYTE Bignum2); 
BignumSet = Bignum1 * Bignum2.

COM: BignumArithmeticFloat

4.0

14

MultiplyL

Умножает длинное число на обычное. 

MultiplyL(BYTE BignumSet, BYTE Bignum1, LONG_PTR LONG_PTR); 
BignumSet = Bignum1 * LONG_PTR.

COM: BignumArithmeticFloat

4.0

15

Divide

Делит одно длинное число на другое

Divide(
BYTE BignumQuotient, BYTE BignumRemainder, BYTE Bignum1, BYTE Bignum2); 
При делении получаем частное в BignumQuotient, остаток от деления в BignumRemainder = Bignum1 / Bignum2.

COM: BignumArithmeticFloat

4.0

16

DivideL

Делит длинное число на обычное.

DivideL(
BYTE BignumQuotient, BYTE BignumRemainder, BYTE Bignum1, LONG_PTR LONG_PTR); 
При делении получаем частное в BignumQuotient, остаток от деления в BignumRemainder = Bignum1 / LONG_PTR.

COM: BignumArithmeticFloat

4.0

17

Root

Извлекает квадратный корень длинного числа

Root(BYTE BignumSet, BYTE Bignum1); 
Извлекает квадратный корень из Bignum1.
Результат возвращает в BignumSet. 
BignumSet = √ Bignum1.

COM: BignumArithmeticFloat

4.0

18

Negate

Задает значение с противоположным знаком

Negate(
BYTE BignumSet, BYTE Bignum1); 
Возвращает значение с противоположным знаком из Bignum1 в BignumSet. BignumSet = - Bignum1.

COM: BignumArithmeticFloat

4.0

19

Power

Возводит в степень длинное число.

Power(
BYTE BignumSet, BYTE Bignum1, LONG_PTR LONG_PTR);
Возводит в степень LONG_PTR длинное число Bignum1, результат возвращает в BignumSet. BignumSet = Bignum1 ^ LONG_PTR.

COM: BignumArithmeticFloat

4.0

20

Clone

Копирует одно длинное число в другое.

Clone(BYTE BignumSet, BYTE Bignum1); 
Копирует Bignum1 в BignumSet. 
BignumSet = Bignum1

COM: BignumArithmeticFloat

4.0

21

FileSet

Загружает длинное число из файла (*.txt)

FileSet(BYTE Bignum, BSTR StringBSTRFileName, LONG BignumBase=10); 
Принимает BSTR* строку StringBSTRFileName в качестве полного пути и имени файла. 
Bignum-индекс длинного числа в массиве. 
BignumBase-база числа (от 2 до 62), по умолчанию = 10.

COM: BignumArithmeticFloat

4.0

22

FileGet

Сохраняет длинное число в файл (*.txt)

FileGet(BYTE Bignum, BSTR StringBSTRFileName, LONG BignumBase=10, LONG_PTR Precision=0);
Принимает BSTR* строку StringBSTRFileName в качестве полного пути и имени файла. 
Bignum-индекс длинного числа в массиве. 
BignumBase-база числа (от 2 до 62), по умолчанию = 10. 
Precision – точность (кол-во цифр в числе), по умолчанию = 0 - максимальная (равна заданному размеру в битах).

COM: BignumArithmeticFloat

4.0

23

Clear

Освобождает память занятую длинным числом

Clear(
LONG Bignum=-1);
Освобождает память занятую длинным числом Bignum, или освобождает память занятую всеми числами при заданном параметре по умолчанию = -1.

COM: BignumArithmeticFloat

4.0

24

BignumArraySize

Возвращает количество чисел Bignum в созданном классе/массиве

LONG Val = BignumArraySize();
Возвращает количество чисел Bignum в созданном классе/массиве.
Начиная с v2.0.0.0 (теперь массив чисел может быть произвольного размера, а не как ранее 256 чисел, размер увеличиваться автоматически.)

COM: BignumArithmeticFloat

4.0

25

GetToBignumInt

Преобразовать Bignum из Float в Integer.

BSTR* String = GetToBignumInt(LONG Bignum, LONG BignumBase=10);
ВАЖНО! преобразование происходит с заданной ранее точностью в битах для Float (SizeBitsSet).
Без округлений, отбрасывается дробная часть.
Будьте внимательнее в таких преобразованиях.
Начиная с v2.0.0.0.

COM: VBA

4.0

1

ArraySortS

Быстрая сортировка данных (String) в одномерном/двухмерном массиве

HRESULT ArraySortS([in, out] VARIANT* array_in_out, [in,defaultvalue(0)] VARIANT_BOOL sort_order, [in, defaultvalue(0)] LONG key_1, [in, defaultvalue(0)] LONG key_2, [in, defaultvalue(0)] LONG key_3, [in, defaultvalue(0)]  LONG sort_orientation,  [in, defaultvalue(0)]  VARIANT_BOOL delete_duplicates,[in, defaultvalue(0)]  VARIANT_BOOL out_array_index, [in, out, defaultvalue(0)] VARIANT* index_array_out);

Параметры метода:

1.array_in_out - указатель на массив (ввод/вывод)

2.sort_order - порядок сортировки: 0-по возрастанию, 1-по убыванию

3.key_1 - ключи сортировки (индекс столбца или строки) по умолчанию - первый столбец/строка

4.key_2

5.key_3

6.sort_orientation - ориентация сортировки (0 - по строкам, 1 - по столбцам, 2- целый массив вывод строка-столбец, 3- целый массив вывод столбец-строка)

7.delete_duplicates - удаляем дубликаты (в одномерных массивах)

8.out_array_index - выводим индексы, "булево" 1/0 (тогда основной массив array_in_out - не меняется, выводятся данные в index_array_out)

9.index_array_out - одномерный массив с индексами (с учетом всех ключей), если задан out_array_index=1

 

Все параметры метода, кроме входящего массива - опциональные (с значениями по умолчанию - 0 (ключи-1))

Метод "ArraySort" работает через Variant, т.к. на некоторых скриптовых языках SAFEARRAY ходит через границы COM, только в обертке VARIANT (без изобретения костылей).

 

Пример тестирования и использования в VBA (элементарно через CreateObject("BedvitCOM.VBA")):

 

Visual Basic

Sub Test_arr_sort()

    'Dim bVBA As BedvitCOM.VBA: Set a = New BedvitCOM.VBA 'ранее связывание

    Dim bVBA As Object: Set bVBA = CreateObject("BedvitCOM.VBA") 'позднее связывание

    Dim testSize As Long: testSize = 2000000

    Dim arr_index, arrTmp, i As Long, J As Long, t

 

    ''''''''''''1х массив'''''''''''''''''''''''

    Dim Arr1: ReDim Arr1(-5 To testSize) As String

    Dim Arr2: ReDim Arr2(-5 To testSize, -2 To 3) As String

 

    'arr(5) - NULL - проверка для сортировки пустых

    Arr1(6) = 0

    Arr1(7) = "Test_arr_sort"

    For i = 8 To testSize

        Arr1(i) = Format$(Int(Rnd * testSize), "0000000") '30% дубликатов

    Next

 

    arrTmp = Arr1 '!

    t = Timer

    bVBA.ArraySortS arrTmp

    Debug.Print "Простая сорт. 1х массива, по возрастанию (по умолч.): " & Timer - t & " сек."

 

    arrTmp = Arr1 '!!

    t = Timer

    bVBA.ArraySortS arrTmp, 1, , , , , 1, 0, 0

    Debug.Print "Простая сорт. по убыванию 1x массива с удалением" & ((UBound(arrTmp) - LBound(arrTmp))  /  (testSize - LBound(arrTmp)) - 1)  *  100 & "%: " & Timer - t & " сек."

 

'arrTmp = arr - начальный массив не меняется, поэтому темповый - не нужен '!

    t = Timer

    bVBA.ArraySortS Arr1, 1, , , , , , 1, arr_index

    Debug.Print "Вывод индексов для 1х массива, сортировка по убыванию:" & Timer - t & " сек."

 

    ''''''''''''2х массив'''''''''''''''''''''''

    'arr(5) - NULL - проверка для сортировки пустых

    Arr2(6, 2) = 0

    Arr2(7, 2) = "Test_arr_sort"

    For i = 8 To testSize

       For J = -2 To 3

           Arr2(i, J) = Format$(Int(Rnd * testSize), "0000000") '30% дубликатов

       Next

    Next

 

    arrTmp = Arr2 '!

    t = Timer

    bVBA.ArraySortS arrTmp, 0, , , , 2, 0, 0, 0

    Debug.Print "Сортировка всего 2х массива - вывод строка-столбец: " & Timer - t & " сек."

 

    arrTmp = Arr2 '!

    t = Timer

    bVBA.ArraySortS arrTmp, 0, 5, , , 3, 0, 0, 0

    Debug.Print "Сортировка всего 2х массива - вывод столбец-строка " & Timer - t & " сек."

 

    arrTmp = Arr2 '!

    t = Timer

    bVBA.ArraySortS arrTmp

    Debug.Print "Простая сортировка 2х массива: " & Timer - t & " сек."

 

    arrTmp = Arr2 '!

    t = Timer '!

    bVBA.ArraySortS arrTmp, 0, 3, , , , , 1, arr_index

    Debug.Print "Вывод индексов для 2х массива, по указанному столбцу: " & Timer - t & " сек."

 

    arrTmp = Arr2 '!

    t = Timer

    bVBA.ArraySortS arrTmp, 0, 5, , , 1, 0, 0, 0

    Debug.Print "Сортировка 2х массива по 5му столбцу: " & Timer - t & " сек."

 

    arrTmp = Arr2 '!

    t = Timer '!

    bVBA.ArraySortS arrTmp, 0, 8, , , 1, , 1, arr_index

    Debug.Print "Вывод индексов для 2х массива, по 8й строке: " & Timer - t & " сек."

 

    arrTmp = Arr2 '!

    t = Timer

    bVBA.ArraySortS arrTmp, 0, 8, , , 1, 0, 0, 0

    Debug.Print "Сортировка 2х массива по 8й строке: " & Timer - t & " сек."

 

    arrTmp = Arr2 '!

    t = Timer

    bVBA.ArraySortS arrTmp, 0, 1, 2, 3, 0, , 1, arr_index

    Debug.Print "Вывод индексов для 2х массива, по 1,2,3му столбцу: " & Timer - t & " сек."

 

    arrTmp = Arr2 '!

    t = Timer

    bVBA.ArraySortS arrTmp, 0, 1, 2, 3, 0, 0, 0, 0

    Debug.Print "Сортировка 2х массива по 1,2,3му столбцу: " & Timer - t & " сек."

 

    arrTmp = Arr2 '!

    t = Timer

    bVBA.ArraySortS arrTmp, 0, 8, 9, 10, 1, 0, 1, arr_index

    Debug.Print "Вывод индексов для 8,9,10й строке: " & Timer - t & " сек."

 

    arrTmp = Arr2 '!

    t = Timer

    bVBA.ArraySortS arrTmp, 0, 8, 9, 10, 1, 0, 0, 0

    Debug.Print "Сортировка 2х массива по 8,9,10й строке: " & Timer - t & " сек."

 

    Set bVBA = Nothing

End Sub

 

 

 



Подробнее на форуме.

COM: VBA

4.0

2

FilterUnicodeChar

Получить/удалить любые символы
Unicode из строки. Регистрозависимая.

HRESULT FilterUnicodeChar([in] BSTR StringIn, [in,defaultvalue(L"")] BSTR EnableChar, [in, defaultvalue(L"")] BSTR DisableChar, [out, retval]BSTR* ResultOutRetval);

Параметры метода:

1. StringIn - входящая строка

2. Второй параметр (EnableChar) - символы, включаемые в итоговую строку (через "-" указывается диапазон, сам "-" выводится если его поставить первым символом в шаблоне)

3. Третий параметр (DisableChar) - символы, исключаемые из итоговой строки (через "-" указывается диапазон, сам "-"удаляется если его поставить первым символом в шаблоне).

Последние два параметра - не обязательные. Можно задавать любой из них, можно все два, можно никакой - тогда выводится первоначальная строка

COM: VBA

4.0

3

LikeUnicodeChar

Сравнивает строку с маской/шаблоном (или наоборот исключая символы шаблона). Регистрозависимая
. (v1.0.5.0 и выше)

HRESULT LikeUnicodeChar([in] BSTR stringIn, [in] BSTR maskChar, [in, defaultvalue(0)] VARIANT_BOOL invertMask, [out, retval] VARIANT_BOOL* resultRetval);

Параметры метода:

1.stringIn - входящая строка

2.maskChar - маска/шаблон (через "-" указывается диапазон, сам "-" выводится/удаляется если его поставить первым символом в шаблоне)

3.invertMask - инвертировать маску (сравнение, исключая символы маски)

Возвращает булево.

COM: VBA

4.0

4

Trim

Удаляет из текста все пробелы, за исключением одиночных пробелов между словами.

HRESULT Trim([in] BSTR StringIn, [out, retval] BSTR* StringOutRetval);

Параметры метода:

1.StringIn - входящая строка

COM: VBA

4.0

5

InStr

Ищет первое вхождение подстроки в строку. Регистрозависимая
.

HRESULT InStr([in] BSTR StringIn, [in] BSTR StringFindin, [defaultvalue(1)] LONG Start, [out, retval] LONG* pValRetval);

Параметры метода:

1.StringIn - строка в которой производим поиск

2.StringFind - подстрока для поиска в StringIn

3.Start - позиция с которой начинаем поиск в строке

COM: VBA

4.0

6

Replace

Заменяет одну подстроку на другую. Параметр Start - не усекает строку, в отличии от стандартной Replace() в
VBA. Регистрозависимая.


HRESULT Replace([in] BSTR StringIn, [in] BSTR StringFind, [in] BSTR StringReplace, [in, defaultvalue(1)] LONG Start, [in, defaultvalue(0x7fffffff)] LONG Count, [out, retval] BSTR* StringOutRetval);

Параметры метода:

1.StringIn - строка в которой производим поиск

2.StringFind - подстрока для поиска и замены в StringIn

3.StringReplace - подстрока на которую заменяем StringFind

3.Start - позиция с которой начинаем поиск и замены подстрок в строке

4.Count - количество замен

COM: VBA

4.0

7

ArraySortV

Быстрая сортировка данных (
Variant) в одномерном/двухмерном массиве.

Использованы параллельные алгоритмы сортировки. (библиотеки PPL от Мicrosoft)

HRESULT ArraySortV([in, out] VARIANT* array_in_out, [in, defaultvalue(1)] LONG key_1, [in, defaultvalue(0)] VARIANT_BOOL sort_order1, [in, defaultvalue(0)] LONG key_2, [in, defaultvalue(0)] VARIANT_BOOL sort_order2, [in, defaultvalue(0)] LONG key_3, [in, defaultvalue(0)] VARIANT_BOOL sort_order3, [in, defaultvalue(L"")] BSTR key_and_sort_order_next, [in, defaultvalue(0)] LONG optionCompare);

Параметры метода:

1.array_in_out - указатель на массив (ввод/вывод)

2.key_1 - ключи сортировки (порядковый номер столбца, начиная с 1), по умолчанию - первый столбец.

3.sort_order1 - порядок сортировки для key_1: 0-по возрастанию (по умолчанию для всех), 1-по убыванию

4.key_2 - по умолчанию - не участвует

5.sort_order2 - порядок сортировки для key_2

6.key_3 - по умолчанию - не участвует

7.sort_order3 - порядок сортировки для key_3

Ключи задаются по порядку, т.е. сразу указать 3й - нельзя.

Начиная с версии 1.0.5.3

8.key_and_sort_order_next - дает возможность отсортировать любое количество полей с индивидуальным порядком сортировки для каждого. Задается текстовой строкой, в том же формате, как и первые 3 параметра ("номер столбца, порядок сортировки" - пример: "4, 0, 5, 0, ..."). Тестовый пример см. ниже.

 

Начиная с версии 1.0.5.3 сортировка по любому количеству полей с индивидуальным порядком сортировки для каждого.

 

Visual Basic

Sub Test_arr_sort_10_key()

    'Dim a As BedvitCOM.VBA: Set a = New BedvitCOM.VBA 'ранее связывание

    Dim bVBA As Object: Set bVBA = CreateObject("BedvitCOM.VBA") 'позднее связывание

    Dim i, j, t, testSize As Long: testSize = 1000000

 

    Dim ArrV: ReDim ArrV(0 To testSize, 0 To 9)

 

    For i = 0 To testSize

       For j = 0 To 9

       ArrV(i, j) = CLng(Rnd * 2)

       Next

    Next

 

    t = Timer

    bVBA.ArraySortV ArrV, 1, 0, 2, 0, 3, 0, "4, 0, 5, 0, 6, 0, 7, 0, 8, 0, 9, 0, 10, 0"

    Debug.Print "Cортировка VARIANT 2х массива, по возрастанию по 10 ключам: " & Timer - t & " сек."

     [a1:j1000000] = ArrV

 

End Sub

 

 

 

COM: VBA

4.0

8

Transpose

быстрое транспонирование (на месте) двухмерного массива (поддерживаются все типы данных).

HRESULT Transpose([in, out] VARIANT* array_in_out);

Параметры метода:

1.array_in_out - указатель на массив (ввод/вывод)

COM: VBA

4.0

9

QRcodePrint

Печать QR-кода в Excel, Word, 1С и проч. приложениях с поддержкой COM/ActiveX.

 

HRESULT QRcodePrint([in] BSTR QRcodeText, [in, defaultvalue(L"")] BSTR FileOut, [in, defaultvalue(4)] LONGLONG FormatImageOut, [in, defaultvalue(4)] LONGLONG SizePixel, [in, defaultvalue(0)] LONGLONG PixelColorR, [in, defaultvalue(0)] LONGLONG PixelColorG, [in, defaultvalue(0)] LONGLONG PixelColorB, [in, defaultvalue(0)] LONGLONG VersionSymbol, [in, defaultvalue(1)] LONGLONG LevelErrCorrect, [in, defaultvalue(4)] LONGLONG QuietZone, [out, retval] BSTR* StringOutRetval);

 

Параметры/Аргументы функции QRcodePrint :

1. QRcodeText - что печатаем, строка(обязательное).

2. FileOut - куда печатаем, полное имя файла - не обязательное, по умолчанию используется пользовательский "TEMP" + уникальное имя файла (GUID). Расширение теперь добавляется автоматически, если оно не указано. Если указан файл без папок - файл помещается в ту же папку, где располагается зарегистрированная библиотека.

3. FormatImageOut -  формат изображения (код в функции/формат):0 (bmp), 1 (jpeg), 2 (gif), 3 (tiff), 4 (png)-по умолчанию. (этот и остальные аргументы не обязательны)

4. SizePixel - размер пикселя (модуля), по умолчанию 4 (минимально рекомендуемый)

5. PixelColorR =0 цвет RGB если хотим цветную картинку (по умолчанию черный)

6. PixelColorG = 0

7. PixelColorB =0

8. VersionSymbol - версия QR кода (1-40) (по умолчанию = 0-выбор автоматом)

9. LevelErrCorrect - уровень коррекции ошибок (0-3, по умолчанию = 1  ~15%)

10. QuietZone - Размер в модулях зоны тишины (>=0, по умолчанию = 4).  Quiet zone — это область, отделяющая границу штрих-кода от фона и других изображений. Начиная с v1.0.4.8

11.При удаче, возвращается полное имя файла созданного изображения, при неудаче выводится ошибка и возвращается "Empty"

 

Функционал:

1. Сохранение изображения в форматы: bmp, jpeg, gif, tiff, png.

2. QR-кода сохраняется в монохромное изображение, где формат позволяет, т.е. до 1 бита на пиксель. В любом цвете RGB. К примеру размер .PNG 1140*1140 пикселей (1 бит на пиксель) - 2КБ.

3. Возможность задавать размер модуля (пикселя QR).

4. Возможность задавать цвет в RGB

5. Возможность задавать версию QR кода.

6. Возможность задавать уровень коррекции ошибок.

7. Возможность изменить толщину рамки - quiet zone (начиная с v1.0.4.8)

8. Емкость QR-кода составляет до 7000 цифр или 4000 символов

9. (Отдельно) Конвертации вышеперечисленных форматов из одного в другой

 

Добавил отдельный метод (ConvertFormatImage(), см. ниже в WIKI) для конвертации вышеперечисленных форматов из одного в другой, для случаев конвертации сторонних изображений.

 

Пример использования:
1. Excel
 - открываем или устанавливаем xll как надстройку нужной разрядности (Excel), пишем код:

 

Visual Basic

Option Explicit
 
Sub QR_Generate()
    Dim bVBA As Object: Set bVBA = CreateObject("BedvitCOM.VBA")  'позднее связывание
    Dim fileName As String: fileName = Environ("Temp") & "\QR.png" 'печать QR в файл (в пользовательский Temp)
    Dim convertToFile As String: convertToFile = Environ("Temp") & "\QR.tif"
    Dim QRcodeText As String: QRcodeText = "https://www.cyberforum.ru/blogs/829006/blog6514.html"
 
    Dim resultFileName As String
 
    'печать QR в файл (в пользовательский Temp) и вывести на лист Excel
    'с аргументами по умолчанию
    resultFileName = bVBA.QRcodePrint(QRcodeText, fileName)
    ActiveSheet.Shapes.AddPicture resultFileName, False, True, 0, 0, -1, -1
 
    'с нужными аргументами
    resultFileName = bVBA.QRcodePrint(QRcodeText, fileName, 4, 4, 255, 0, 0, 0, 1, 4) 
    ActiveSheet.Shapes.AddPicture resultFileName, False, True, 200, 0, -1, -1
 
     'Конвертировать формат изображения
    bVBA.ConvertFormatImage fileName, convertToFile, 3  'формат (tiff), см. в описании
End Sub
 
 
 
 
 

Visual Basic

Sub QR_Generate_Fast()
    ActiveSheet.Shapes.AddPicture CreateObject("BedvitCOM.VBA").QRcodePrint("Здесь инфо для печати", Environ("Temp") & "\QR.png"),
    False, True, 0, 0, -1, -1
End Sub
 
 
 

2. 1C - регистрируем COM нужной разрядности (можно под пользователем), далее код (по аналогии с Excel)

COM: VBA

4.0

10

ConvertFormatImage

Конвертации форматов bmp, jpeg, gif, tiff, png из одного в другой.

HRESULT ConvertFormatImage([in] BSTR FileIn, [in] BSTR FileOut, [in] BYTE FormatImageOut);

Параметры/Аргументы метода ConvertFormatImage :

1. FileIn - полное имя файла (обязательное).

2. FileOut - полное имя файла (обязательное).

3. FormatImageOut - нужный формат (обязательное). Код в функции/формат:0 (bmp), 1 (jpeg), 2 (gif), 3 (tiff), 4 (png)

COM: VBA

4.0

11

GetRowsCountCSVansi

Возвращает кол-во строк в файле CSV.


HRESULT GetRowsCountCSVansi([in] BSTR FileIn, [in, defaultvalue(0)] LONG FileFlagNoBuffering, [out, retval] LONG* RowsCountOutRetval);

 

Beta-версия функции, тестирование и описание Подробнее на форуме.

COM: VBA

4.0

12

GetRowCSVansi

возвращает найденную строку в файле CSV по индексу.

HRESULT GetRowCSVansi([in] BSTR FileIn, [in]  LONG IndexString, [in, defaultvalue(0)] LONG FileFlagNoBuffering, [out, retval] BSTR* StringOutRetval);

 

Beta-версия функции, тестирование и описание Подробнее на форуме.

COM: VBA

4.0

13

FindRowsInCSVansi

Возвращает найденную строку/строки в файле CSV по искомой подстроке.

HRESULT FindRowsInCSVansi([in] BSTR FileIn, [in] BSTR FindString, [in, defaultvalue(0)]  LONG MultiLine, [in, defaultvalue(0)] LONG FileFlagNoBuffering, [out, retval] BSTR* StringOutRetval);

 

Beta-версия функции, тестирование и описание Подробнее на форуме.

COM: VBA

4.0

14

SortDeleteDuplicateRowsCSVansi

Сортировка и удаление дубликатов строк в
csv/txt(ANSI) файлах.

HRESULT SortDeleteDuplicateRowsCSVansi([in] BSTR FileIn, [in] BSTR FileOut, [in, defaultvalue(0)]  LONG HeaderRowsCount, [in, defaultvalue(0)] LONG OnlySort, [in, defaultvalue(0)] LONG SortOrder, [in, defaultvalue(0)] LONG FileFlagNoBuffering, [in, defaultvalue(0)] LONG SetLocale, [in, defaultvalue(L"")] BSTR Locale, [out, retval] LONGLONG* RowsCountOutRetval);

 

Beta-версия функции, тестирование и описание Подробнее на форуме.

COM: VBA

4.0

15

SHAstrUTF8

Хеширование строки алгоритмами
SHA

Использованы исходники Crypto++

HRESULT SHAstrUTF8([in] BSTR stringIn, [in] LONG versionSHA, [in, defaultvalue(0)] VARIANT_BOOL charLower, [out, retval] BSTR* stringOutRetval);

Параметры функции:

1.stringIn- входящая строка

2.versionSHA- версия алгоритма SHA

3.charLower - вывод результата в нижнем регистре (опционально, по умолчанию FALSE)

 

 Поддержка следующих алгоритмов (+ новейшие SHA3):

versionSHA = 1,        SHA1

versionSHA = 2224, SHA2_224

versionSHA = 2256, SHA2_256

versionSHA = 2384, SHA2_384

versionSHA = 2512, SHA2_512

versionSHA = 3224, SHA3_224

versionSHA = 3256, SHA3_256

versionSHA = 3384, SHA3_384

versionSHA = 3512, SHA3_512

 

Пример использования:

Visual Basic

Sub SHA_1()

    Dim bCOM As New BedvitCOM.VBA

    Debug.Print bCOM.HashStringSHA("String", 1)   'VersionSHA = 1, SHA1

End Sub

 

COM: VBA

4.0

16

MDstrUTF8

Хеширование строки алгоритмами
MD

Использованы исходники Crypto++

HRESULT MDstrUTF8([in] BSTR stringIn, [in] LONG versionMD, [in, defaultvalue(0)] VARIANT_BOOL charLower, [out, retval] BSTR* stringOutRetval);

Параметры функции:

1.StringIn - входящая строка

2.versionMD- версия алгоритма MD

3.charLower - вывод результата в нижнем регистре (опционально, по умолчанию FALSE)

 

Поддержка следующих алгоритмов:

versionMD = 5,        MD5

 

COM: VBA

4.0

17

AESstrUTF8

Шифрование данных алгоритмами AES

Использованы исходники Crypto++

HRESULT AESstrUTF8([in] BSTR stringIn, [in] BSTR key, [in, defaultvalue(0)] VARIANT_BOOL decrypt, [in, defaultvalue(L"0")] VARIANT mode, [in, defaultvalue(L"")] BSTR initializationVectorIV, [in, defaultvalue(0) ]VARIANT_BOOL strFormatHex, [in, defaultvalue(0)]VARIANT_BOOL secureZeroMemoryKey, [out, retval] BSTR* stringOutRetval);

Параметры функции:

1.StringIn - входящая строка

2.key- ключ должен быть длинной 128, 256 bit (16, 32 Byte).

3.decrypt - decrypt/encrypt (true/false)

4.mode - Supporter mode : ECB, CBC, OFB, CFB, CBC-CTS, CTR (индексы см.ниже)

5.initializationVectorIV - an initialization vector (IV)

6.str_format_hex - вывод результата в формате Hex/Base64 (true/false)

7.secureZeroMemoryKey – безопасное зануление памяти для входящего ключа

 

Шифрование 128 или 256 bit зависит от длины ключа, который введет пользователь 16 или 32 символа (EN - 1 байт и RU - 2 байта на символ в utf-8 соответственно)
AESstrUTF8() - изменились индексы алгоритмов шифрования, теперь у всех функций по шифрованию 
одинаковые индексы для алгоритмов AES

 

Алгоритмы шифрования AES:

    1 - "Без шифрования"

    2 - "AES256:ECB"

    3 - "AES256:CBC"

    4 - "AES256:OFB"

    5 - "AES256:CFB"

    6 - "AES256:CBC-CTS"

    7 - "AES256:CTR"

 

Примечание: эта функция низкоуровневая, где разработчику нужно самому подбирать длину ключа –только 128 или 256 бит.

Более высокоуровневая функция VariantAES256Encrypt() и VariantAES256Decrypt(), где пароль может быть любой длинны, который преобразуется в 256-битный ключ в самой функции.

 

COM: VBA

4.0

18

Array2Dto1D

Быстрое преобразования двухмерного массива в одномерный (данные не обрезаются, 2е измерение преобразуются в очередь
- складывается "столбцами")
HRESULT Array2Dto1D([in, out] VARIANT* array_in_out, [in, defaultvalue(0)] LONG lLbound);

Параметры метода:

1.array_in_out - массив, который нужно преобразовать

2.lLbound1 - нижняя граница нового массива (по умолчанию=0)

 

Пример использования в VBA (Excel):

 

Visual Basic

Sub TestArrayDtoD()

    Dim r As New BedvitCOM.VBA 'раннее связывание

    Dim t, arr, i

    arr = [a1:a1000000]

    t = Timer

    For i = 1 To 1000000

        r.Array2Dto1D arr 'в одномерный (нижняя граница = 0 - по умолчанию)

        r.Array1Dto2D arr, 1, 1 'в двухмерный с 1м столбцом, нижние границы измерений = 1

    Next

    Debug.Print "Time: " & Timer - t & " sec."

End Sub

 

 

начиная с v2.0.0.2

 

Visual Basic

Sub TestArrayDtoD_()

    'Dim bVBA As New BedvitCOM.VBA 'раннее связывание

    Dim bVBA As Object: Set bVBA = CreateObject("BedvitCOM.VBA") 'позднее связывание

    Dim arr

    arr = [a1:b10] ' забираем массив 2 столбца, 10 строк

    bVBA.Array2Dto1D arr 'в одномерный (нижняя граница = 0 - по умолчанию)

    bVBA.Array1Dto2D arr, 1, 1, 10 'преобразуем в двухмерный с 10ю столбцами и 2 строками, нижние границы измерений = 1, порядок данных сохраняется исходный

    Cells(1, 1).Resize(UBound(arr, 1), UBound(arr, 2)) = arr 'нового размера массив со старым порядком данных

End Sub

 

 

 

 

Подробнее на форуме.

 

COM: VBA

4.0

19

Array1Dto2D

Быстрое преобразование одномерного массива в двухмерный (данные не удаляются) (v1.0.5.0 и выше)

Начиная с v2.0.0.2 можно задавать размер первой размерности, вторая рассчитывается автоматически, в зависимости от общего количества элементов. Размер для размерности должен задаваться так, чтобы общее количество элементов массива было кратно задаваемому размеру. Порядок данных сохраняется первоначальный.

HRESULT Array1Dto2D([in, out] VARIANT* array_in_out, [in, defaultvalue(0)] LONG lLboundCol, [defaultvalue(0)] LONG lLboundRow, [defaultvalue(1)] LONG cElementsCol);

1.array_in_out - массив, который нужно преобразовать

2.lLboundCol - нижняя граница нового массива, 1е измерение - столбцы (по умолчанию=0)

3.lLboundRow - нижняя граница нового массива, 2е измерение - строки (по умолчанию=0)

4.cElementsCol - размер для первой размерности, кол-во столбцов (по умолчанию=1) (начиная с v2.0.0.2)

 

Пример использования в VBA (Excel):

 

Visual Basic

Sub TestArrayDtoD()

    Dim r As New BedvitCOM.VBA 'раннее связывание

    Dim t, arr, i

    arr = [a1:a1000000]

    t = Timer

    For i = 1 To 1000000

        r.Array2Dto1D arr 'в одномерный (нижняя граница = 0 - по умолчанию)

        r.Array1Dto2D arr, 1, 1 'в двухмерный с 1м столбцом, нижние границы измерений = 1

    Next

    Debug.Print "Time: " & Timer - t & " sec."

End Sub

 

 

начиная с v2.0.0.2

 

Visual Basic

Sub TestArrayDtoD_()

    'Dim bVBA As New BedvitCOM.VBA 'раннее связывание

    Dim bVBA As Object: Set bVBA = CreateObject("BedvitCOM.VBA") 'позднее связывание

    Dim arr

    arr = [a1:b10] ' забираем массив 2 столбца, 10 строк

    bVBA.Array2Dto1D arr 'в одномерный (нижняя граница = 0 - по умолчанию)

    bVBA.Array1Dto2D arr, 1, 1, 10 'преобразуем в двухмерный с 10ю столбцами и 2 строками, нижние границы измерений = 1, порядок данных сохраняется исходный

    Cells(1, 1).Resize(UBound(arr, 1), UBound(arr, 2)) = arr 'нового размера массив со старым порядком данных

End Sub

 

 

 

 

 

Подробнее на форуме.

 

COM: VBA

4.0

20

ArrayFilterV

Фильтр одномерного и двухмерного СОМ-массива (
VARIANT).

Инструмент для фильтрации одномерного и двухмерного СОМ-массива (тип данных VARIANT) для любого количества столбцов, с любым количеством условий.

Реализован параллельный алгоритм фильтрации (поддержка любого количества логических процессоров).

HRESULT ArrayFilterV([in] VARIANT* array_in, [in] VARIANT* array_parameters, [in] VARIANT_BOOL array_index_on, [in, out] VARIANT* array_out);

1. array_in - массив входящий (одномерный, двухмерный), тип данных VARIANT.

2. array_parameters - массив задаваемых параметров, тип данных VARIANT (6 параметров для одного условия, можно для одного и того же столбца, можно для разных). Количество условий не ограничено. Условия можно создать из списка, можно создать двухмерный массив и заполнить, можно забрать сразу с листа Excel.

3. array_out_index - режим вывода: 0- отфильтрованный массив, 1-массив индексов

4. array_out - массив результатов

 

Условия в массиве параметров применяются в порядке следования, если нет скобок или внутри скобок. Скобки задают приоритет выполнения условий (стандартно), потом "И" и "ИЛИ" в порядке очередности.
Параметры массива условий (сделал максимально близко к стандартной записи условий) - 6 параметров для каждой строки условия:
1.Логические
операторы (0-ИЛИ, 1-И). Для первого условия можно не указывать.

2.Скобки открывающие (если нужны, можно несколько)
3.Столбец для фильтрации
4.Операторы сравнения (для сравнения значения заданного столбца со значением фильтра):
1 - меньше (для числа),
2 - равно (для числа и строки),
4 - больше (для числа),
8 - содержит подстроку (для строки),
16 - зарезервированное значение (регулярки),
32 - игнорировать регистр (для строки) ,
64 - зарезервированное значение (basic),
128 - зарезервированное значение (extended),
256 - LIKE (пока только знак подстановки "*")(для строки) (начиная с v3.5, в XLL c v4.6) полноценный Like (бинарный режим)
512-НЕ (для числа и строки)

Реализовано в виде бинарной маски, т.е. можно складывать, к примеру 8+512 - НЕ содержит подстроку, 1+2 - меньше или равно и т.д.
5.Значение фильтра (для фильтрации)
6.Скобки закрывающие (если нужны, можно несколько)

т.е. для каждого условия 6 параметров: И/ИЛИ,(((...,столбец, оператор сравнения, значение, ...)))

Условия можно задавать как простые:
'фильтр по первому столбцу, значение = 9
Array(,,1, 2, 9, "")

так и более сложные, к примеру (см. ниже.)

(((c1 like "маша" or like "вася") and c1<>"маша иванова") or (c2<>"1" or c2=1)) and (c3>=12,5 and c3<=55,8)

Логические операторы

Скобка, открывающая

Столбец для фильтрации

Операторы сравнения

Значение для фильтра

Скобка, закрывающая

0(ИЛИ)*

(((

1

8(Содержит)*

"маша"

 

0(ИЛИ)*

 

1

8(Содержит)*

"вася"

)

1(И)*

 

1

512+2(<>)*

"маша иванова"

)

0(ИЛИ)*

(

2

512+2(<>)*

"1"

 

0(ИЛИ)*

 

2

2(=)*

1

))

1(И)*

(

3

4+2(>=)*

12,5

 

1(И)*

 

3

1+2(<=)*

55,8

)

*(расшифровка передаваемого числового значения)

 

Array(,"(((", 1, Содержит, "маша", , ИЛИ, , 1, Содержит, "вася", ")", И, , 1, НеРавно, "маша иванова", ")", ИЛИ, "(", 2, НеРавно, "'1", , ИЛИ, , 2, Равно, 1, "))", И, "(", 3, БольшеРавно, 12.5, , И, , 3, МеньшеРавно, 55.8, ")")
или в таком виде (как удобнее). В примере для операторов сравнения созданы псевдонимы (в виде слова, по факту это бинарная маска, см. выше)
Array
( _
,"(((", 1, Содержит, "маша", , _
ИЛИ, , 1, Содержит, "вася", ")", _
И, , 1, НеРавно, "маша иванова", ")", _
ИЛИ, "(", 2, НеРавно, "'1", , _
ИЛИ, , 2, Равно, 1, "))", _
И, "(", 3, БольшеРавно, 12.5, , _
И, , 3, МеньшеРавно, 55.8, ")" _
)

 

 

Простые примеры (с замером скорости на 10 млн строк) и сложные (с выводом условий и результата):

 

Visual Basic

Option Explicit

'операторы (aliases) псевдонимы

Const ИЛИ = 0, И = 1, РАВНО = 2, СОДЕРЖИТ = 8, НЕРАВНО = 512 + 2, МЕНЬШЕРАВНО = 1 + 2, БОЛЬШЕРАВНО = 4 + 2, МЕНЬШЕ = 1, БОЛЬШЕ = 4

 

'ОДНОМЕРНЫЙ МАССИВ, ПРОСТЫЕ УСЛОВИЯ, бинарная маска без слова-псевдонима

Sub TestArrayFilterV_1()

    'Dim bVBA As New BedvitCOM.VBA 'раннее связывание

    Dim bVBA As Object: Set bVBA = CreateObject("BedvitCOM.VBA") 'позднее связывание

    Dim arrResult

    'первоначальный массив данных

    Dim arrV: arrV = Array(1, 0, 1, 0, 1, 0)

    'массив условий (фильтр по первому столбцу, значение = 1)

    Dim p: p = Array(, , 1, 2, 1, "")

 

    ' фильтруем ===============================

    bVBA.ArrayFilterV arrV, p, 0, arrResult

    '========================================

    Debug.Print UBound(arrResult) + 1 'начало с 0

End Sub

 

 

 

'ДВУХМЕРНЫЙ МАССИВ, ПРОСТЫЕ УСЛОВИЯ, бинарная маска в виде слова-псевдонима

Sub TestArrayFilterV_2()

    'Dim bVBA As New BedvitCOM.VBA 'раннее связывание

    Dim bVBA As Object: Set bVBA = CreateObject("BedvitCOM.VBA") 'позднее связывание

    Dim arrResult, r, c, t, x

    Dim sizeRow As Long: sizeRow = 10000000

    Dim sizeCol As Long: sizeCol = 1

    Dim arrV: ReDim arrV(1 To sizeRow, 1 To sizeCol) 'первоначальный массив данных, далее заполняем рандомно

    

    'массив условий (фильтр по первому столбцу, значение = 1)

    Dim p: p = Array(, , 1, РАВНО, 1, "")

     

    'заполняем первоначальный массив с данными

    For r = 1 To sizeRow

        For c = 1 To sizeCol

        arrV(r, c) = CLng(Rnd * 2)

        Next

    Next

     

    t = Timer

    ' фильтруем ===============================

    bVBA.ArrayFilterV arrV, p, 0, arrResult

    '========================================

    Debug.Print Timer - t

    Debug.Print UBound(arrResult) + 1 'начало с 0

End Sub

 

 

 

'ДВУХМЕРНЫЙ МАССИВ, СЛОЖНЫЕ УСЛОВИЯ, бинарная маска в виде слова-псевдонима

Sub TestArrayFilterV_3()

    Dim arrParam, arrTest, arrRes, bCOMvba As Object: Set bCOMvba = CreateObject("BedvitCOM.VBA")

 

    Cells.ClearContents

 

    'создаем тестовый массив

    arrTest = Array("маша иванова", "'1", 13, "маша иванова", 1, 13, "маша", "'1", 14, "вася", "'1", 14, "паша", 1, 50, "вася", 2, 52, "маша", 1, 60, "вася", 1, 65)

bCOMvba.Array1Dto2D arrTest, 1, 1, UBound(arrTest) / 3: bCOMvba.Transpose arrTest

Cells(1, 1).Resize(UBound(arrTest, 1), UBound(arrTest, 2)) = arrTest

 

    'запись условий для фильтра:(((c1 like "маша" or like "вася") and c1<>"маша иванова") or (c2<>"1" or c2=1)) and (c3>=12,5 and c3<=55,8)

    arrParam = Array(, "(((", 1, СОДЕРЖИТ, "маша", , ИЛИ, , 1, СОДЕРЖИТ, "вася", ")", И, , 1, НЕРАВНО, "маша иванова", ")", ИЛИ, "(", 2, НЕРАВНО, "'1", , ИЛИ, , 2, РАВНО, 1, "))", И, "(", 3, БОЛЬШЕРАВНО, 12.5, , И, , 3, МЕНЬШЕРАВНО, 55.8, ")")

    'ИЛИ ТАК

    arrParam = Array( _

, "(((", 1, СОДЕРЖИТ, "маша", , _

ИЛИ, , 1, СОДЕРЖИТ, "вася", ")", _

И, , 1, НЕРАВНО, "маша иванова", ")", _

ИЛИ, "(", 2, НЕРАВНО, "'1", , _

ИЛИ, , 2, РАВНО, 1, "))", _

И, "(", 3, БОЛЬШЕРАВНО, 12.5, , _

И, , 3, МЕНЬШЕРАВНО, 55.8, ")" _

)

    bCOMvba.Array1Dto2D arrParam, 1, 1, UBound(arrParam) / 6: bCOMvba.Transpose arrParam

Cells(1, 5).Resize(UBound(arrParam, 1), UBound(arrParam, 2)) = arrParam

 

    'применяем фильтр

    bCOMvba.ArrayFilterV arrTest, arrParam, 0, arrRes

    Cells(1, 12).Resize(UBound(arrRes, 1), UBound(arrRes, 2)) = arrRes

 

End Sub

 

 

 

 

 

Подробнее на форуме.

 

COM: VBA

4.0

21

ArrayCharLowerV

Преобразовать все символы строки в нижний регистр (в массиве).

HRESULT ArrayCharLowerV([in, out] VARIANT* array_in_out);

Параметры функции:

1.array_in_out – массив строк, который нужно преобразовать (на месте)

COM: VBA

4.0

22

ArrayCharUpperV

Преобразовать все символы строки в ВЕРХНИЙ регистр (в массиве).

HRESULT ArrayCharUpperV([in, out] VARIANT* array_in_out);

Параметры функции:

1.array_in_out - массив, который нужно преобразовать (на месте)

COM: VBA

4.0

23

ArrayCharToNumV

Преобразовать все данные в тип:
Double (числа сохраненные как текст)  (в массиве).

HRESULT ArrayCharToNumV([in, out] VARIANT* array_in_out);

Параметры функции:

1.array_in_out - массив, который нужно преобразовать (на месте)

COM: VBA

4.0

24

ArrayNumToCharV

Преобразовать все данные в тип: String (в массиве).

HRESULT ArrayNumToCharV([in, out] VARIANT* array_in_out);

Параметры функции:

1.array_in_out - массив, который нужно преобразовать (на месте)

COM: VBA

4.0

25

Version

Версия библиотеки BedvitCOM.dll

HRESULT Version([out, retval] VARIANT* versionDLLRetval);

COM: VBA

4.0

26

FileName

Полный путь к зарегистрированной библиотеки
BedvitCOM.dll

HRESULT FileName([out, retval] VARIANT* fileNameDLLRetval);

COM: VBA

4.0

27

VariantCopy

Глубокая копия VARIANT.

HRESULT VariantCopy([in] VARIANT* variantIn, [out, retval] VARIANT* variantCopyRetval);

Параметры функции:

1. variantIn – исходный VARIANT, с которого делается копия

COM: VBA

4.0

28

ArrayDtoD

Быстрое преобразование одномерного массива в двухмерный (данные не удаляются и не добавляются).

Можно задавать размер второй размерности, первая рассчитывается автоматически, в зависимости от общего количества элементов. Размер для размерности должен задаваться так, чтобы общее количество элементов массива было кратно задаваемому размеру. Порядок данных сохраняется первоначальный.

HRESULT ArrayDtoD([in, out] VARIANT* arrayInOut, [in, defaultvalue(0)]LONG lLboundRow, [in, defaultvalue(0)]LONG cElementsRow, [in, defaultvalue(0)]LONG lLboundCol, [in, defaultvalue(0)]LONG cElementsCol, [in, defaultvalue(0)]LONG lLbound3, [in, defaultvalue(0)]LONG cElements3, [in, defaultvalue(0)]LONG lLbound4, [in, defaultvalue(0)]LONG cElements4, [in, defaultvalue(0)]LONG lLbound5, [in, defaultvalue(0)]LONG cElements5, [in, defaultvalue(0)]LONG lLbound6, [in, defaultvalue(0)]LONG cElements6, [in, defaultvalue(0)]LONG lLbound7, [in, defaultvalue(0)]LONG cElements7, [in, defaultvalue(0)]LONG lLbound8, [in, defaultvalue(0)]LONG cElements8, [in, defaultvalue(0)]LONG lLbound9, [in, defaultvalue(0)]LONG cElements9, [in, defaultvalue(0)]LONG lLbound10, [in, defaultvalue(0)]LONG cElements10);

Параметры функции:

1. arrayInOut – массив для преобразования «на месте»

2. lLboundRow – нижняя граница для строк

3. cElementsRow – количество строк

4. lLboundCol – нижняя граница для столбцов

5. cElementsCol – количество столбцов

4. lLbound3 – нижняя граница для третьего измерения

5. cElements3 – количество элементов третьего измерения

 

COM: VBA

4.0

30

ArrayReDim

Изменение размерности и количество элементов в размерностях СОМ-массива. Можно обрезать/добавлять элементы, как в начало, так и в конец любой размерности массива.

 

Информация сохраняется, если не обрезается принудительно. Для созданный блоков массива задаются значения Empty.

HRESULT ArrayReDim([in, out] VARIANT* arrayInOut, [in, defaultvalue(0)]LONG lLboundRow, [in, defaultvalue(0)]LONG rowStartChange, [in, defaultvalue(0)]LONG rowEndChange, [in, defaultvalue(0)]LONG lLboundCol, [in, defaultvalue(0)]LONG colStartChange, [in, defaultvalue(0)]LONG colEndChange);

1.arrayInOut - массив (Variant)

2.lLboundRow - новая нижняя граница для строк

3.rowStartChange - изменения для начала измерения строк ("-"обрезаем, "+"добавляем новые строки)

4.rowEndChange - изменения для конца измерения строк ("-"обрезаем, "+"добавляем новые строки)

5.lLboundCol - новая нижняя граница для столбцов

6.colStartChange - изменения для начала измерения столбцов ("-"обрезаем, "+"добавляем новые столбцы)

7.colEndChange - изменения для конца измерения столбцов ("-"обрезаем, "+"добавляем новые столбцы)

COM: VBA

4.0

31

ArraySize

Размер СОМ – массива. Количество элементов в сумме по всем измерениям.

HRESULT ArraySize([in] VARIANT* arrayIn, [out, retval] VARIANT* arraySizeRetval);

Параметры функции:

1. arrayIn – массив, для которого нужно получить количество всех элементов.

COM: VBA

4.0

32

SplitS

Возвращает одномерный массив подстрок из указанной строки, разделенной по указанному разделителю
(входящая строка BSTR)

HRESULT SplitS([in] BSTR stringIn, [in] BSTR delimiter, [in, defaultvalue(0)] LONG setLowerBound, [in, defaultvalue(0)] LONG multiThreading, [out, retval] VARIANT* arrayOutRetval);

Параметры функции:

1. stringIn – строка для деления на подстроки

2. delimiter – разделитель, по которому нужно разделить строку

3. setLowerBound – нижняя граница для создаваемого массива

4. multiThreading  - включение многопоточных вычислений

COM: VBA

4.0

33

SplitV

Возвращает одномерный массив подстрок из указанной строки, разделенной по указанному разделителю
(входящий VARIANT)

HRESULT SplitV([in] VARIANT stringIn, [in] VARIANT delimiter, [in, defaultvalue(0)] LONG setLowerBound, [in, defaultvalue(0)] VARIANT_BOOL multiThreading, [out, retval] VARIANT* arrayOutRetval);

Параметры функции:

1. stringIn VARIANT содержащий строку для деления на подстроки

2. delimiter – разделитель, по которому нужно разделить строку

3. setLowerBound – нижняя граница для создаваемого массива

4. multiThreading  - включение многопоточных вычислений

COM: VBA

4.0

34

ArrayCopyStoV

Копирование СОМ-массива с типом данных
BSTR(строка) в СОМ-массив с типом данных VARIANT.

HRESULT ArrayCopyStoV([in] VARIANT* arrayIn, [in] LONG multiThreading, [in, out, defaultvalue(0)]  VARIANT* arrayOut, [out, retval] VARIANT* arrayOutRetval);

Параметры функции:

1. arrayIn – входящий массив

2. multiThreading - включение многопоточных вычислений

3. arrayOut – получаемый массив

COM: VBA

4.0

35

ArrayConvertStoV

Преобразование «на месте» СОМ-массива с типом данных
BSTR(строка) в СОМ-массив с типом данных VARIANT.

HRESULT ArrayConvertStoV([in, out] VARIANT* arrayInOut, [in, defaultvalue(0)] LONG multiThreading);

Параметры функции:

1. arrayInOut – массив меняемый «на месте»

2. multiThreading - включение многопоточных вычислений