текстовые строки

Преобразование HTML в текст для диапазона ячеек

Этот макрос позволяет преобразовать HTML-код, хранящийся в ячейках Excel,
в обычный текст (без HTML-тегов)

Особенность кода: теги перевода строки «br /» сохраняются.

Пример использования процедуры Convert_HTML_Range_To_Text:
(для этого примера, преобразования выполняются для диапазона ячеек в столбце С, начиная с 4 строки)

Sub Макрос1()
    ' получаем ссылку на диапазон ячеек
    Dim ra As Range: Set ra = Range(Range("c4"), Range("c" & Rows.Count).End(xlUp))
 
    ' преобразуем HTML в текст
    Convert_HTML_Range_To_Text ra
End Sub

Код процедуры Convert_HTML_Range_To_Text:

Получение списка переменных окружения (функция ENVIRON в VBA)

При помощи функции Environ() можно получить значение переменной окружения Windows

 

Этот макрос создаст новую книгу, и выведет в неё список из 31 переменной,
с примерами вызова функции для получения каждого из параметров:

Sub ВывестиПеременныеОкружения()
    On Error Resume Next
    Dim sh As Worksheet, param$
    Application.ScreenUpdating = False: Set sh = Workbooks.Add.Worksheets(1)
    With sh.Range("a1:d1")
        .Value = Array("Номер параметра", "Параметр", "Пример вызова", "Результат (на моём компьютере)")
        For i = 1 To 31
            param$ = Split(Environ(i), "=")(0)
            .Offset(i).Value = Array(i, param$, "env$ = Environ(""" & param$ & """)", Environ(param$))
        Next
    End With
End Sub

 

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

Функция сохранения текста в файл, в заданной кодировке

Функция создаёт на диске текстовый файл в заданной кодировке.

Среди доступных кодировок есть koi8-r, ascii, utf-7, utf-8, utf-8noBOM, utf-16, Windows-1251, unicode, и т.д.
Список доступных кодировок можно найти в реестре Windows, в ветке HKEY_LOCAL_MACHINE\SOFTWARE\Classes\MIME\Database\Charset

Function SaveTextToFile(ByVal txt$, ByVal filename$, Optional ByVal encoding$ = "windows-1251") As Boolean
    ' функция сохраняет текст txt в кодировке Charset$ в файл filename$
    On Error Resume Next: Err.Clear
    Select Case encoding$
 

Дополнительные функции (склонение по падежам, инициалы из ФИО, число и дата прописью)

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

 

В надстройке присутствуют 2 основных типа пользовательских функций:

  • сумма прописью (выводит число словами), дата прописью (аналогично, для даты и времени)
  • функции для обработки фамилий и должностей (склонение в родительном и дательном падеже, обрезка ФИО до инициалов)

 

Преобразование списка номеров и названий столбцов в массив значений

Функция ParseColumnsStringEx предназначена для преобразования введенного пользователем списка столбцов в одномерный массив числовых значений.

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

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

Private Sub ПримерИспользования_ParseColumnsStringEx()
    Dim txt$, txt1$, txt2$
    ' исходная строка с номерами столбцов (c ошибками ввода)
    txt$ = "4-4 , -a- C;8,Я-7,-11-9-F, Е --К; 4,21-,6-F"
 
    ' получаем массив столбцов
    arr = ParseColumnsStringEx(txt)
 
    ' выводим список столбцов:  4,1,2,3,8,7,11,10,9,8,7,6,5,6,7,8,9,10,11,4,21,6,
    For i = LBound(arr) To UBound(arr): Debug.Print arr(i) & ",";: Next i: Debug.Print
 
    ' ======================================
    ' или, например, такая строка
    txt$ = "4-5,8 -k, 6-5;a,e,3,4, 46-BA"
 
    ' получаем массив столбцов (c «промежуточными» значениями)
    arr2 = ParseColumnsStringEx(txt, txt1, txt2)
 
    Debug.Print txt1    ' выводит  4-5;8-K;6-5;A;E;3;4;46-BA
    Debug.Print txt2    ' выводит  4-5,8-11,6-5,1,5,3,4,46-53
    columnsList$ = Join(arr2, ",")
    Debug.Print columnsList$    ' выводит 4,5,8,9,10,11,6,5,1,5,3,4,46,47,48,49,50,51,52,53
End Sub

Замена кодов символов Unicode на сами символы

Функция позволяет произвести замену в текстовой строке кодов символов Unicode на их значения

 

В функции используются регулярные выражения (RegExp)

Пример использования функции ReplaceUnicodeChars:

Sub ЗаменаКодовСимволовВСтроке()
    ' исходная текстовая строка, содержащая коды символов Unicode
    txt$ = "Санаторий\u2013профилакторий \u201dЛесная сказка\u201d приглашает Вас!"
 
    res$ = ReplaceUnicodeChars(txt)    ' заменяем коды на симолы

    Debug.Print res$    ' выводит: Санаторий–профилакторий ”Лесная сказка” приглашает Вас!
End Sub

Поиск заданного текста в ячейках, с подсветкой найденных вхождений

Поиск и подсветка результатов в Excel

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

 

При запуске макроса появляется диалоговое окно (InputBox), позволяющее задать текст для поиска.

Макрос подсвечивает красным цветом внутри ячейки текст, совпадающий с искомым
(+ выделяет найденное полужирным начертанием)

Перед началом поиска, цвет всех ячеек первого столбца сбрасывается (на черный)

Макрос создания текстовых файлов по таблице Excel

Макрос предназначен для создания текстовых файлов в кодировке UTF-8.

Исходными данными является таблица Excel из 12 столбцов.

Сначала, макрос создаёт папку для будущих текстовых файлов.
Папка создаётся в том же каталоге, где расположена книга Excel.

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

И потом, когда папка для файла создана, макрос создаёт текстовый файл с содержимым из 10 столбца таблицы,
и сохраняет его под именем, взятым из второго столбца той же таблицы Excel.
После создания файла, у него меняется кодировка на UTF-8 (изначально, при создании, файлы имеют кодировку Unicode)

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

Пример макроса смотрите в прикреплённом файле.

Функции для работы с текстовыми файлами

Данные функции предназначены для работы с текстовыми файлами из VBA Excel.

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

Чтение текстового файла в переменную:

Function ReadTXTfile(ByVal filename As String) As String
    Set fso = CreateObject("scripting.filesystemobject")
    Set ts = fso.OpenTextFile(filename, 1, True): ReadTXTfile = ts.ReadAll: ts.Close
    Set ts = Nothing: Set fso = Nothing
End Function
Запись в текстовый файл из переменной:
Function SaveTXTfile(ByVal filename As String, ByVal txt As String) As Boolean
    On Error Resume Next: Err.Clear
    Set fso = CreateObject("scripting.filesystemobject")
    Set ts = fso.CreateTextFile(filename, True)
    ts.Write txt: ts.Close
    SaveTXTfile = Err = 0
    Set ts = Nothing: Set fso = Nothing
End Function
Добавление в текстовый файл из переменной:
Function AddIntoTXTfile(ByVal filename As String, ByVal txt As String) As Boolean
    On Error Resume Next: Err.Clear
    Set fso = CreateObject("scripting.filesystemobject")
    Set ts = fso.OpenTextFile(filename, 8, True): ts.Write txt: ts.Close
    Set ts = Nothing: Set fso = Nothing
    AddIntoTXTfile = Err = 0
End Function

Поиск адресов электронной почты (email) на листе Excel

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

В прикреплённом файле, на первом листе ("исходные данные"), ячейки заполнены неструктурированной информацией (смесь фамилий, адресов почты, прочей ненужной информации)

Макрос вычленяет из текста ячеек адреса электронной почты, и выводит все найденные адреса email в таблицу на втором листе ("результат")

Конечно, не помешало бы ещё проверить все найденные адреса почты на корректность (на соответствие стандартам RFC 5322 и RFC 5321),
но в данном макросе это не реализовано (но обычно это и не требуется)

Для поиска адресов email используются регулярные выражения (RegExp)

Также рекомендуем обратить внимание на настройку для программы Парсер сайтов Сбор email на интернет-сайтах. Настройка позволяет проходить по списку сайтов и искать е-мейл на основной странице и странице контактов.