Если необходимо преобразовать массив в столбец или строку (рис. 1), можно воспользоваться функцией Индекс.
Рис. 1. Массив преобразован в столбец
Скачать статью в формате Word, примеры в формате Excel
Функция ИНДЕКС возвращает значение, хранящееся в ячейке (являющейся элементом массива). Какую ячейку выбрать, функция указывает по горизонтальному и вертикальному номеру ячейки, отсчитываемому от левого верхнего угла массива. Например (рис. 2):
Рис. 2. Пример «работы» функции ИНДЕКС
где A1:G16 – область массива
3 – номер строки массива
5 – номер столбца массива
то есть, индекс задал ячейку Е3
Чтобы легче понять формулу ИНДЕКС, преобразующую массив в столбец, выполним последовательные шаги (см. также лист «Рис. 3» Excel-файла):
- Функция СТРОКА() возвращает номер строки той ячейки, в которой она забита (рис. 3); столбец I;
- Функция ЧИСЛСТОЛБ($A$1:$G$16) возвращает число столбцов в массиве;
- Функция ОКРВВЕРХ(СТРОКА()/ЧИСЛСТОЛБ($A$1:$G$16);1) возвращает номер столбца, ячейки, значение который мы хотим получить, столбец J; дает значение 1 для первых 7 значений (в общем случае, для первых N значений, где N – число столбцов в массиве);
- Функция ОСТАТ(СТРОКА();ЧИСЛСТОЛБ($A$1:$G$16)+0,0001) возвращает номер от 1 до 7 (в общем случае, от 1 до N, где N – число столбцов в массиве); получается, что идет перебор индексов: сначала первый индекс равен 1 (строка), а второй изменяется от 1 до 7 (столбец); далее строка = 2, а столбец перебирается от 1 до 7 и т.д., пока не пройдемся по всем строкам массива; +0,0001 – это маленькая хитрость; без этой добавочки при делении 7/7 будет получаться 0 в остатке, а нам нужно получить 7; эта формула расположена в столбце K;
- Функция ИНДЕКС($A$1:$G$16;ОКРВВЕРХ(СТРОКА()/ЧИСЛСТОЛБ($A$1:$G$16);1); ОКРВВЕРХ(ОСТАТ(СТРОКА();ЧИСЛСТОЛБ($A$1:$G$16)+0,0001);1)) возвращает значение из ячейки; см. столбец L
- Массив, где ищется значение, выделен желтым
- Номер строки внутри массива – зеленым
- Номер столбца внутри массива – серым
В Excel-файле представлено преобразование массива в столбец и строку. При этом приведено два варианта преобразования:
- Сначала по строкам, затем по столбцам массива
- Сначала по столбцам, затем по строкам массив
Сообщество, где люди делятся уникальным опытом
Вопросы и ответы по любой теме от IT сообщества
Помогаем строить карьеру в IT-индустрии
Биржа удаленной работы для IT-специалистов
Хабр Q&A — вопросы и ответы для IT-специалистов
Получайте ответы на вопросы по любой теме из области IT от специалистов в этой теме.
Комментарии
Добрый день, ищу решение обратной задачи. Преобразование двумерного массива в одномерный. Может кто-нибудь подсказать или дать ссылочку
Кстати, как вариант, вместо
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 элементов:
0 = 4356|Болт обработанный||2080
1 = 7652|Болт крашенный||20100
2 = 6743|Болт конический||20120
3 = 98711|Болт скошенный||30150
Учусь! Никакого проекта нет, все только в планах. Думаю с какой стороны подойти.
На данный момент интересует вот чно.
В ячейке (B1. Bn+1) строка типа "Болт (обработанный 2080 4356, крашенный 20100 7652, конический 20120 6743, скошенный 30150 98711)"
Надо разбить в разные ячейки:
4356|Болт обработанный||2080
7652|Болт крашенный||20100
и т.д.
Здравствуйте, Дмитрий.
Откуда я знаю, как должно быть, и где у вас пробел встречается.
Покажите свой код, скажите, что пытаетесь сделать, — тогда подскажу вам, как правильно написать код.
У меня когда встречает пробел, просто удаляет все после пробела (вместе с пробелом).
Так и должно быть?
Где так прогать научится, ато на работе по мелочи макросы нужны. Человек шарит, молодец. 🙂