Split и Join в VBA - Разделение текстовых строк (Серия VBA 38)
HTML-код
- Опубликовано: 5 фев 2025
- В этом видеоуроке мы рассмотрим функцию VBA Split и все связанные с ней подтемы: все её параметры и важнейшие возможности настройки, такие как vbBinaryCompare и vbTextCompare, родственную ей функцию Join и особенности параметра Limit. Всё это будем разбирать на наглядных практических примерах.
Хочешь поддержать мой канал? Это можно сделать с помощью функции «Спонсорство»:
/ @bilyalkhassenov
Билял, очень круто объяснил, с приведением хороших примеров!!!
Спасибо за урок. Все доступно и понятно. Сделал задание в том файле где мы изучали getOpenFilename, теперь там в отдельный столбец вставляется название выбранного файла, который был скопирован в основной файл.
.
.
.
For lngCounter1 = LBound(filename) To UBound(filename) 'цикл для каждого элемента массива с выбранными файлами
filename1 = Split(filename(lngCounter), "\") ' создаем новый массив и разделяем имя из первого массива по символу "\"
Dim upbound As Long ' переменная для выбора последнего элемента нового массива
upbound = UBound(filename1)
filename1 = Split(filename1(upbound), ".") ' разделяем последний элемент массива по символу "." так как этот элемент содержит название.расширение
Next lngCounter1
Set rowRange1 = ThisWorkbook.Worksheets(1).Cells(Rows.Count, 3).End(xlUp).Offset(1, 0) ' определение свободной ячейки для вставки имени файла
rowRange1 = rowRange1.Address
ThisWorkbook.Worksheets(1).Range(rowRange1) = filename1(0) 'вписываем имя копируемого файла
Всё чётко и по полочкам, 💯🔥🔥🔥🔥
Спасибо за видео! Я так понял Split - это аналог "Данные по столбцам", но с более крутым функционалом
Спасибо за труд!
Спасибо, Билял!
Отличное видео) Спасибо!
Спасибо
Спасибо, Билял! Очень остро нуждался в знании каким же методом мне вычленить из одной строки нужную информацию! Год начался с актуальных знаний. Ещё 3 вопроса есть: не снимешь ли ты видео, как сортировать большие массы данных и складывать их длины скажем по типу, по признакам ну то есть по нескольким критериям, желательно не менее трех? Считаю очень насущный вопрос. Также думаю многие столкнулись с проблемой англоязычных и русских букв или символов одинаковых по написанию, но VBA их считает разными. Как перевести английские в русские и наоборот с помощью VBA? Я нашел конечно решение на просторах интернета, но Я не понимаю как оно работает. И считаю надо этот пробел устранять. Спасибо
Спасибо большое за труд!!! А будут еще уроки?
В имени файла может быть точка, поэтому я отсек расширение файла с помощью цикла Do while по последней точке:
Do
strNameFile = Left(strNameFile, Len(strNameFile) - 1)
Loop Until Right(strNameFile, 1) = "."
strNameFile = Left(strNameFile, Len(strNameFile) - 1)
Почему у меня в watch window, когда я прогоняю код 1:28 , ничего не работает и value - "out of context"? код один в один прописан как на видео. в чем может быть ошибка?
круто.... а у меня вопрос Вы не планируете в ближайших уроках разбор извлечения данных из сайтов через VBA и разбор обьекта InternetExplorer.Application ну или подобных ему
Здравствуйте, Сергей! Пока в плане другие видео - про умные таблицы и, вероятно, модули классов. Когда-нибудь попозже постараюсь снять про автоматизацию Internet Explorer.
Хороших Вам выходных!
С уважением,
Билял
Парсинг сайтов и автоматизация Internet Explorer очень хорошая идея
@@Stas_Gutsal тем более что в русско говорящих роликах с подробным описанием как разжёвывает Биляль просто нет, англо язычных много но хрен их поймёш чё они там лапочут
@@BilyalKhassenov приветствую. Интересует как организовать поиск в умной таблице по условию
Спасибо, Билял! С удовольствием смотрю Ваши уроки и учусь по ним. Подскажите а существует ли возможность в VBA работать с файлами, записанными в бинарном виде? Может что-то посоветуете почитать по этой теме?
Добрый день! Очень интересно, если честно далек от ексел, но просматривая ваши видео, понимаешь потенциал ресурса! Не могли бы дать ссылки на ваши видео где рассматриваются возможности решения моей задачи? В чем суть: имеется форма в ворде в виде текстовой шапки и таблицы с текстом. Текст в таблице необходимо каждый раз вставлять разный, но он есть ограниченным списком. Как его оформить в екселе, чтобы можно выбрать из выпадающего списка кликом по ячейке?
А про связь по измерительными приборами по компортам будет?😢
Опять же, хорошо, если точка отделяет только расширение от имени. Однако многие пользователи используют их и в именах файлов. Я думал, что задание подразумевает обработку и такой ситуации. Ну раз нет, тогда ладно.
Еще раз спасибо за курс. Пойду учить второй....
А самому подумать? Там же просто:
vArr=Split(vName,".")
ReDim Preserve vArr(UBound(vArr)-1)
vName=Join(vArr,".")
@@xandergor8926 похоже, вы меня не поняли. Я сразу для примера взял файл с точками в имени и у мена процедура это дело обрабатывала, правда, не так, как у вас. По-моему, я делал две или три разных процедуры для решения этого задания. За ответ и еще один способ спасибо.
Скажите,возможно ни реализовать на vba программу,которая в зависимости от результата ввода,сама находит или интерполирует нужное число из таблицы exel?
Билял, небольшая ошибка в вашем решении вашей задачи по вырезанию только имени файла из пути к нему. Попробуйте прогнать через него вот такой путь «C:\Users\Билял.Хасенов\Рабочий.Стол\Тестовый.файл.xlsx». А ведь он может существовать? :)
Это я к тому, что вы в одном из ваших уроков говорили о том, что нужно предусматривать всё. По-моему, это называется «защита от дурака» :)
Замечательные видео. Давно занимаюсь VBA, но, все равно нахожу немало нового.
Спасибо большое.
Мой вариант "защиты от дурака" :
Sub foo()
Dim s As String
Dim Res() As String
s = "C:\Users\Билял.Хасенов\Рабочий.Стол\Тестовый.файл.xlsx"
'Выделяю сначала куски пути
Res = Split(s, "\")
' Последний элемент получившегося массива ("Тестовый.файл.xlsx") дроблю по точкам
Res = Split(Res(UBound(Res)), ".")
' Укорачиваю "новый" массив на последний элемент
ReDim Preserve Res(UBound(Res) - 1)
' И объединяю все это в одну переменную...
s = Join(Res, ".")
MsgBox (s)
End Sub
Как то так.
Наверное есть и другие варианты. Мой - такой.
P.S. ДОсмотрел комментарии до конца, в самом конце уже есть такое же решение.
Я отсек с помощью цикла по одному символу справа, пока не достигается точка, а потом еще раз сама точка отсекается:
Do
strNameFile = Left(strNameFile, Len(strNameFile) - 1)
Loop Until Right(strNameFile, 1) = "."
strNameFile = Left(strNameFile, Len(strNameFile) - 1)
❤❤❤❤❤❤
Здравствуйте, вот моё решение. Сначала я избавилась от "\", а потом из последнего параметра массива убрала "."
Dim strArray() As String
Dim strName As String
strArray = Split("C:\Users\User1\Desktop\Пояснение к шаблонам.pdf", "\")
strArray = Split(strArray(4), ".")
strName = strArray(0)
2021
Спасибо за видео, данный вариант не сработает если в пути есть имя папки с точкой
Немного переделал так:
fullPath = "D:\Folder1\Program v.02.07\autorun.exe"
fnameArr = Split(fullPath, Application.PathSeparator)
fnameArr = Split(fnameArr(UBound(fnameArr)), ".")
Помогите мне, написав макрос, который разделяет множество объединенных имен! вставить /пробел ""/ пример OrsonWellesJosephCottonDorothyComingoreMariaFalconetti EugeneSilvainAndréBerleyCharlesChaplinVirginiaCherrillFlorenceLee