749 / 460 / 50
Регистрация: 13.05.2012
Сообщений: 958
|
||||||
1 | ||||||
Как вывести всю строку(столбец) в массиве02.08.2013, 21:34. Показов 10205. Ответов 38
Метки нет (Все метки)
Привет Всем!
Есть матрица, например 1 4 7 10 2 5 8 11 3 6 9 12 Мне нужно вывести, например весь первый столбец 1 2 3 или всю строку 1 4 7 10 Пробую вот так
0
|
02.08.2013, 21:34 | |
Ответы с готовыми решениями:
38
Необходимо перемножить строку на столбец двумерного массива и результат вывести в одномерном массиве Как поменять местами 1-ю строку и 1 столбец в двухмерном массиве? хранимая процедура (MIN), как вывести всю строку, а не только 1 данное??? Как вывести столбец в двумерном массиве? |
6922 / 2832 / 543
Регистрация: 19.10.2012
Сообщений: 8,645
|
|
03.08.2013, 10:26 | 21 |
Сергей, спасибо. Нужно запомнить как применять этот Index
Сравнил скорость - медленнее, но всего где-то на 20%. Но конечно на практике (когда пишешь не для себя) редко можно быть уверенным, что данных всегда будет мало. Поэтому надёжнее перебор. И быстрее
0
|
4377 / 661 / 36
Регистрация: 17.01.2010
Сообщений: 2,134
|
|
03.08.2013, 10:41 | 22 |
Ну еще и я..., т.к. про "действительно" ничего. Побегал по глобус, может сразу и не то нашел (или нашел не то ), но:
The dependency limits that enable smart recalculation instead of full calculation are now limited only by available memory instead of 8,000 cells dependent on a single area and 64,000 areas having dependencies. И, практически, там-же: Full column references are now allowed, and the limit on array formulas referring to another worksheet is increased from 65,000 to available memory. Ссылки: http://msdn.microsoft.com/en-u... e.14).aspx http://msdn.microsoft.com/en-u... e.14).aspx
0
|
6922 / 2832 / 543
Регистрация: 19.10.2012
Сообщений: 8,645
|
|
03.08.2013, 10:54 | 23 |
Проверил на 2007 (когда скорость сравнивал) - если массив 65536 строк, то index выпадает в ошибку.
Ну а то, что нашли - думаю относится к формулам листа на листе.
1
|
4377 / 661 / 36
Регистрация: 17.01.2010
Сообщений: 2,134
|
|
03.08.2013, 11:02 | 24 |
Да, к листу. А вот про VBA - и так спрашиваю, и так - пока глухо. Но, думаю, Ваша проверка уже что-то значит. Странно. Я этого даже не подозревал (но у меня и таких таблиц не было, не больше 50000 строк.)
0
|
6922 / 2832 / 543
Регистрация: 19.10.2012
Сообщений: 8,645
|
|
03.08.2013, 11:05 | 25 |
Так проверить ведь легко - растянули массив на >65535 строк, запустили код - ошибка.
Очистили 65536-ю строку - работает!
0
|
4377 / 661 / 36
Регистрация: 17.01.2010
Сообщений: 2,134
|
|
03.08.2013, 11:27 | 26 |
Почитать хочуууу! Что б не как заочник, с умным видом: "Я не теоретик, я практик".
Вот пока нашел, но это из форума, там еще есть, но туманно: VBA array size is limited to 65535 when the file version is prior 2007 (file type end with xls). If you're working on a pre-2007 excel file in excel 2010 environment, yes, the array will still imited to 65535 rows. Еще побегаю.
0
|
6922 / 2832 / 543
Регистрация: 19.10.2012
Сообщений: 8,645
|
|
03.08.2013, 11:32 | 27 |
По-моему "VBA array size is limited to 65535" фигня. Думаю можно создать пустой массив и больше, и забить в него данные (из текста, или из нескольких листов/массивов в цикле).
Другое дело что с листа конечно за раз так много взять неоткуда Но не проверял, и проверить сейчас негде - нет дома 2003. Но кажется на работе читал в массив текст и поболее 65535 строк.
0
|
4377 / 661 / 36
Регистрация: 17.01.2010
Сообщений: 2,134
|
|
03.08.2013, 11:44 | 28 |
Странно, пока все кивают на память.
VBA Memory Limits 32-bit versions of Excel seem to have a memory limit of about 500MB for VBA (arrays, code etc). Excel 2010 64 bit seems to have a memory limit of about 4GB for VBA. I do not know if these limits are reduced if you also have large workbooks open at the same time as the VBA.
0
|
6922 / 2832 / 543
Регистрация: 19.10.2012
Сообщений: 8,645
|
|
03.08.2013, 12:00 | 29 |
Ну я и миллион строк на 32-bit versions of Excel через массив обрабатывал - помню словарь заполнялся 30 секунд.
Просто у меня нет другой версии Но думаю упрётся в предел памяти, если будет много столбцов - бывало такое, что висло при большом объёме. Значит есть смысл переходить на 2010 - но неохота систему переставлять... Обойдусь пока так.
0
|
4377 / 661 / 36
Регистрация: 17.01.2010
Сообщений: 2,134
|
|
03.08.2013, 12:13 | 30 |
Нет хорошего без плохого. Кучу интересного начитался теперь. Но все-таки ищу про VBA + Formulas, чтоб: "Это кирпич, И ВСЕ!" Как Ваша ссылка на integer и long. Для меня это был переворот в мозгах.
Добавлено через 5 минут Таааак! А это уже для тех, кто криво смотрит на Dictionary: In Excel 2007, the AdvancedFilter, which should have been the way to go, seems flakey under certain conditions. I used dictionaries and that worked well to filter out items in one column that were present in another column.
0
|
1702 / 189 / 19
Регистрация: 20.11.2011
Сообщений: 281
|
|
03.08.2013, 12:13 | 31 |
Да. В 2010 тоже. И скорей всего и в 2013(у самого нету 2013, не пробовал).
1
|
4377 / 661 / 36
Регистрация: 17.01.2010
Сообщений: 2,134
|
|
03.08.2013, 12:21 | 32 |
To kuklp. А у Вас нет какой-то "официальной" сылки ( про vba formulas rows limit)? Редко такое бывает, но нахожу все, но не совсем то...
0
|
1702 / 189 / 19
Регистрация: 20.11.2011
Сообщений: 281
|
|
03.08.2013, 12:27 | 33 |
Нету. Да я этим и не заморачивался, как видимо и спецы из мелкософта. Было в 2003 65536 строк так и осталось в этом аспекте. Не взирая, что строк уже за миллион. Я сам удивился, когда еще в 2007 наткнулся на эти грабли, а потом проверив в 2010, досадно крякнул и принял, как есть
1
|
4377 / 661 / 36
Регистрация: 17.01.2010
Сообщений: 2,134
|
|
03.08.2013, 12:33 | 34 |
Уже и сам вижу. Вот здесь интересно, там и про отсутствие доков, и про Transpose:
http://answers.microsoft.com/e... 7309c26883
1
|
6922 / 2832 / 543
Регистрация: 19.10.2012
Сообщений: 8,645
|
|
03.08.2013, 12:42 | 35 |
Да уж, transpose, чтоб потом redim preserve... Это я по ссылке почитал, но не тщательно до конца
Зачем такое издевательство? Есть ведь куча других путей - да хоть собрать номера в коллекцию, затем создать нужный массив и переложить в него - это если строк много, а памяти мало. Я обычно сразу создаю аналогичный массив и заполняю его, хвост потом отсекаю при выгрузке - дёшево и сердито.
2
|
4377 / 661 / 36
Регистрация: 17.01.2010
Сообщений: 2,134
|
|
03.08.2013, 12:43 | 36 |
Да это не для Вас!!! Это так, к общему...
0
|
6922 / 2832 / 543
Регистрация: 19.10.2012
Сообщений: 8,645
|
|
03.08.2013, 12:52 | 37 |
Да это так, к слову... Просто не понял необходимость таких действий. Перечитал - чел хочет дополнять массив строками. Вообще конечно еслиб Redim Preserve принимал параметры, куда наращивать - это было бы очень хорошо. Или было бы Redim PreserveH и Redim PreserveV - но MS такого почему-то не сделали
0
|
4377 / 661 / 36
Регистрация: 17.01.2010
Сообщений: 2,134
|
|
03.08.2013, 12:57 | 38 |
Так, к слову, посмеяться! Вычитал.
Рекламация, возврат некачественного. Готовили женщины. Хорошие пачки позначали "Х", плохие - "П". Отгружали мужчины. Прочитали по своему. Дальше догадайтесь, что отправили....
0
|
6922 / 2832 / 543
Регистрация: 19.10.2012
Сообщений: 8,645
|
|
03.08.2013, 13:04 | 39 |
Кстати про Redim Preserve - если бы просто добавляло строки, как например в коллекцию-словарь - можно было бы использовать.
Так ведь нет - нужно создать новый массив и всё переложить! В сад...
1
|
03.08.2013, 13:04 | |
03.08.2013, 13:04 | |
Помогаю со студенческими работами здесь
39
Вывести не всю таблицу умножения, а только заданный столбец Дана строка. Если скобки расставлены правильно, то вывести число 1. В противном случае вывести всю строку Как разбить строку на отдельные слова и вывести их в столбец А активного рабочего листа в порядке возрастания их длины Указатель на строку: как выводить не всю строку целиком, а конкретную букву Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |