Страницы: Пред. 1 2
RSS
Загрузка несмежных столбцов Excel в переменную массива VBA, Как загрузить?
 
Цитата
Андрей_26 написал:
а лучше приложили файл с небольшим примером
Пример лежит.
Цитата
Андрей_26 написал:
Для чего вам такой массив
Хочу уйти от SQL запроса, который легко и приятно писать, но который слишком медленно выполняется.

Основная мысль - загнать в массив много (19) несмежных столбцов умной таблицы, дабы потом глумиться над ним, различные фильтры применяя с использованием временным словаря.
Изменено: Мартын - 25.02.2020 14:59:31
 
Мартын это сообщение ни Вам было адресовано )))
 
Off
Цитата
Мартын написал:
SQL запроса, который легко и приятно писать, но который слишком медленно выполняется
ээээ, обычно все наоборот.
По вопросам из тем форума, личку не читаю.
 
Вот я и проверю, кто победит, SQL или массивно-словарный монстр.
Жаль, что нельзя взять в массив только нужные столбцы, придётся пихать в него всю таблицу.
Изменено: Мартын - 25.02.2020 16:01:06
 
Цитата
Андрей_26 написал:
ни Вам было адресовано )))
не "ни", а "не". это раз, а два это то, что ТС задавал вопрос три года назад. :)
 
Цитата
Мартын написал:
ТС задавал вопрос три года назад.
не обратил внимание ))))
Цитата
Мартын написал:
нельзя взять в массив только нужные столбцы
их можно взять в словарь или коллекцию
 
Мартын, не советую Evaluate — помимо длины строки, у него, вроде ещё косяки есть. К тому же запись короче, но на больших объёмах обычному циклу проигрывает. Не могу найти тему, где мы обсуждали это…
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Цитата
Jack Famous написал:
не советую Evaluate
Я уже понял, поэтому буду пользовать массив.
Цитата
Андрей_26 написал:
их можно взять в словарь или коллекцию
18 столбцов в один словарь? Как? Словарь вроде как содержит ключ и значение, то есть одну пару (по сути два столбца), а не 18.
Коллекции вообще не знаю что за звери. Что им соответствует в Паскале или С?
 
Ух как от темы то отошли
Цитата
Мартын написал:
Словарь вроде как содержит ключ и значение
не значение а элемент, а им может быть все что угодно, даже другой словарь.
Цитата
Мартын написал:
Коллекции вообще не знаю что за звери
вы ж ими почти постоянно пользуетесь. Например коллекция листов. Но они могут быть и пользовательскими, при этом в определенных случаях работает во много раз быстрее. http://www.excelworld.ru/forum/10-41782-288511-16-1575834204 + работает и на маке тоже.
По вопросам из тем форума, личку не читаю.
 
Цитата
БМВ написал:
работает во много раз быстрее.
Быстее словаря+массив на умной таблице размером 40000Х56 во сколько раз? Если речь о 2х-3х секундах, то мне не принципиально. Сейчас SQL запросы отрабатывают за 30 секунд. Мне кажется долго, вот я и заморочился.
Цитата
БМВ написал:
Но они могут быть и пользовательскими
почитал по быстрому о коллекциях, никаких преимуществ ДЛЯ СЕБЯ по сравнению со словарями не выявил.
 
Ещё одна странность.
По наводке многоуважаемого БМВ запихал массив с словарь. То есть каждый элемент словаря это одномерный массив из 25 элементов.
Захотел выгрузить массив Items на лист и столкнулся с ерундой.
Если написать так: то выгружается пустота (пустые ячейки на весь размер массива)
Код
ThisWorkbook.Worksheets("TMP").Range("A1").Resize(col, 25) = DataDIC.Items 
то выгружается пустота (пустые ячейки на весь размер массива)
А вот если записать такие костыли (двойное транспонирование):
Код
ThisWorkbook.Worksheets("TMP").Range("A3").Resize(col, 25) = Application.Transpose(Application.Transpose(DataDIC.Items))
то выгружается то, что нужно.
Почему в первом случае пустота выгружается? Можно-ли избавиться от костылей двойного транспонирования?
 
неужели никто с этим не сталкивался?
 
Мартын, Сталкивались, и с модераторами тоже сталкивались и они явно заинтересованы как последнее связано с темой.
По вопросам из тем форума, личку не читаю.
 
Цитата
Мартын: каждый элемент словаря это одномерный массив из 25 элементов
иными словами, каждый элемент это строка (при выгрузке)
Цитата
Мартын: =DataDIC.Items
вы пытаетесь выгрузить коллекцию всех элементов словаря (одномерный массив элементов, каждый из которых представляет собой также одномерный массив) на лист МАХОМ. По-моему это вообще должно выдать ошибку, либо я чёт не понял  :D
  • Обычно перед выводом на лист используется цикл, в котором собирается "двухмерный" массив (1 To Nrow, 1 To Ncol) для этого самого вывода…
  • Application.Transpose имеет ряд ограничений и простой цикл пересбора будет надёжнее (и вряд ли медленнее).
Получается штатный метод при двойном применении как-то преобразует данные, что они становятся пригодны для выгрузки, но ЧТО именно он меняет я не знаю — я бы собрал массив сам и не парился
Изменено: Jack Famous - 27.02.2020 09:33:11
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Цитата
Jack Famous написал:
должно выдать ошибку, либо я чёт не понял
Ошибки нет, просто на листе "очищается" область соответствующего размера, но значений в ней нет. :(
Цитата
Jack Famous написал:
имеет  ряд ограничений
Не знал, хотя это ограничение (Количество элементов не может превышать 5461) явно не работает, ибо у меня выгружается 6900 строк на 25 столбцов.

Цитата
БМВ написал:
как последнее связано с темой.
Ну оно как бы проистекает из темы, являясь её неотъемлемой частью. :)
Намёк понял, ухожу.
Страницы: Пред. 1 2
Наверх