Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Работа с массивами - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Работа с массивами (Макросы/Sub)
Работа с массивами
parshin71 Дата: Четверг, 13.03.2014, 09:22 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 11
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
Есть двухмерный массив Mas(Rw,8), можно ли его внести в лист по блочно типа Range, например Mas(Rw,1) в колонку 1, а с индексами 2...8 начиная с колонки 3. По ячейкам в цикле получается слишком долго.
Пока это существует в таком виде
[vba]
Код

    For i = 1 To Rw1
      Worksheets(Lst2).Cells(i + 1, 1) = Mas1(i, 1)
      For j = 3 To 9
        Worksheets(Lst2).Cells(i + 1, j) = Mas1(i, j - 1)
      Next j
    Next i
[/vba]
желательно, если получится
[vba]
Код

Worksheets(Lst2).Range("A2:A" & Rw1 + 1) = .....
Worksheets(Lst2).Range("C2:I" & Rw1 + 1) = .....
[/vba]
Rw1 может быть любым пока 300 с лишним, но может быть и больше.
Если это вообще возможно, помогите пожалуйста


Сообщение отредактировал parshin71 - Четверг, 13.03.2014, 09:35
 
Ответить
СообщениеЕсть двухмерный массив Mas(Rw,8), можно ли его внести в лист по блочно типа Range, например Mas(Rw,1) в колонку 1, а с индексами 2...8 начиная с колонки 3. По ячейкам в цикле получается слишком долго.
Пока это существует в таком виде
[vba]
Код

    For i = 1 To Rw1
      Worksheets(Lst2).Cells(i + 1, 1) = Mas1(i, 1)
      For j = 3 To 9
        Worksheets(Lst2).Cells(i + 1, j) = Mas1(i, j - 1)
      Next j
    Next i
[/vba]
желательно, если получится
[vba]
Код

Worksheets(Lst2).Range("A2:A" & Rw1 + 1) = .....
Worksheets(Lst2).Range("C2:I" & Rw1 + 1) = .....
[/vba]
Rw1 может быть любым пока 300 с лишним, но может быть и больше.
Если это вообще возможно, помогите пожалуйста

Автор - parshin71
Дата добавления - 13.03.2014 в 09:22
nilem Дата: Четверг, 13.03.2014, 10:03 | Сообщение № 2
Группа: Авторы
Ранг: Старожил
Сообщений: 1613
Репутация: 563 ±
Замечаний: 0% ±

Excel 2013, 2016
можно попробовать реорганизовать массив: 1-й столбец массива сделать 8-ым. И тогда типа такого
[vba]
Код
sheets(Lst2).Range("A2").resize(ubound(arr)).value=application.index(arr,0,8)
sheets(Lst2).Range("C2").resize(ubound(arr),7).value=arr()
[/vba]


Яндекс.Деньги 4100159601573
 
Ответить
Сообщениеможно попробовать реорганизовать массив: 1-й столбец массива сделать 8-ым. И тогда типа такого
[vba]
Код
sheets(Lst2).Range("A2").resize(ubound(arr)).value=application.index(arr,0,8)
sheets(Lst2).Range("C2").resize(ubound(arr),7).value=arr()
[/vba]

Автор - nilem
Дата добавления - 13.03.2014 в 10:03
parshin71 Дата: Четверг, 13.03.2014, 10:09 | Сообщение № 3
Группа: Пользователи
Ранг: Новичок
Сообщений: 11
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
Спасибо попробую сделать
 
Ответить
СообщениеСпасибо попробую сделать

Автор - parshin71
Дата добавления - 13.03.2014 в 10:09
Hugo Дата: Четверг, 13.03.2014, 10:57 | Сообщение № 4
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3255
Репутация: 707 ±
Замечаний: 0% ±

2019
С этим index будет дольше, чем переложить из массива в массив в цикле, как я советовал на другом форуме.


excel@nxt.ru
webmoney: E265281470651 Z422237915069
 
Ответить
СообщениеС этим index будет дольше, чем переложить из массива в массив в цикле, как я советовал на другом форуме.

Автор - Hugo
Дата добавления - 13.03.2014 в 10:57
nilem Дата: Четверг, 13.03.2014, 11:45 | Сообщение № 5
Группа: Авторы
Ранг: Старожил
Сообщений: 1613
Репутация: 563 ±
Замечаний: 0% ±

Excel 2013, 2016
С этим index будет дольше

Ну для 300 строк вроде д.б. нормально. И коротенько так :)


Яндекс.Деньги 4100159601573
 
Ответить
Сообщение
С этим index будет дольше

Ну для 300 строк вроде д.б. нормально. И коротенько так :)

Автор - nilem
Дата добавления - 13.03.2014 в 11:45
parshin71 Дата: Четверг, 13.03.2014, 12:00 | Сообщение № 6
Группа: Пользователи
Ранг: Новичок
Сообщений: 11
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
Это сейчас 330, а когда все заработает объемы могут быть совершенно другими, и с index ничего не вышло делать, то делает , но не то что нужно.
 
Ответить
СообщениеЭто сейчас 330, а когда все заработает объемы могут быть совершенно другими, и с index ничего не вышло делать, то делает , но не то что нужно.

Автор - parshin71
Дата добавления - 13.03.2014 в 12:00
Hugo Дата: Четверг, 13.03.2014, 12:29 | Сообщение № 7
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3255
Репутация: 707 ±
Замечаний: 0% ±

2019
Я бы сразу изначально делал не один мас(), а два - чтоб из первого позже взять первый столбец (откинув второй), а из второго всё без пропусков от начала.
Если конечно так можно сделать по задаче.
Ну или изучайте copymemory - я правда так и не проникся, не использую.


excel@nxt.ru
webmoney: E265281470651 Z422237915069
 
Ответить
СообщениеЯ бы сразу изначально делал не один мас(), а два - чтоб из первого позже взять первый столбец (откинув второй), а из второго всё без пропусков от начала.
Если конечно так можно сделать по задаче.
Ну или изучайте copymemory - я правда так и не проникся, не использую.

Автор - Hugo
Дата добавления - 13.03.2014 в 12:29
nilem Дата: Четверг, 13.03.2014, 14:03 | Сообщение № 8
Группа: Авторы
Ранг: Старожил
Сообщений: 1613
Репутация: 563 ±
Замечаний: 0% ±

Excel 2013, 2016
и с index ничего не вышло делать

Если кол-во строк в массиве до 60000, то Индекс вполне себе работает.
Может, дадите примерчик какой-нибудь - попробуем разные варианты


Яндекс.Деньги 4100159601573
 
Ответить
Сообщение
и с index ничего не вышло делать

Если кол-во строк в массиве до 60000, то Индекс вполне себе работает.
Может, дадите примерчик какой-нибудь - попробуем разные варианты

Автор - nilem
Дата добавления - 13.03.2014 в 14:03
parshin71 Дата: Вторник, 01.04.2014, 10:02 | Сообщение № 9
Группа: Пользователи
Ранг: Новичок
Сообщений: 11
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
Я попытался сделать следующее:
[vba]
Код

Dim M(), Mas1()
....
ReDim M(1 To Rw1), Mas1(1 To Rw1, 1 To 8)
    For i = 1 To Rw1
      M(i) = Mas1(i, 1)
    Next i
    Worksheets(Lst2).Range("A2").Resize(UBound(M())).Value = M()
[/vba]
Rw1 пока рано 330, но может быть намного больше. Это как-будто бы все проходит, но в столбце А от 2 до 331 строки появляется только 1-й элемент массива. Что нужно сделать, чтобы появился весь массив?


Сообщение отредактировал parshin71 - Вторник, 01.04.2014, 10:14
 
Ответить
СообщениеЯ попытался сделать следующее:
[vba]
Код

Dim M(), Mas1()
....
ReDim M(1 To Rw1), Mas1(1 To Rw1, 1 To 8)
    For i = 1 To Rw1
      M(i) = Mas1(i, 1)
    Next i
    Worksheets(Lst2).Range("A2").Resize(UBound(M())).Value = M()
[/vba]
Rw1 пока рано 330, но может быть намного больше. Это как-будто бы все проходит, но в столбце А от 2 до 331 строки появляется только 1-й элемент массива. Что нужно сделать, чтобы появился весь массив?

Автор - parshin71
Дата добавления - 01.04.2014 в 10:02
nilem Дата: Вторник, 01.04.2014, 10:39 | Сообщение № 10
Группа: Авторы
Ранг: Старожил
Сообщений: 1613
Репутация: 563 ±
Замечаний: 0% ±

Excel 2013, 2016
M(1 To Rw1) у вас одномерный, в столбец выводим так:
[vba]
Код
Range("A2").Resize(UBound(M())).Value = application.transpose(m)
[/vba]


Яндекс.Деньги 4100159601573
 
Ответить
СообщениеM(1 To Rw1) у вас одномерный, в столбец выводим так:
[vba]
Код
Range("A2").Resize(UBound(M())).Value = application.transpose(m)
[/vba]

Автор - nilem
Дата добавления - 01.04.2014 в 10:39
parshin71 Дата: Вторник, 01.04.2014, 10:43 | Сообщение № 11
Группа: Пользователи
Ранг: Новичок
Сообщений: 11
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
Спасибо большое.
 
Ответить
СообщениеСпасибо большое.

Автор - parshin71
Дата добавления - 01.04.2014 в 10:43
nilem Дата: Вторник, 01.04.2014, 10:48 | Сообщение № 12
Группа: Авторы
Ранг: Старожил
Сообщений: 1613
Репутация: 563 ±
Замечаний: 0% ±

Excel 2013, 2016
... правда Тranspose тоже имеет ограничение - что-то около 60000 строк


Яндекс.Деньги 4100159601573

Сообщение отредактировал nilem - Вторник, 01.04.2014, 10:48
 
Ответить
Сообщение... правда Тranspose тоже имеет ограничение - что-то около 60000 строк

Автор - nilem
Дата добавления - 01.04.2014 в 10:48
parshin71 Дата: Вторник, 01.04.2014, 11:25 | Сообщение № 13
Группа: Пользователи
Ранг: Новичок
Сообщений: 11
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
Хорошо я понял, скорее всего потребуется на много меньше, т.к. есть основной массив, который разделяется на 2 массива. Еще раз спасибо за информацию.
 
Ответить
СообщениеХорошо я понял, скорее всего потребуется на много меньше, т.к. есть основной массив, который разделяется на 2 массива. Еще раз спасибо за информацию.

Автор - parshin71
Дата добавления - 01.04.2014 в 11:25
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Работа с массивами (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!