Гость
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Быстро записать диапазон ячеек с листа Excel в массив и обратно / 12 сообщений из 12, страница 1 из 1
29.03.2012, 21:50
    #37730430
Snowblast
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Быстро записать диапазон ячеек с листа Excel в массив и обратно
Требуется записать за один раз (без поэлементного перебора) диапазон с листа Excel в массив пользовательского типа данных и далее так же за один раз выгрузить этот массив в другой диапазон.

Для массивов типа Variant делал следующим образом:
Код: vbnet
1.
2.
3.
Dim TestArray as Variant
TestArray=Range("A5:C6").Value   ' Запись диапазона в массив
Range("A15:C16").Value=TestArray   ' Запись массива в диапазон


Как проделать подобное с массивом пользовательского типа данных?
...
Рейтинг: 0 / 0
02.04.2012, 19:02
    #37735167
Snowblast
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Быстро записать диапазон ячеек с листа Excel в массив и обратно
Ни у кого нет вариантов?
...
Рейтинг: 0 / 0
02.04.2012, 19:14
    #37735193
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Быстро записать диапазон ячеек с листа Excel в массив и обратно
Никак.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
17.04.2015, 13:20
    #38939143
Gabit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Быстро записать диапазон ячеек с листа Excel в массив и обратно
Доброе время суток !

Пробую записать в массив и обратно в лист.
Только мне надо выборочно несколько колонок.
Делаю так:

Код: vbnet
1.
2.
3.
Dim TestArray() As Variant
TestArray = Range("D11:D15,C11:C15").Value ' Запись диапазона в массив
Range("P11:Q15").Value = TestArray ' Запись массива в диапазон



В результате в массив записывает только D11:D15, и обратно содержимое этого диапазона 2 раза записывается в Лист.
...
Рейтинг: 0 / 0
17.04.2015, 13:37
    #38939182
Slava_Psk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Быстро записать диапазон ячеек с листа Excel в массив и обратно
Здесь эта тема обсуждалась 17492761
...
Рейтинг: 0 / 0
17.04.2015, 18:56
    #38939619
Казанский
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Быстро записать диапазон ячеек с листа Excel в массив и обратно
Gabit, работайте по столбцам (областям). Потому что range.Value это на самом деле range.Areas(1).Value .
...
Рейтинг: 0 / 0
18.04.2015, 09:56
    #38939771
Gabit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Быстро записать диапазон ячеек с листа Excel в массив и обратно
Написал так:

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
Sub Sel_Group()
Dim TestArray

Set DataSh = ActiveWorkbook.ActiveSheet
Set TestArray = DataSh.Range("B8:B29,C8:C29,D8:D29,F8:F29,K8:K29,L8:L29")
TestArray.Copy Destination:=DataSh.Range("Q11")

End Sub



Этот макрос работает, если он находиться в файле Excel которую обрабатываю.
Если макрос перенести в другой файл и из него запустить:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
Sub Sel_Group()
Dim TestArray
Dim DataSh

n_cnt = Workbooks.Count

If n_cnt <> 2 Then
   MsgBox ("Не было открыто 2 файла !")
   Exit Sub
End If

Set DataSh = Workbooks(2).Worksheets(1)

TestArray = DataSh.Range("B8:B29,C8:C29,D8:D29,F8:F29,K8:K29,L8:L29")
TestArray.Copy Destination:=DataSh.Range("P11")

End Sub



выдает ошибку:
Run-time error '424':
Object required

на этой строке:
Код: vbnet
1.
TestArray.Copy Destination:=DataSh.Range("P11")




Я обычно создаю отдельный файл для макроса (xlsm) и в нем храню макросы.
Пользователи должны сначала открыть файл с макросом, потом файл с данными.
И из файла макроса запускают макрос.
...
Рейтинг: 0 / 0
18.04.2015, 10:29
    #38939780
Казанский
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Быстро записать диапазон ячеек с листа Excel в массив и обратно
Сравните строки из 1 и 2 кода
Код: vbnet
1.
2.
3.
Set TestArray = DataSh.Range("B8:B29,C8:C29,D8:D29,F8:F29,K8:K29,L8:L29")
'и
TestArray = DataSh.Range("B8:B29,C8:C29,D8:D29,F8:F29,K8:K29,L8:L29")
...
Рейтинг: 0 / 0
18.04.2015, 20:33
    #38939897
Gabit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Быстро записать диапазон ячеек с листа Excel в массив и обратно
Спасибо большое,
Не думал что Set играет большую роль.
...
Рейтинг: 0 / 0
19.04.2015, 23:14
    #38940218
Gabit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Быстро записать диапазон ячеек с листа Excel в массив и обратно
Slava_PskЗдесь эта тема обсуждалась 17492761
В указанной теме обсуждался создание массива связанный с данными в Excel (Set TestArray).
Но мне нужно обработать массив.
Если начну в массиве внести изменения, данные в листе Excel тоже меняется.
Поэтому сделал:
Код: vbnet
1.
2.
3.
Dim TestArray() As Variant
TestArray = Range("C11:C15,E11:E15").Value ' Запись диапазона в массив
Range("P11:Q15").Value = TestArray ' Запись массива в диапазон


Но в этом случае создается одномерный массив, и в него копируется только содержимое - [C11:C15].
Если написать так:
Код: vbnet
1.
2.
3.
Dim TestArray() As Variant
TestArray = Range("C11:E15").Value ' Запись диапазона в массив
Range("P11:Q15").Value = TestArray ' Запись массива в диапазон


Тогда записывается данные 3-х столбцов, но тут для меня будет лишним [D11:D15].
Пытался по одной графе добавлять в массив, но такому массиву ReDim применить не получилось.
Подскажите пожалуйста выход,
...
Рейтинг: 0 / 0
19.04.2015, 23:26
    #38940220
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Быстро записать диапазон ячеек с листа Excel в массив и обратно
ну используйте два параллельных одномерных массива
...
Рейтинг: 0 / 0
20.04.2015, 20:21
    #38941036
Gabit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Быстро записать диапазон ячеек с листа Excel в массив и обратно
У меня будет до 10 столбцов,
Нет ли другого решения ?
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Быстро записать диапазон ячеек с листа Excel в массив и обратно / 12 сообщений из 12, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]