Разное

Len vba: Функция Len (Visual Basic для приложений)

Содержание

Функция Len (Visual Basic для приложений)



  • Чтение занимает 2 мин

В этой статье

Возвращает элемент Long, содержащий число символов в стоке или число байтов, необходимое для хранения переменной.Returns a Long containing the number of characters in a string or the number of bytes required to store a variable.

СинтаксисSyntax

Len(строковый | имя_переменной)Len(string | varname)

Синтаксис функции Len состоит из следующих элементов:The Len function syntax has these parts:

ЧастьPartОписаниеDescription
строкаstringЛюбое допустимое строковое выражение.Any valid string expression. Если строка содержит значение NULL, возвращается NULL.If string contains Null, Null is returned.
varnamevarnameЛюбое допустимое имя переменной.Any valid variable name. Если varname содержит Null, возвращается Null.If varname contains Null, Null is returned. Если varname — Variant, функция Len обрабатывает этот элемент так же, как String, и всегда возвращает число символов, которые он содержит.If varname is a Variant, Len treats it the same as a String and always returns the number of characters it contains.

ПримечанияRemarks

Должен быть указан один (и только один) из двух возможных аргументов. One (and only one) of the two possible arguments must be specified. При использовании с определяемыми пользователем типами функция Len возвращает размер в том виде, в котором он будет записан в файл.With user-defined types, Len returns the size as it will be written to the file.

Примечание

Используйте функцию LenB с байтовыми данными, содержащимися в строке, как в языках с двухбайтовой кодировкой.Use the LenB function with byte data contained in a string, as in double-byte character set (DBCS) languages. Вместо числа символов в строке функция LenB возвращает число байтов, используемых для представления этой строки.Instead of returning the number of characters in a string, LenB returns the number of bytes used to represent that string. При использовании с определяемыми пользователем типами функция LenB возвращает размер внутренней памяти, включая любое заполнение между элементами.With user-defined types, LenB returns the in-memory size, including any padding between elements. Пример кода, использующего LenB, см. во втором примере в разделе примеров.For sample code that uses LenB, see the second example in the example topic.

Примечание

Len может не определить фактическое число байтов хранилища, необходимых при использовании со строками переменной длины в определяемых пользователем типах данных.Len may not be able to determine the actual number of storage bytes required when used with variable-length strings in user-defined data types.

ПримерExample

В первом примере используется Len для возвращения числа символов в строке или числа байтов, необходимых для хранения переменной.The first example uses Len to return the number of characters in a string or the number of bytes required to store a variable. **Тип… **Перед определением CustomerRecord блока End Type необходимо указать ключевое слово Private , если оно отображается в модуле класса.The Type…End Type block defining CustomerRecord must be preceded by the keyword Private if it appears in a class module. В стандартном модуле оператор Type может иметь значение Public.In a standard module, a Type statement can be Public.

Type CustomerRecord    ' Define user-defined type.
    ID As Integer    ' Place this definition in a 
    Name As String * 10    ' standard module.
    Address As String * 30
End Type

Dim Customer As CustomerRecord    ' Declare variables.
Dim MyInt As Integer, MyCur As Currency
Dim MyString, MyLen
MyString = "Hello World"    ' Initialize variable.
MyLen = Len(MyInt)    ' Returns 2.
MyLen = Len(Customer)    ' Returns 42.
MyLen = Len(MyString)    ' Returns 11.
MyLen = Len(MyCur)    ' Returns 8.

Во втором примере используется LenB и определяемая пользователем функция (LenMbcs) для возвращения символов кодировки в строке, если ANSI используется для представления строки.The second example uses LenB and a user-defined function (LenMbcs) to return the number of byte characters in a string if ANSI is used to represent the string.

Function LenMbcs (ByVal str as String)
    LenMbcs = LenB(StrConv(str, vbFromUnicode))
End Function

Dim MyString, MyLen
MyString = "ABc"
' Where "A" and "B" are DBCS and "c" is SBCS.
MyLen = Len(MyString)
' Returns 3 - 3 characters in the string.
MyLen = LenB(MyString)
' Returns 6 - 6 bytes used for Unicode.
MyLen = LenMbcs(MyString)
' Returns 5 - 5 bytes used for ANSI.

См. такжеSee also

Поддержка и обратная связьSupport and feedback

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи?Have questions or feedback about Office VBA or this documentation? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.Please see Office VBA support and feedback for guidance about the ways you can receive support and provide feedback.



Обработка строк — VBA

Строка — это последовательность символов. Строковые величины могут быть переменными или константами. Символы, заключенные в кавычки, являются строками.

В VBA существует несколько функций для обработки строк. Mid(вырезка), Len (длина), InStr(поиск), Left (вырезка слева), Right (вырезка справа), Trim (убирает пробелы слева и справа), StrComp (сравнение строк) и др.

Приведем пример обработки строк.

Задача: В строке подсчитать количество цифр.

Решение:

  Sub пример_str_4()
  Dim Mystring, char
  Dim i, n
  Mystring = InputBox("Введите строку")
  n = 0
  For i = 1 To Len(Mystring)
  char = Mid(Mystring, i, 1)
  If char >= "0" And char <= "9" Then n = n + 1
  Next i
  MsgBox n
  End Sub

Функция Mid

Общий вид функции Mid:

Mid(Строка, Начальная_позиция[, Длина])

Функция Mid возвращает вырезку из строки Строка, начиная со позиции Начальная_позиция, длиною Длина.

Пример:

  Sub пример_mid()
  Dim MyString, Word1, Word2, Word3
  MyString = "Демо функции Mid"
  Word1 = Mid(MyString, 1, 4) ' результат "Демо"
  MsgBox Word1
  Word2 = Mid(MyString, 14, 3) ' результат "Mid"
  MsgBox Word2
  Word3 = Mid(MyString, 6) ' результат "функции Mid"
  MsgBox Word3
  End Sub

Функция Len

Общий вид функции Len:

Len (Строка)

Функция Len возвращает длину строки Строка.

Пример:

  Sub пример_len()
  Dim MyString
  Dim Длина
  MyString = "Демо функции Len"
  Длина = Len(MyString)
  MsgBox Длина
  End Sub

Функция InStr

Общий вид функции InStr:

InStr([нач_позиция, ]Строка1, Строка2[, Опция_1_или_0])

Функция InStr номер первого вхождения в строке Строка1 строки Строка2, начиная с позиции Нач_позиция.

Пример:

  Sub пример_instr()
  Dim Mystring
  Mystring = "Где Вася"
  номер = InStr(Mystring, "Вася") ' результат 5
  MsgBox номер
  End Sub

VBA Длина строки | Как использовать строку длины Excel VBA с примерами

Что такое длина строки VBA?

VBA Len является важным инструментом для проверки данных. Функция VBA LEN Возвращает количество символов в предоставленной строке, т.е. для измерения длины текста или количества символов в тексте. VBA LEN относится к категории String. Его можно использовать как процедуру или функцию в окне редактора VBA. Он часто используется как вспомогательная функция наряду с другими строковыми функциями, такими как MID, RIGHT, т. Е. Для извлечения частей имени из полного имени.

Синтаксис VBA Длина строки в Excel

Синтаксис функции VBA Length of String в Excel выглядит следующим образом:

После ввода LEN нажмите на пробел, появится вышеупомянутый синтаксис, где он содержит нижеупомянутый аргумент.

  • Строка: это выражение или текстовая строка или имя переменной, из которой вы хотите вернуть длину.

т.е. Len («Длина») = вернуть значение 6, потому что длина текста «Длина» равна 6. Если вы берете переменную в качестве Variant вместо long, то она считается такой же, как строка. то есть функции Len обрабатывают переменную варианта как String.

Как использовать длину строки функции в Excel VBA?

Ниже приведены различные примеры использования длины строки в Excel с использованием кода VBA.

Вы можете скачать этот шаблон VBA Длина строки Excel здесь — VBA Длина шаблона Excel строки

Длина строки VBA — Пример № 1

Выполните следующие шаги, чтобы использовать функцию длины строки в Excel VBA.

Шаг 1. Перейдите на вкладку « Разработчики » и нажмите на Visual Basic .

Шаг 2: Откройте модуль из меню «Вставка», как показано ниже.

Шаг 3: Под объектами Microsoft Excel щелкните правой кнопкой мыши лист 1 ( VB_LEN ) Вставьте и в разделе меню выберите Модуль, чтобы создать новый пустой модуль.

Длина строки VBA — Пример № 2

Предположим, у меня есть слово «NULL », и я хочу узнать количество символов в этой текстовой строке, т. Е. Для этого, с помощью макро-кода функции VB LEN, я могу это выяснить.

Шаг 1: В редакторе VBA после ввода Sub у меня есть имя LENGTH ()

 Sub LENGTH () End Sub 

Шаг 2: Поскольку функция VBA LEN категоризирована по строковому типу, DIM (измерение) используется в коде VBA для объявления имени переменной, ее типа. В VBA вы должны всегда изначально объявлять, что вы настраиваете переменную. Это делается (в основном) словом Dim.

DIM используется для объявления переменной и выделения памяти для переменной.

Синтаксис: Dim ( вставить имя переменной ) как ( вставить тип переменной )

Код:

 Sub LENGTH () Dim L As Variant End Sub 

Шаг 3: После объявления переменной присвойте значение этой переменной с помощью функции LEN.

Код:

 Sub LENGTH () Dim L As Variant L = Len (Конец Sub 

Шаг 4: После ввода LEN и нажатия на пробел, и как только вы вводите открытую скобку, ниже приведенный синтаксис появляется для правильной функции.

Строка: это выражение или текстовая строка или имя переменной, из которой вы хотите вернуть длину, т.е. «ДЛИНА»

Код:

 Sub LENGTH () Dim L As Variant L = Len ("LENGTH") MsgBox L End Sub 

Как только вы закончили вводить аргументы функции LEN . Теперь я хочу отобразить этот результат функции len в окне сообщения. затем в следующей строке кода, давайте нажмем Ctrl + Пробел, набираем MsgBox, после этого вы можете упомянуть имя переменной.

Шаг 5: Теперь код готов, вы можете запустить его, нажав клавишу F5. Как только вы это сделаете, появится всплывающее сообщение с результатом «6», которое указывает количество символов в предоставленной строке или тексте (длина)

Длина строки VBA — Пример № 3

Теперь вместо вывода, отображаемого в окне сообщения, я хочу, чтобы результаты или выходные данные отображались на листе. На листе у меня есть данные, т.е. штат США в ячейке «A4», теперь я хочу узнать количество символов в текстовой строке состояния, здесь я могу использовать функцию Len с небольшим изменением в коде.

Шаг 1: После объявления переменной мне нужно снова ввести имя переменной и адрес ячейки полнотекстовой строки с помощью функции Range или cell.

Код:

 Sub TEXT_LENGTH () Dim L As Variant L = Range ("A4") End Sub 

Шаг 2: Теперь мне снова нужно ввести имя переменной, применить функцию LEN и ввести ее аргументы.

Код:

 Sub TEXT_LENGTH () Dim L As Variant L = диапазон ("A4") L = Len ("Массачусетс") End Sub 

В предыдущем примере мы ввели поле msg для отображения результата, теперь я хочу, чтобы результат отображался в определенной ячейке на листе. для этого мне нужно ввести диапазон или функцию ячейки для отображения результата.

Шаг 3: Теперь давайте применим функцию диапазона, сначала мне нужно ввести функцию диапазона или ячейки, а затем ввести имя переменной, чтобы в этой конкретной ячейке («B4») появился результат.

Код:

 Sub TEXT_LENGTH () Dim L As Variant L = Диапазон ("A4") L = Диапазон Len ("Массачусетс") ("B4"). Значение = L End Sub 

Шаг 4: Теперь код готов, я могу запустить его, нажав клавишу F5. как только я это сделаю, вы можете наблюдать выходное значение функции LEN, появляющееся в ячейке «B4», т.е. 13, которое указывает количество символов в предоставленной строке или тексте.

То, что нужно запомнить

  • Помимо функции LEN, LenB используется для вычисления или определения фактического количества требуемых байтов для предоставленной переменной в памяти.
  • Переменная объекта не должна использоваться в функции Len.

Рекомендуемые статьи

Это руководство по длине строки функции VBA. Здесь мы обсудим, как использовать функцию длины строки VBA в Excel вместе с некоторыми практическими примерами и загружаемым шаблоном Excel. Вы также можете просмотреть наши другие предлагаемые статьи —

  1. Полное руководство по VBA Workbook
  2. НЕПРАВИЛЬНАЯ функция в Excel
  3. Функция подсчета VBA
  4. Функция Excel XOR

VBA Функция Len — CodeRoad

У меня есть этот код в VBA:

For x = 4 To 3918
    If InStr(Cells(x, 2), "LW") Then
        numToFind = Cells(x, 1)
        For y = 4 To 3918
            If Cells(y, 1) = numToFind Then
                Cells(y, 1).EntireRow.Interior.ColorIndex = 4
            End If
        Next y
    End If
Next x

Однако я пытаюсь изменить условие С «если ячейка x, 2 содержит строку «LW»» на «if cell x,2 contains 5 characters…» в строке 2. У меня возникли проблемы с правильным использованием функции len(). Может кто-нибудь помочь?

Спасибо!

vba

excel

Поделиться

Источник


ROCKYIII    

28 июня 2016 в 13:05

3 ответа


  • VBA функция с правой функцией

    просто интересно, почему приведенный ниже код возвращает #NAME? вместо фактического значения: Проблема была связана с именем функции Исправлена функция VBA: Function LocateSite_Function(Title As String) As String Dim StartNumber As Long StartNumber = Len(Title) — InStr(1, Title, _). ..

  • VBA функция getdate (?)

    Интересно, есть ли в VBA какая-нибудь функция, которая преобразует строки в дату? Я имею в виду, что работаю с датами в разных форматах, например 20150723, 07023015, 23-07-15 и т. д.-Для меня это одна и та же дата, но редактор VBA этого не знает:) Что это лучший способ, чтобы сделать real дата…



1

If Len(Cells(x, 2).value) = 5 Then

Поделиться


gizlmo    

28 июня 2016 в 13:08



1

if len(cells(x,2).value)=5 тогда вполне можно сделать это ответом 🙂

Поделиться


Nathan_Sav    

28 июня 2016 в 13:11



0

Здесь: if len(trim(cell( x,2).value)) = 5 then....

Поделиться


Jeremy    

28 июня 2016 в 13:10


  • Вычислите Len диапазона ячеек в VBA

    Я ищу код VBA, который поможет мне вычислить количество символов в диапазоне ячеек. Если я использую опцию excel из LEN, она действительно дает мне нет символов в конкретной ячейке. Есть ли у нас какой-нибудь код, который даст мне нет символов в диапазоне ячеек? Например: A1 = Night , B1 = Day C1…

  • VBA функция len не проходящая длина

    Я пытаюсь захватить ячейку, проверить, есть ли в ней десятичные знаки, и удалить их, а затем поместить в ячейку определенный формат в зависимости от того, сколько символов в этом числе, функция len возвращает null, а функция instr работает, но при передаче переменной возвращает null. Спасибо всем,…


Похожие вопросы:

Python, функция len

Мне нужна помощь, пожалуйста, посмотрите на EDIT 2 это код Хаффмана: def printHuffTree(huffTree, prefix = »): if len(huffTree) == 2: print huffTree[1], prefix exampleData = [ (0. 124167 , ‘e’) ] if…

Почему функция LEN() t-sql игнорирует пробелы trailing?

Описание функции LEN() на MSDN : возвращает количество символов указанного строкового выражения, исключая пробелы trailing . Почему функция LEN() была разработана для такой работы? Какую проблему…

Функция Len для нескольких ячеек

нужна функция подсчета символов, такая как функция len, но мне нужно, чтобы она принимала диапазон (то есть A1:D22). Что вы предлагаете мне использовать? Я ищу что-то другое, кроме заполнения…

VBA функция с правой функцией

просто интересно, почему приведенный ниже код возвращает #NAME? вместо фактического значения: Проблема была связана с именем функции Исправлена функция VBA: Function LocateSite_Function(Title As…

VBA функция getdate (?)

Интересно, есть ли в VBA какая-нибудь функция, которая преобразует строки в дату? Я имею в виду, что работаю с датами в разных форматах, например 20150723, 07023015, 23-07-15 и т. д.-Для меня это…

Вычислите Len диапазона ячеек в VBA

Я ищу код VBA, который поможет мне вычислить количество символов в диапазоне ячеек. Если я использую опцию excel из LEN, она действительно дает мне нет символов в конкретной ячейке. Есть ли у нас…

VBA функция len не проходящая длина

Я пытаюсь захватить ячейку, проверить, есть ли в ней десятичные знаки, и удалить их, а затем поместить в ячейку определенный формат в зависимости от того, сколько символов в этом числе, функция len…

Асинхронная Функция VBA

У меня есть функция VBA, которая должна получить некоторую информацию из ячейки пользователя, сделать запрос POST с этой информацией, а затем распечатать ответ в выходной ячейке. Требуется, чтобы…

VBA range.formula выпуск (LEN , RIGHT и слева)

Я пытаюсь сделать код VBA, чтобы выполнить 2 вещи следующим образом: Подсчитайте, сколько символов есть в ячейке A1 , используя формулу LEN(A1) и одну последнюю строку, я пытаюсь получить формулу. ..

Переименование Excel Листов VBA Функция

Ниже приведена функция VBA, которая переименовывает все листы excel в одной книге. Я получал ошибку во время выполнения этой функции. Я думаю, что это связано с превышением символов. У меня есть…

Полезные функции VBA | Макросы Excel

В этой статье опубликованы различные вспомогательные функции на VBA, которые порой помогают в работе.

1. Функция формирования инициалов из имени и отчества

Function CropFIO(ByVal FIO As String) As String
    ' получает в качестве параметра текстовую строку с виде "Фамилия имя отчество"
    ' обрезает имя и отчество, оставляя лишь инициалы - в виде "Фамилия И. О."
    CropFIO = Application.Trim(FIO): arr = Split(CropFIO, " ")
    If UBound(arr) <> 2 Then Exit Function    ' Если в ячейке не 3 слова - выход из процедуры
    CropFIO = Replace(CropFIO, " " & arr(1), " " & UCase(Left(arr(1), 1)) & ".")
    CropFIO = Replace(CropFIO, " " & arr(2), " " & UCase(Left(arr(2), 1)) & ".")
End Function

2. Шифрование строк на VBA

Dim s(0 To 255) As Integer, kep(0 To 255) As Integer
 
Public Function EnDeCrypt(ByVal plaintxt As String, ByVal Password As String) As String
    Dim temp As Integer, a As Integer, b As Integer, cipherby As Byte, cipher As String
    b = 0: For a = 0 To 255: b = b + 1: If b > Len(Password) Then b = 1
        kep(a) = Asc(Mid$(Password, b, 1)): Next a
    For a = 0 To 255: s(a) = a: Next a: b = 0
    For a = 0 To 255: b = (b + s(a) + kep(a)) Mod 256: temp = s(a): s(a) = s(b): s(b) = temp: Next a
    For a = 1 To Len(plaintxt): cipherby = EnDeCryptSingle(Asc(Mid$(plaintxt, a, 1)))
        cipher = cipher & Chr(cipherby): Next: EnDeCrypt = cipher
End Function
Public Function EnDeCryptSingle(plainbyte As Byte) As Byte
    Dim i As Integer, j As Integer, temp As Integer, k As Integer, cipherby As Byte
    i = (i + 1) Mod 256: j = (j + s(i)) Mod 256: temp = s(i): s(i) = s(j): s(j) = temp
    k = s((s(i) + s(j)) Mod 256): cipherby = plainbyte Xor k: EnDeCryptSingle = cipherby
End Function
 
' примеры использования
Sub Шифрование_с_расшифровкой()
    MsgBox EnDeCrypt(EnDeCrypt("123456", "passw"), "passw")
End Sub
 
Sub Тест_шифра()
    MsgBox EnDeCrypt("123456", "пароль")
End Sub

3. Сортировка двумерного массива по нулевому столбцу

Public Function CoolSort(SourceArr As Variant) As Variant
    Dim Check As Boolean, iCount As Integer, jCount As Integer, nCount As Integer
    ReDim tmpArr(UBound(SourceArr, 2)) As Variant
    Do Until Check
        Check = True
        For iCount = LBound(SourceArr, 1) To UBound(SourceArr, 1) - 1
            If Val(SourceArr(iCount, 0)) > Val(SourceArr(iCount + 1, 0)) Then
                For jCount = LBound(SourceArr, 2) To UBound(SourceArr, 2)
                    tmpArr(jCount) = SourceArr(iCount, jCount)
                    SourceArr(iCount, jCount) = SourceArr(iCount + 1, jCount)
                    SourceArr(iCount + 1, jCount) = tmpArr(jCount)
                    Check = False
                Next
            End If
        Next
    Loop
    CoolSort = SourceArr
End Function

4. Преобразование строки в набор ASC кодов

Function String2CharCodes(ByVal txt$) As String
    sep = " & "
    For i = 1 To Len(txt)
        charcode = "Chr(" & Asc(Mid(txt, i, 1)) & ")"
        String2CharCodes = String2CharCodes & sep & charcode
    Next i
    String2CharCodes = Mid(String2CharCodes, Len(sep) + 1)
End Function

5. Функции для определения нажатой клавиши

'============= Функции для определения нажатой клавиши =================================
Public Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As VirtualKeys) As Integer
 
Public Enum VirtualKeys    ' Virtual Keys, Standard Set
    VK_LBUTTON = &h2: VK_RBUTTON = &h3: VK_CANCEL = &h4: VK_MBUTTON = &h5    'VK_MBUTTON = &h5 -  NOT contiguous with L RBUTTON
    VK_BACK = &H8: VK_TAB = &H9: VK_CLEAR = &HC: VK_RETURN = &HD
    VK_SHIFT = &h20: VK_CONTROL = &h21: VK_MENU = &h22: VK_PAUSE = &h23: VK_CAPITAL = &h24: VK_ESCAPE = &h2B
    VK_SPACE = &h30: VK_PRIOR = &h31: VK_NEXT = &h32: VK_END = &h33: VK_HOME = &h34
    VK_LEFT = &h35: VK_UP = &h36: VK_RIGHT = &h37: VK_DOWN = &h38: VK_SELECT = &h39: VK_PRINT = &h3A
    VK_EXECUTE = &h3B: VK_SNAPSHOT = &h3C: VK_INSERT = &h3D: VK_DELETE = &h3E: VK_HELP = &h3F
 
    ' VK_A thru VK_Z are the same as their ASCII equivalents: 'A' thru 'Z'
    ' VK_0 thru VK_9 are the same as their ASCII equivalents: '0' thru '9'

    VK_NUMPAD0 = &H60: VK_NUMPAD1 = &H61: VK_NUMPAD2 = &H62: VK_NUMPAD3 = &H63: VK_NUMPAD4 = &H64
    VK_NUMPAD5 = &H65: VK_NUMPAD6 = &H66: VK_NUMPAD7 = &H67: VK_NUMPAD8 = &H68: VK_NUMPAD9 = &H69
    VK_MULTIPLY = &H6A: VK_ADD = &H6B: VK_SEPARATOR = &H6C: VK_SUBTRACT = &H6D: VK_DECIMAL = &H6E: VK_DIVIDE = &H6F
    VK_F1 = &H70: VK_F2 = &H71: VK_F3 = &H72: VK_F4 = &H73: VK_F5 = &H74: VK_F6 = &H75: VK_F7 = &H76
    VK_F8 = &H77: VK_F9 = &H78: VK_F10 = &H79: VK_F11 = &H7A: VK_F12 = &H7B
    VK_F13 = &H7C: VK_F14 = &H7D: VK_F15 = &H7E: VK_F16 = &H7F: VK_F17 = &H80: VK_F18 = &H81
    VK_F19 = &H82: VK_F20 = &H83: VK_F21 = &H84: VK_F22 = &H85: VK_F23 = &H86: VK_F24 = &H87
    VK_NUMLOCK = &H90: VK_SCROLL = &H91
 
    '   VK_L VK_R - left and right Alt, Ctrl and Shift virtual keys. 
    '   Used only as parameters to GetAsyncKeyState() and GetKeyState().
    '   No other API or message will distinguish left and right keys in this way.
    VK_LSHIFT = &HA0: VK_RSHIFT = &HA1: VK_LCONTROL = &HA2: VK_RCONTROL = &HA3: VK_LMENU = &HA4: VK_RMENU = &HA5
 
    VK_ATTN = &HF6: VK_CRSEL = &HF7: VK_EXSEL = &HF8: VK_EREOF = &HF9: VK_PLAY = &HFA
    VK_ZOOM = &HFB: VK_NONAME = &HFC: VK_PA1 = &HFD: VK_OEM_CLEAR = &HFE
End Enum
'==========================================================================================

Public Function KeyPressed(ByVal VKey As VirtualKeys) As Boolean
    KeyPressed = IIf(GetKeyState(VKey) < 0, True, False)
End Function

6. Макрос для создания копии файла программы
(подразумевается наличие в программе глобальной константы или функции PROJECT_NAME)

Sub CreateBackup()
    On Error Resume Next: ThisWorkbook.Save
    BackupsPath = Replace(ThisWorkbook.FullName, ThisWorkbook.Name, PROJECT_NAME & " Backups\")
    MkDir BackupsPath
    filename = PROJECT_NAME & "_BACKUP_" & Format(Now, "DD-MM-YYYY__HH-NN-SS") & ".xls"
    ThisWorkbook.SaveCopyAs BackupsPath & filename
    'Debug.Print BackupsPath & filename
End Sub

7. Изменяем форматирование цифр в ячейке (выделяем все цифры полужирным шрифтом)

Sub BoldingDigits(ByRef celll As Range)
    For i = 1 To celll.Characters.count
        letter = celll.Characters(start:=i, Length:=1).Text
        celll.Characters(start:=i, Length:=1).Font.Bold = IsNumeric(letter)
    Next
End Sub

8. Поиск артикула (последовательности цифр заданной длины) в текстовой строке
Ссылка на примеры использования Regexp: script-coding.com/WSH/RegExp.html

Function FindDigits(ByVal txt$, ByVal DigitsCount%) As String
    ' ищет в строке txt$ подстроку цифр длиной DigitsCount%
    Set expres = CreateObject("VBScript.RegExp")
    expres.Pattern = Replace(String(DigitsCount%, "%"), "%", "[0-9]")
    If expres. test(txt$) Then FindDigits = expres.Execute(txt$)(0).Value
End Function

Function FindDigits(ByVal txt$, ByVal DigitsCount%) As String
    ' ищет в строке txt$ подстроку цифр длиной DigitsCount%
    Set RegExp = CreateObject("VBScript.RegExp"): RegExp.Global = True
    RegExp.Pattern = "[\D]": txt$ = " " & RegExp.Replace(txt$, " ") & " "
    RegExp.Pattern = " [\d]{" & DigitsCount% & "} "
    If RegExp.test(txt$) Then FindDigits = RegExp.Execute(txt$)(0).Value
End Function

9. Добавление значений сразу во весь столбец двумерного массива

Sub AddValueIntoColumn(ByRef arr, ByVal ColumnIndex%, ByVal NewValue)
    ' добавляет значение NewValue в столбец ColumnIndex% всех строк
    ' переданного по ссылке двумерного массива arr
    For i = LBound(arr) To UBound(arr)
        arr(i, ColumnIndex%) = NewValue
    Next i
End Sub

10. Использование Application.OnTime с задержкой меньше секунды

Sub ЗапускМакросаСНебольшойЗадержкой() ' по мотивам макроса ZVI_Timer
    ЗадержкаВСекундах = 0.3    ' в секундах
    НазваниеМакроса$ = "test"    ' этот макрос будет запущен через 0.3 сек.
    ЗадержкаВЧасах$ = Replace(Format(CDbl(TimeSerial(0, 0, 1)) * ЗадержкаВСекундах, "0.000000000"), ",", ".")
    macro = "ON.TIME(NOW()+" & ЗадержкаВЧасах$ & ", """ & НазваниеМакроса$ & """)" ' формируем команду запуска
    ExecuteExcel4Macro macro ' macro = ON.TIME(NOW()+0.000003472, "test")
End Sub

11. Преобразование коллекции в массив

Function Collection2Array(ByVal coll As Collection) As Variant
    ReDim arr(0 To coll.Count - 1): Dim i As Long
    For i = 1 To coll.Count: arr(i - 1) = coll(i): Next i
    Collection2Array = arr
End Function

12. Разрешаем Excel доступ в Интернет путем отключения брандмауэра:

' включаем файрвол Windows (доступ в интернет ограничен)
CreateObject("HNetCfg.FwMgr").LocalPolicy.CurrentProfile.FirewallEnabled = True
 
' отключаем файрвол Windows (доступ в интернет открыт)
CreateObject("HNetCfg. FwMgr").LocalPolicy.CurrentProfile.FirewallEnabled = False

Функция Len (Visual Basic для приложений)

  • 2 минуты на чтение

В этой статье

Возвращает Long, содержащий количество символов в строке или количество байтов, необходимых для хранения переменной.

Синтаксис

Лен ( строка | имя переменной )

Синтаксис функции Len состоит из следующих частей:

Деталь Описание
строка Любое допустимое строковое выражение.Если строка содержит Null, возвращается Null .
имя переменной Любое допустимое имя переменной. Если varname содержит Null , возвращается Null . Если varname является Вариантом, Len обрабатывает его так же, как String и всегда возвращает количество содержащихся в нем символов.

Примечания

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

Примечание

Используйте функцию LenB с байтовыми данными, содержащимися в строке, как в языках с двухбайтовой кодировкой (DBCS). Вместо того, чтобы возвращать количество символов в строке, LenB возвращает количество байтов, используемых для представления этой строки. С пользовательскими типами LenB возвращает размер в памяти, включая любые отступы между элементами. Образец кода, который использует LenB , см. Во втором примере в разделе «Примеры».

Примечание

Len может быть не в состоянии определить фактическое количество байтов памяти, необходимое при использовании со строками переменной длины в определяемых пользователем типах данных.

Пример

В первом примере используется Len для возврата количества символов в строке или количества байтов, необходимых для хранения переменной. Блоку Type … End Type , определяющему CustomerRecord , должно предшествовать ключевое слово Private , если оно появляется в модуле класса.В стандартном модуле оператор типа может быть Public .

  Тип CustomerRecord 'Определение пользовательского типа.
    ID как целое число 'Поместите это определение в
    Name As String * 10 'стандартный модуль.
    Адрес в виде строки * 30
Тип конца

Dim Customer As CustomerRecord 'Объявите переменные.
Dim MyInt как целое число, MyCur как валюта
Тусклый MyString, MyLen
MyString = "Hello World" 'Инициализировать переменную.
MyLen = Len (MyInt) 'Возвращает 2.
MyLen = Len (Customer) 'Возвращает 42.MyLen = Len (MyString) 'Возвращает 11.
MyLen = Len (MyCur) 'Возвращает 8.

  

Во втором примере используется LenB и определяемая пользователем функция ( LenMbcs ) для возврата количества байтовых символов в строке, если для представления строки используется ANSI.

  Функция LenMbcs (ByVal str as String)
    LenMbcs = LenB (StrConv (str, vbFromUnicode))
Конечная функция

Тусклый MyString, MyLen
MyString = "ABc"
'Где «A» и «B» - это DBCS, а «c» - это SBCS.
MyLen = Len (MyString)
'Возвращает 3–3 символа в строке.MyLen = LenB (MyString)
'Возвращает 6-6 байтов, используемых для Unicode.
MyLen = LenMbcs (MyString)
'Возвращает 5–5 байтов, используемых для ANSI.

  

См.

Также

Поддержка и отзывы

Есть вопросы или отзывы об Office VBA или этой документации? См. Раздел Поддержка и отзывы Office VBA, чтобы узнать, как получить поддержку и оставить отзыв.

Как использовать функцию LEN (WS, VBA)


В этом руководстве Excel объясняется, как использовать функцию LEN в Excel с синтаксисом и примерами.

Описание

Функция ДЛСТР Microsoft Excel возвращает длину указанной строки.

Функция LEN — это встроенная функция в Excel, которая относится к категории String / Text Function . Его можно использовать как функцию рабочего листа (WS) и функцию VBA (VBA) в Excel. Как функцию рабочего листа, функцию ДЛСТР можно ввести как часть формулы в ячейку рабочего листа. В качестве функции VBA вы можете использовать эту функцию в коде макроса, который вводится через редактор Microsoft Visual Basic Editor.

Синтаксис

Синтаксис функции LEN в Microsoft Excel:

 LEN (текст) 

Параметры или аргументы

текст
Строка, для которой требуется вернуть длину.

Возврат

Функция LEN возвращает числовое значение.

Относится к

  • Excel для Office 365, Excel 2019, Excel 2016, Excel 2013, Excel 2011 для Mac, Excel 2010, Excel 2007, Excel 2003, Excel XP, Excel 2000

Тип функции

  • Функция рабочего листа (WS)
  • Функция VBA (VBA)

Пример (как функция рабочего листа)

Давайте рассмотрим несколько примеров функции LEN в Excel и узнаем, как использовать функцию LEN в качестве функции рабочего листа в Microsoft Excel:

На основе приведенной выше таблицы Excel будут возвращены следующие примеры LEN:

 = LEN (A1)
  Результат:  13

= LEN (A2)
  Результат:  16

= LEN ("Excel")
  Результат:  5

= LEN ("123")
  Результат:  3

= LEN (123)
  Результат:  3 

Пример (как функция VBA)

Функцию LEN также можно использовать в коде VBA в Microsoft Excel.

Давайте посмотрим на некоторые примеры функции LEN в Excel и узнаем, как использовать функцию LEN в коде Excel VBA:

 Dim LResult As Long

LResult = Len ("www.techonthenet.com") 

В этом примере переменная с именем LResult теперь будет содержать значение 20.

ontime — Обойти максимальный размер строки в функции vba?

Максимальное количество символов, которое вы можете использовать в строке в функции vba, равно 255.
Я пытаюсь запустить эту функцию

  Var1 = 1
Var2 = 2
..
.
Var256 = 256

RunMacros = "'Tims_pet_Robot" "" "& Var1 &" "", "" "& Var2 &" "", "" "..." "" & Var256 "" "'"
Runat = TimeValue ("15:00:00")
Application.OnTime EarliestTime: = Runat, Процедура: = RunMacros & RunMacros2 ', расписание: = True
  

Он запускает процедуру в определенное время и передает ей набор переменных. но строка слишком длинная.

Обновление:
К сожалению, я уверен, что это не окно часов.
Кроме того, я имею дело не с максимальным размером строки.Это максимальный размер
строка в функции vba.

Например, эта функция работает.

  Подтест ()
Dim RunAt As Date
Dim RunWhat As String

RunAt = Сейчас + 0,00001
Выполнить
"аааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааа
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" ', что составляет 254' а '
Заявление.OnTime EarliestTime: = RunAt, Procedure: = "'" & RunWhat & "12'"

Конец подписки


Суб aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa (м As Integer)
MsgBox ("работает!" & M)
Конец подписки
  

Но если поменять 12 на 123, сломается
Пример

  Подтест2 ()
Dim RunAt As Date
Dim RunWhat As String

RunAt = Сейчас + 0. 00001
Выполнить
"аааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааа
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" ', что составляет 254' а '
Application.OnTime EarliestTime: = RunAt, Procedure: = "'" & RunWhat & "123'"

Конец подписки


Суб aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa (м As Integer)
MsgBox ("работает!" & M)
Конец подписки
  

Этот код не работает, я почти уверен, что это потому, что функция vba не может обрабатывать строку с более чем 255 символами.Даже если вы находитесь в Excel и вызываете функцию и даете ей строку длиной более 255 символов, это не работает.

Попробуйте в ячейке A1 = vlookup («действительно длинная строка», A1: Z10, 1), а затем поместите действительно длинную строку где-нибудь в этом диапазоне. Программа vlookup завершится неудачно (не может не найти, но на самом деле вы не сможете этого сделать)

Также я знаю, что есть максимальная длина суб-имени, я как раз под ним. Извините, что это выглядит так некрасиво.

Обновление 2: так что я только что напечатал переменную на листе и получил функцию, вызываемую ontime, чтобы прочитать их с листа.:(

Len LenB Functions — Visual Basic VBA

Синтаксис

Len (строка | имя_переменной) строка

Использование: требуется

Тип данных: строка

Допустимое строковое выражение.

имя переменной

Использование: требуется

Тип данных: Любой, кроме объекта Допустимое имя переменной. Возвращаемое значение A Длинное целое число Описание

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

Краткий обзор правил

• строка и имя_переменной исключают друг друга; то есть вы должны указать либо строку, либо имя переменной, но не то и другое одновременно.

• Если строка или имя переменной содержат Null, Len возвращает Null.

• Len возвращает размер (количество символов), который пользовательский тип занимает при записи в файл.

• LenB возвращает фактический размер определенного пользователем типа в памяти.

Len, LenB Функции 401

• Когда вы используете LenB с байтовыми данными или строкой Unicode, LenB возвращает количество байтов, представляющих данные или строку.

• Вы не можете использовать Len с объектной переменной.

• Если имя_переменной является массивом, необходимо также указать допустимый индекс. Другими словами, Len не может определить общее количество элементов или общий размер массива.

Советы и подсказки по программированию

• Когда вы используете файл с произвольным доступом для хранения данных и определяемый пользователем тип для обработки этих данных в вашем приложении, вы можете использовать Len для определения значения предложения Len = оператора Open файла.Однако, если вы использовали строки переменной длины в своем определяемом пользователем типе, Len может неточно определить фактические требования к хранению для определяемого пользователем типа. Для этой цели вместо этого следует использовать строки фиксированной длины, которые установлены равными максимальному размеру строкового поля. В следующем примере показано, как использовать функцию Len для указания длины буфера при открытии файла с произвольным доступом:

Явный вариант

Тип udtTest

F Имя как строка * 20 L Имя как строка * 25 Возраст как целое число Тип конца

Public udtRec (от 1 до 10) Как udtTest

Открытая функция RandomFileSave () как логическое значение

Dim sFile As String Dim iFile As Integer Dim i As Integer sFile = «test. dat «iFile = FreeFile

Открыть sFile для случайного выбора как #iFile Len = Len (udtRec (1)) Для i = от 1 до 10

Поместите #iFile, i, udtRec (i) Далее i Закройте #iFile

Конечная функция

• Варианты обрабатываются так же, как строковые переменные, и Len возвращает фактическое количество символов, сохраненных в переменной. Но это может привести к неожиданным результатам. В качестве примера возьмем следующий фрагмент:

Dim vVar vVar = 100

MsgBox Len (vVar)

402 Глава 7. Справочник по языку

Вы можете ожидать, что функция Len вернет 2, потому что iVar, очевидно, является вариантом целого подтипа.Фактически, Len возвращает 3 — количество символов, содержащихся в варианте.

• При использовании со строго типизированной переменной Len возвращает количество байтов, необходимое для хранения этой переменной. Например, длина Long составляет 4.

• Поскольку Visual Basic внутренне использует строки Unicode (в которых каждый символ хранится в двух байтах), при передаче строковых переменных из Len и LenB получаются разные возвращаемые значения. Например, строка из четырех символов возвращает 4 из Len, но возвращает 8 из LenB.

• На всякий случай, если у вас возникли какие-либо сомнения в эффективности явного объявления типов данных везде, где это возможно, вы можете попробовать этот быстрый пример с функцией LenB:

Dim lVar As Long Dim vVar lVar = 10000000 vVar = 10000000

MsgBox «Длинная версия использует» & LenB (lVar) & _ «байты памяти» & vbCrLf & _ «Версия Variant использует» & LenB (vVar)

Вывод очевиден: варианты потребляют значительно больше памяти, чем строго типизированные переменные.

Продолжить чтение здесь: Синтаксис оператора Like

Была ли эта статья полезной?

Excel VBA Len Function — Учебное пособие и пример

VBA Len Function : Функция Len в VBA возвращает количество символов в предоставленной строке или количество байтов, необходимых для хранения предоставленной переменной.

Синтаксис

Параметр

Expression (обязательный) — этот параметр представляет строку
или переменная, длину которой вы хотите оценить.

Возврат

Эта функция возвращает количество символов в предоставленном
строка или количество байтов, необходимых для хранения предоставленной переменной.

Пример 1

Sub StrLenFunction_Example1 ()
‘оценка длины строки.
Dim str как строка, strLen как целое число
str = «Добро пожаловать в мир VBA!»
strLen = Len (str)
‘Переменная вернет 21.
ActiveCell.Value = strLen
Конец подписки

Sub StrLenFunction_Example1 ()

‘оценивает длину строки.

Dim str As String, strLen As Integer

str = «Добро пожаловать в мир VBA!»

strLen = Len (str)

‘Переменная вернет 21.

ActiveCell.Value = strLen

End Sub

Выход

21

Пример 2

Sub StrLenFunction_Example2 ()
‘оценка длины пустой строки «».
Dim strLen как целое число
strLen = Len («»)
‘Переменная вернет 0.ActiveCell.Value = strLen
Конец подписки

Sub StrLenFunction_Example2 ()

‘оценка длины пустой строки «».

Dim strLen As Integer

strLen = Len («»)

‘Переменная вернет 0.

ActiveCell.Value = strLen

End Sub

Выход

0

Excel VBA Mid Left and Right: Полное руководство

Добро пожаловать в эту статью о строковых функциях VBA Left , Right и Mid .В этом посте я покажу вам, когда использовать эти функции и, что не менее важно, когда их следует избегать. Если вы используете их для неправильного типа задач (например, для извлечения из переменных строк), вы можете потратить значительное количество времени .

Я также расскажу о малоизвестной функции функции Mid , в которой вы можете обновить исходную строку с помощью Mid.

Синтаксис функций Left, Right и Mid

Все эти три функции имеют очень похожую цель — извлекать текст из текстовой строки.Вы можете увидеть синтаксис этих функций в этой таблице:

Функция Параметры Описание Пример
Левая строка, длина Возврат символов с левой стороны Левый («Джон Смит», 4)
Правая строка, длина Возврат символов с правой стороны Справа («Джон Смит», 5)
Mid строка, начало, длина Возврат символов из середины Mid («John Smith», 3,2)

Введение

Прежде всего, что такое строка? Строка — это кусок текста.Вы можете увидеть примеры ниже:

 text = "У Мэри был ягненок"
text = "Джон Смит"
text = "Клиент 234-AA = 56"
 

Мы называем тип переменной String в VBA, и это эквивалентно тексту в ячейке в электронной таблице.

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

 Тусклый текст в виде строки
text = "У Мэри был ягненок"
 

Затем мы создаем переменную, и в этой переменной будет храниться результат функции Left, Right или Mid.Начнем с присвоения переменной текстовой строки без каких-либо изменений:

 Sub UseLeft ()

    Тусклый текст как строка, результат как строка
    text = "У Мэри был ягненок"
    
    'установить в результате тот же текст
    результат = текст
    
    'Просмотреть результат в промежуточном окне (Ctrl + G)
    Debug. Print "Original:" и текст
    Debug.Print "Result:" & result

Конец подписки

 

Давайте запустим этот код, щелкнув подпрограмму и нажав F5 (это то же самое, что выбрать Run-> Run Sub / UserForm из меню.)

Вы можете видеть, что обе строки были показаны в окне Immediate:

(Примечание: если окно Immediate не отображается, выберите в меню View-> Immediate Window или Ctrl + G)

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

Левая функция

Функция Left , возможно, является самой простой функцией в VBA.Он возвращает заданное количество символов слева от строки. Все, что вам нужно сделать, это указать количество символов, которое вы хотите получить.
Синтаксис
Слева (строка, длина)

Пример
Левый («abcdef», 3)

Результат
«abc»

Главное помнить, что исходная строка не изменяется. Мы получаем результат функции Left и сохраняем его в другой строке. Исходная строка остается прежней.

В следующем примере мы собираемся вернуть первые четыре символа строки: Мэри :

 Sub UseLeft ()

    Тусклый текст как строка, результат как строка
    text = "У Мэри был ягненок"
    
    'сохранить результат функции Left в переменной результата
    результат = Left (текст, 4)
    
    'Распечатать результат в промежуточном окне (Ctrl + G)
    Debug.Print "Original:" и текст
    Отлаживать.Распечатать «Результат:» & результат

Конец подписки

 

Если мы изменим 4 на 8, вы увидите, что функция теперь возвращает первые восемь символов строки:

 Sub UseLeft ()

    Тусклый текст как строка, результат как строка
    text = "У Мэри был ягненок"
    
    'сохранить результат функции Left в переменной результата
    результат = Left (текст, 8)
    
    'Просмотреть результат в промежуточном окне (Ctrl + G)
    Отлаживать.Распечатать "Оригинал:" и текст
    Debug.Print "Result:" & result

Конец подписки
 

Если мы используем значение, превышающее длину строки, возвращается вся строка. Например, в следующем примере мы используем 100 с функцией Left, и вы можете видеть, что была возвращена вся строка:

 Sub UseLeft ()

    Тусклый текст как строка, результат как строка
    text = "У Мэри был ягненок"
    
    'сохранить результат функции Left в переменной результата
    результат = Left (текст, 100)
    
    'Просмотреть результат в промежуточном окне (Ctrl + G)
    Отлаживать.Распечатать "Оригинал:" и текст
    Debug.Print "Result:" & result

Конец подписки
 

Это функция Left , и вы можете видеть, что ее довольно просто использовать.

Правая функция

Функция Right также очень проста и очень похожа на функцию Left .Разница в том, что он извлекает символы из правой части строки, а не из левой. Справа принимает те же параметры, что и Левая. Требуется строка, из которой нужно извлечь, и количество символов, которые вы хотите извлечь:

Синтаксис
Справа (строка, длина)

Пример
Справа («abcdef», 3)

Результат
«def»

Давайте изменим код, который мы использовали с Left.Мы заменяем функцию Left на функцию Right и устанавливаем длину 4:

 Право дополнительного использования ()

    Тусклый текст как строка, результат как строка
    text = "У Мэри был ягненок"
    
    'сохранить результат функции Right в переменной результата
    результат = Вправо (текст, 4)
    
    'Просмотреть результат в промежуточном окне (Ctrl + G)
    Debug.Print "Original:" и текст
    Debug.Print "Result:" & result

Конец подписки
 

Когда мы запускаем этот код, и вы видите, что он вернул последние четыре символа строки:

Давайте попробуем другой пример, на этот раз мы изменим длину на 11:

 Право дополнительного использования ()

    Тусклый текст как строка, результат как строка
    text = "У Мэри был ягненок"
    
     'сохранить результат функции Right в переменной результата
    результат = Вправо (текст, 11)
    
    'Просмотреть результат в промежуточном окне (Ctrl + G)
    Отлаживать.Распечатать "Оригинал:" и текст
    Debug.Print "Result:" & result

Конец подписки
 

Давайте запустим этот код, теперь вы видите, что он возвращает символы , маленький барашек , которые являются последними 11 символами:

Давай попробуем еще кое-что. На этот раз мы меняем длину на 100, что на число больше, чем длина всей строки:

 Право дополнительного использования ()

    Тусклый текст как строка, результат как строка
    text = "У Мэри был ягненок"
    
     'сохранить результат функции Right в переменной результата
    результат = Вправо (текст, 100)
    
    'Просмотреть результат в промежуточном окне (Ctrl + G)
    Отлаживать.Распечатать "Оригинал:" и текст
    Debug.Print "Result:" & result

Конец подписки
 

Давайте запустим этот код, теперь вы видите, что он возвращает всю строку:

Это означает, что каждый раз, когда мы предоставляем длину, превышающую длину строки, она будет возвращать всю строку.

Вот как мы используем функцию Right .Как видите, она очень похожа на функцию Left и довольно проста в использовании.

Средняя функция

Теперь мы рассмотрим функцию Mid . Функция Mid извлекает текст из середины строки, как следует из названия:

Синтаксис
Mid (строка, начало, длина)

Пример
Mid («abcdef», 2, 3)

Результат
«bcd»

Функция Mid очень похожа на функцию Left.Основное различие между Mid и Left заключается в том, что у Mid есть один дополнительный параметр — Start . Параметр Start используется для указания начальной позиции в строке:

Синтаксис
Mid (строка, начало , длина)

Если мы установим позицию Start на 1, то Mid будет работать точно так же, как Left. Если мы хотим извлечь текст из строки, мы устанавливаем параметр Start в положение, с которого мы хотим начать извлечение символов.

Давайте рассмотрим несколько примеров, чтобы лучше понять это. В первом примере мы используем 1 как начальную позицию и 4 как длину. Результат будет тот же, что и при использовании функции Left с длиной 4:

Давайте попробуем какой-нибудь код с Start как 1 и Length как 4:

 Sub UseMid ()

    Тусклый текст в виде строки
    text = "У Мэри был ягненок"
    
    Тусклый результат В виде строки
    результат = Mid (текст, 1, 4)
    
    Отлаживать.Распечатать "Оригинал:" и текст
    Debug.Print "Result:" & result

Конец подписки
 

Вы можете видеть, что результат такой же, как при использовании Left с длиной 3:

Чтобы извлечь слово «had», мы установили начальную позицию на 6 и длину на 3.

 Sub UseMid ()

    Тусклый текст в виде строки
    text = "У Мэри был ягненок"
    
    Тусклый результат В виде строки
    результат = Mid (текст, 6, 3)
    
    Отлаживать.Распечатать "Оригинал:" и текст
    Debug.Print "Result:" & result

Конец подписки
 

Когда мы запускаем код, вы можете увидеть результат.

Теперь мы собираемся извлечь «немного» из этой строки. Мы устанавливаем начальную позицию на 12 и длину на 6:

 Sub UseMid ()

    Тусклый текст в виде строки
    text = "У Мэри был ягненок"
    
    Тусклый результат В виде строки
    результат = Mid (текст, 12, 6)
    
    Отлаживать.Распечатать "Оригинал:" и текст
    Debug.Print "Result:" & result

Конец подписки
 

Когда мы запустим код, вы увидите результат:

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

В следующем примере мы используем 5 из начальной позиции, и мы собираемся использовать 100 как длину, которая, очевидно, больше, чем длина строки:

 Sub UseMid ()

    Тусклый текст как строка
    text = "У Мэри был ягненок"
    
    Уменьшить результат как строку
    результат = Mid (текст, 12, 100)
    
    Отлаживать.Распечатать "Оригинал:" и текст
    Debug.Print "Result:" & result

Конец подписки
 

Когда вы запустите код, вы увидите, что вы вернули весь текст с начальной позиции:

Одно отличие Mid и двух других функций состоит в том, что нам не нужно указывать длину. Фактически, этот параметр не является обязательным. Если мы не включим параметр длины, он вернет оставшуюся часть строки из указанной нами начальной позиции.Если мы удалим длину из предыдущего примера, чтобы вместо 100 у нас просто не было параметра, вы увидите, что он также возвращает остальную часть строки из начальной позиции:

 Sub UseMid ()

    Тусклый текст как строка
    text = "У Мэри был ягненок"
    
    Уменьшить результат как строку
    результат = Mid (текст, 12)
    
    Debug.Print "Original:" и текст
    Debug.Print "Result:" & result

Конец подписки
 

Обновление исходной строки с помощью Mid

В начале этой статьи я упомянул, что у Mid есть малоизвестная функция, и здесь я собираюсь показать вам, что это за функция.Мы можем обновить строку с помощью Mid. С помощью функций Left \ Right мы просто возвращаем то, что извлекли из строки. Мы не можем обновить исходную строку с помощью этих функций.

Ниже показан пример того, что я имею в виду:

Исходная строка НЕ ​​изменена

Новая строка = слева (исходная строка, длина)
Новая строка = справа (исходная строка, длина)
Новая строка = середина (исходная строка, начало, длина)

Исходная строка изменена
Mid (String, Start, Length) = text

Давайте рассмотрим несколько примеров, чтобы объяснить, как это работает.Давайте сначала рассмотрим простой пример Mid. Следующий код вернет «Мэри»:

 Sub UseMid ()

    Тусклый текст как строка
    text = "У Мэри был ягненок"
    
    Уменьшить результат как строку
    результат = Mid (текст, 1, 4)
    
    Debug.Print "Original:" и текст
    Debug.Print "Result:" & result

Конец подписки
 

Теперь возьмем Mid и поместим его слева от знака равенства.Затем присваиваем его строке «Джек». Когда мы запустим код, «Джек» заменит «Мэри» в исходной строке:

 Sub UpdateUsingMid ()

    Тусклый текст как строка
    text = "У Мэри был ягненок"
    
     Mid (text, 1, 4) = "Джек"
    
    Debug.Print "Original:" и текст

Конец подписки
 

Следует иметь в виду, как работает длина. Если мы используем длину, заменяется только количество символов.Таким образом, если мы используем 4 в следующем примере, то заменяются только 4 символа:

 Mid (text, 1, 4) = "Андрей"
 

Результат: У Андре был барашек

Но если мы не используем какую-либо длину, то используются все буквы в строке справа, как мы видим в этом примере:

 Mid (text, 1) = "Андрей"
 

Результат: Эндрюад барашек

Если вы просто хотите заменить «Мэри» на «Эндрю», то проще всего использовать функцию «Заменить»:

 text = Заменить (текст, «Мария», «Андрей»)
 

Результат: У Андрея барашек

Чтение каждого символа в строке

Одной из полезных функций функции Mid является то, что она позволяет нам читать каждый отдельный символ в строке.Сделать это можно так:

 Sub MidLoop ()

    Тусклый текст как строка
    text = "abcdef"
    
    Dim i As Long, символ как строка
    Для i = 1 To Len (текст)
        символ = Mid (текст, i, 1)
        Debug.Print i & ":" & символ
    Далее я
    
Конец подписки
 

Когда мы запускаем этот код, мы получаем следующий результат:
1: a
2: b
3: c
4: d
5: e
6: f

Чтение каждого символа в обратном порядке

Если мы хотим читать текст в обратном направлении, мы можем сделать это так:

 Sub MidLoopReverse ()

    Тусклый текст как строка
    text = "abcdef"
    
    Dim i As Long, символ как строка
    Для i = Len (текст) To 1 Step -1
        символ = Mid (текст, i, 1)
        Отлаживать.Напечатать i & ":" & символ
    Далее я
    
Конец подписки
 

При запуске кода вы получите следующее:
6: f
5: e
4: d
3: c
2: b
1: a

Когда использовать / не использовать эти функции

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

Фиксированные струны

Фиксированные строки — это когда каждое поле в строке всегда имеет одинаковый размер и находится в одной позиции.

Например, у вас могут быть записи, в которых первые символы — это идентификатор клиента, следующие 4 символа — год, следующие два — тип транзакции и т. Д., Например.

1234AB2019XX
4567AB2019YY
1245AB2018ZY

При работе со струнами, подобными этой, очень полезны Left, Right и Mid. Но для строк переменного размера (т.е. обычно это файл в стиле CSV), они не подходят.

Строки переменного размера (с разделителями)

Строки переменного размера — это строки, в которых поля могут иметь разный размер. Конец поля отмечается разделителем в виде запятой. Эти типы строк очень распространены, и вы увидите их в файлах CSV.

Например, представьте, что у нас есть файл с именем человека и названием его компании:
Джек Смит, United Block Company, 36 High Street
Дженни Кэти Уолтон, Хорошие сантехники, Paradise Plaza
Хелен Макдональд, Поставщики высококачественного программного обеспечения, Мэйн Авеню, 16

Как видите, каждое поле может быть разного размера.Мы используем разделитель (в данном случае запятую), чтобы показать нам, где заканчивается поле.

Многие люди совершают ошибку, используя наши 3 функции с функцией Instr для извлечения данных. Например:

 Подложка ReadVariableStrings ()

    'Создать тестовую строку
    Тусклый текст как строка
    text = "Джек Смит, United Block Company, 36 High Street"
    
    'Объявить переменные
    Dim person As String, компания As String
    Dim startPostion As Long, endPosition As Long
    
    'Получить имя человека
    endPosition = InStr (текст, ",")
    person = Left (текст, endPosition - 1)
    
    'Получить название компании
    startPostion = endPosition + 1
    endPosition = InStr (startPostion, text, ",") - 1
    company = Mid (текст, startPostion, endPosition - startPostion + 1)
    
    'Распечатать результаты
    Отлаживать.Распечатать лицо
    Компания Debug.Print

Конец подписки
 

Как видите, приведенный выше код очень многословен. На самом деле нам намного проще сделать это с помощью функции разделения, о которой я расскажу в этой статье. В нем есть множество примеров использования разделения с переменными строками.

Вот код выше, переписанный для использования функции разделения:

 Подложка ReadVariableStringsSplit ()

    'Создать тестовую строку
    Тусклый текст как строка
    text = "Джек Смит, United Block Company, 36 High Street"
    
    'Объявить массив
    Dim arr как вариант
    
    'Разделить строку на массив
    arr = Разделить (текст; ",")
   
    'Распечатать результаты
    Отлаживать.Печать arr (0) 'Человек
    Debug.Print arr (1) 'Компания

Конец подписки
 

Как видите, этот код намного проще.

Заключение

В этом посте мы рассмотрели использование Left ; Правая и Средняя функций. Они очень полезны для извлечения текста из строки фиксированного размера. Мы видели, что функция Mid имеет дополнительную функцию, которая позволяет нам заменять текст в строке.Мы также увидели, что функцию Mid можно использовать для чтения отдельных символов в строке.

Ссылки по теме

Excel VBA Split Function — Полное руководство
Полное руководство по строковым функциям VBA
Полное руководство по использованию массивов в Excel VBA

Длина строки VBA: как манипулировать и использовать строки разной длины

Visual Basic для приложений или VBA — это язык программирования, управляемый событиями, который расширяет возможности приложений пакета продуктов Microsoft Office.Это также объектно-ориентированный язык программирования со связанной интегрированной средой разработки. Чаще всего используется для создания макросов, автоматизирующих рутинные задачи в офисных приложениях MS. Однако VBA чаще всего используется в MS Excel. Вы можете написать код на VBA, который будет взаимодействовать с вашей таблицей Excel или выводить в нее.

Вы можете узнать больше об использовании макросов VBA с Excel в этом вводном курсе.

Строки — важная часть любого языка программирования. Строка — это в основном любой сохраненный текст.Вы можете выполнять ряд операций со строками, включая конкатенацию, обращение, сортировку, определение длины строки, получение подстрок, поиск определенного символа в строке и многое другое. Сегодня мы познакомим вас с концепцией длины строки VBA. Мы предполагаем, что вы знакомы с основными концепциями Excel VBA и строк. Если вы не знакомы с этими концепциями, мы предлагаем вам изучить наше руководство по основам VBA.

Что такое строка?

Строка — это массив символов.Длина строки — это количество символов в строке. Переменная, в которой хранится строка, объявлена ​​как строковый тип данных. Затем ему присваивается значение. Взгляните на приведенный здесь пример:

 Dim MyName as String
MyName = "Джон Смит" 

Строковый тип имеет встроенные функции, которые помогают выполнять несколько манипуляций со строкой. Чтобы понять пример длины строки, вам необходимо иметь базовые знания программирования. Лучший способ узнать больше о строках и манипуляциях со строками — это пройти базовый курс программирования на языке C.Да, программирование на C. Вы обнаружите, что большинство других курсов просто пролистывают струны или предполагают, что вы о них уже знаете. C является базовым языком программирования, поэтому большинство курсов C будут подробно охватывать все типы данных, включая строки.

Функция VBA для вычисления длины строки

Функция MS Len вычисляет длину строки и возвращает ее как значение. Синтаксис этой функции следующий:

 Лен (текст) 

Функция

Len () работает в версиях, начиная с Excel 2000 и заканчивая Excel 2013.Взгляните на пример ниже:

 Dim LResult As Long
LResult = Len ("http://www.shutterstock.com/") 

Если хотите, можете посмотреть это руководство по строкам в C и посмотреть, как они сравниваются.

Определение того, является ли строка строкой фиксированной длины или строкой с изменяемым размером

В VBA размер строк можно изменять. Строковые функции VBA могут использоваться для установки или извлечения частей строк переменной длины. Однако бывают случаи, когда вам требуются строки фиксированной длины.

 Размер A как строка * 10 

В приведенном выше утверждении A объявлена ​​как строка из 10 символов. Недостатком этого метода является то, что длина строки постоянно фиксируется на 10. Размер строки не может быть изменен во время выполнения. Вы не можете увеличивать или уменьшать длину струны. Во время кодирования необходимо знать длину строки. Иногда вам может потребоваться выяснить, является ли строковая переменная строкой фиксированной длины или строкой с изменяемым размером. Это невозможно сделать с помощью вызова функции, поскольку VBA преобразует строки фиксированной длины в строки с изменяемым размером при передаче строковой переменной в функцию.Поэтому вы должны написать код внутри функции, в которой объявлена ​​строка, чтобы определить, является ли строка фиксированной или изменяемой.

Пример 1: Программа для проверки строк фиксированной длины

 Dim A As String
Dim B как строка * 10
Dim Orig_Len As Long
Dim Orig_Val As String
B = "ABC"
A = "DEF"
Orig_Len = Len (B)
Orig_Val = B
B = B & ""
Если Orig_Len = Len (B), то
Debug.Print «B - строка фиксированной длины»
Еще
Debug.Print «B - большая строка»
B = OrigVal
Конец, если
Orig_Len = Len (A)
OrigVal = AA = A & ""
Если Orig_Len = Len (A), то
Отлаживать.Выведите «A - строка фиксированной длины»
Еще
Debug.Print «A - это большая строка»
A = OrigVal
Конец, если 

В этой программе переменные объявлены как строка типа. Длина переменной String вычисляется с помощью функции Len (длина строки). Затем к переменной добавляется пробел. Длина строки пересчитывается. Сравнивается первое и второе значение длины строки. Если оба одинаковые, строка имеет тип фиксированной длины. Если оба они различны, то это строка с изменяемым размером.Чтобы узнать больше о строках и макросах VBA, вы можете попробовать этот курс в Excel VBA.

Пример 2. Преобразование исходной длины строки в указанную длину

Возьмем другой пример. Вот программа VBA, которая возвращает строковую переменную, содержащую указанный текст справа или слева, дополненную PadChar для создания строки указанной длины.

 Открытое перечисление Size_StringSide
Text_Left = 1
Text_Right = 2
Конец перечисления
Открытая функция SizeString (Text1 As String, Length2 As Long, _
Необязательный ByVal TextSide As Size_StringSide = Text_Left, _
Необязательный PadChar As String = "") As String
Dim sPadChar как строка
Если Len (Text1)> = Length2, то
SizeString = Left (Текст1, Длина2)
Функция выхода
Конец, если
Если Len (PadChar) = 0, то
sPadChar = ""
Еще
sPadChar = Left (PadChar, 1)
Конец, если
Если (TextSide <> Text_Left) и (TextSide <> Text_Right), то
TextSide = Text_Left
Конец, если
Если TextSide = Text_Left, то
SizeString = Text1 & String (Length2 - Len (Text1), sPadChar)
Еще
SizeString = String (Length2 - Len (Text1), sPadChar) & Text1
Конец, если
Конечная функция 

Text1 обозначает исходную строку.Length2 обозначает длину результирующей строки. Textside указывает, должен ли текст появляться слева, и в этом случае результат дополняется справа с помощью PadChar. Если текст должен появиться справа, строка дополняется слева. Если padChar опущен, используется пробел. Если PadChar длиннее одного символа, мы используем крайний левый символ padChar. Если TextSide не является ни Text_Left, ни Text_Right по умолчанию, процедура использует Text_left.

Пример 3: Поиск символа табуляции в строке

 Dim tab_Str as String
Тусклый символ как строка
Dim length_i как целое число
Dim xCntr_i как целое число
tab_Str = "хорошо" & vbTab & "утро"
length_i = Длина (tab_Str)
char = Left (tab_Str, 1)
Для xCntr_i = 0 To length_i - 1
tabString = Right (tab_Str, Len (tab_Str) - 1)
Если char = Chr (9), то
MsgBox «Номер индекса» & xCntr_i & »- это вкладка в строке."
Конец, если
char = Left (tab_Str, 1)
Далее xCntr_i 

В этой программе переменные tab_str, char объявлены как строка типа данных. length_i и xCntr_i объявлены как целые числа. Переменной tab_Str присваивается строка значений, содержащая символ табуляции. Длина строки, содержащейся в tab_Str, вычисляется с помощью функции len (). Затем мы перебираем каждый символ в строке и проверяем наличие символа табуляции. В конце мы отображаем позицию символа табуляции в строке с помощью функции MsgBox ().

В этом курсе вы можете попробовать больше примеров Excel VBA с MrExcel.

Освоение программирования требует от вас усилий по созданию ваших собственных уникальных программ. Хотя чтение существующего кода помогает, лучше всего поэкспериментировать с кодом и попробовать разные вещи самостоятельно. Надеюсь, это руководство помогло вам стать опытным программистом на VBA. Когда вы будете готовы перейти на следующий уровень, можете переходить к нашему продвинутому курсу Excel!

Последнее обновление страницы: февраль 2020 г.

.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *