Function Text2Array(ByVal txt$, Optional ByVal ColumnsSeparator$ = " ", _ Optional ByVal RowsSeparator$ = vbNewLine) As Variant ' получает в качестве параметров текстовую строку TXT, ' и разделители строк и столбцов для разбиваемой строки ' Возвращает двумерный массив - результат разбиения строки txt = Trim(txt): On Error Resume Next: Err.Clear If txt Like "*" & RowsSeparator$ Then txt = Left(txt, Len(txt) - Len(RowsSeparator$)) tmpArr1 = Split(txt, RowsSeparator$): RowsCount = UBound(tmpArr1) + 1 ColumnsCount = UBound(Split(tmpArr1(0), ColumnsSeparator$)) + 1 If Err.Number > 0 Then MsgBox "Строка не может быть разбита на двумерный массив", vbCritical: End ReDim Arr(1 To RowsCount, 1 To ColumnsCount) For i = LBound(tmpArr1) To UBound(tmpArr1) tmpArr2 = Split(Trim(tmpArr1(i)), ColumnsSeparator$) For j = 1 To ColumnsCount Arr(i + 1, j) = tmpArr2(j - 1) Next j Next i Text2Array = Arr End Function
Преобразование текстовой строки в двумерный массив |
- 14758 просмотров
Не получается применить макрос? Не удаётся изменить код под свои нужды?
Оформите заказ у нас на сайте, не забыв прикрепить примеры файлов, и описать, что и как должно работать.
Комментарии
Добрый день, ищу решение обратной задачи. Преобразование двумерного массива в одномерный. Может кто-нибудь подсказать или дать ссылочку
Кстати, как вариант, вместо
ColumnsCount = UBound(Split(tmpArr1(0), ColumnsSeparator$)) + 1
прописать
For i = LBound(tmpArr1) To UBound(tmpArr1)
ColumnsCount = IIf(UBound(Split(tmpArr1(i), ColumnsSeparator)) + 1 > ColumnsCount, UBound(Split(tmpArr1(i), ColumnsSeparator)) + 1, ColumnsCount)
Next i
тогда в случае следующей строки
123 123
321 321 321
кол-во столбцов будет = 3, а не 2, как в предыдущем случае, что вроде как правильней
А зачем строка
If txt Like "*" & RowsSeparator$ Then txt = Left(txt, Len(txt) - Len(RowsSeparator$))
Вам помогут следующие функции и макросы:
Первый макрос покажет вам пример разбиения текстовой строки,
второй - обработает всю вашу таблицу, разбив текст на ячейки,
а функция SplitText - основа для этих макросов.
Из приведённой вами текстовой строки, функция возвращает одномерный массив из 4 элементов:
Учусь! Никакого проекта нет, все только в планах. Думаю с какой стороны подойти.
На данный момент интересует вот чно.
В ячейке (B1...Bn+1) строка типа "Болт (обработанный 20\80 4356, крашенный 20\100 7652, конический 20\120 6743, скошенный 30\150 98711)"
Надо разбить в разные ячейки:
4356|Болт обработанный||20\80
7652|Болт крашенный||20\100
и т.д.
Здравствуйте, Дмитрий.
Откуда я знаю, как должно быть, и где у вас пробел встречается.
Покажите свой код, скажите, что пытаетесь сделать, - тогда подскажу вам, как правильно написать код.
У меня когда встречает пробел, просто удаляет все после пробела (вместе с пробелом).
Так и должно быть?
Где так прогать научится, ато на работе по мелочи макросы нужны. Человек шарит, молодец. :-)
Отправить комментарий