Страница: 1 |
Страница: 1 |
Вопрос: Упростить код.
Добавлено: 19.01.09 10:07
Автор вопроса: AngryBadger
Доброго времени суток!
Написал функцию для заполнения массива, но он медленно работает, если нужно заполнить большлй массив. Посмотрите пожалуйста, есть ли какая-нибудь возможность его упростить. Причем, нужно чтобы в массив значения ячеек попадали таким образом:
При выделении диапазона $A$1:B$3$
Массив(1)=Cells(1,1).Value
Массив(2)=Cells(2,1).Value
Массив(3)=Cells(3,1).Value
Массив(4)=Cells(1,2).Value
Массив(5)=Cells(2,2).Value
Массив(6)=Cells(3,2).Value
Вот мой код:
Option Base 1
'______________________________________________________
Public Function FillTheArray() As Variant
Dim MyRange As Range 'Выделенный диапазон
Dim MyArray As Variant 'Массив, который заполняем
Dim i As Integer 'Просто счетчик
Dim iSelRows As Integer 'Количество рядов в выделеном диапазоне
Dim iFirstRow As Integer 'Ряд первой ячейки в выделеном диапазоне
Dim iCurrentRow As Integer 'Ряд текущей ячейки
Dim iCurrentColumn As Integer 'Столбец текущей ячейки
iSelRows = Selection.Rows.Count
iFirstRow = Selection.Row
iCurrentRow = Selection.Row
iCurrentColumn = Selection.Column
Set MyRange = Range(Selection.Cells.Address)
ReDim MyArray(MyRange.Cells.Count)
For i = 1 To MyRange.Cells.Count
MyArray(i) = Cells(iCurrentRow, iCurrentColumn).Value
Debug.Print MyArray(i)
If iCurrentRow + 1 < iSelRows + iFirstRow Then
iCurrentRow = iCurrentRow + 1
Else
iCurrentRow = iFirstRow
iCurrentColumn = iCurrentColumn + 1
End If
Next i
FillTheArray = MyArray
End Function
'______________________________________________________
Sub FillTheArray_Test()
Dim MyArr As Variant
MyArr = FillTheArray
End Sub
Ответы
Всего ответов: 6
Номер ответа: 1
Автор ответа:
AngryBadger
Вопросов: 33
Ответов: 245
Профиль | | #1
Добавлено: 19.01.09 10:30
Что-то я совсем по-русски написал)), но думаю, все поняли)
Номер ответа: 2
Автор ответа:
fAndOrIn
Вопросов: 5
Ответов: 344
Профиль | | #2
Добавлено: 19.01.09 13:21
Попробуй так (еще более по-русски, как мне кажется).
Большого выигрыша в скорости вряд-ли получится, но вдруг.
Кстати, объявлять массив просто как Variant не совсем корректно.
Номер ответа: 3
Автор ответа:
GDK
Вопросов: 13
Ответов: 348
Профиль | | #3
Добавлено: 19.01.09 14:46
Угу. И ваще - работа с переменными типа Variant происходит значительно дольше чем с др. типами.
Номер ответа: 4
Автор ответа:
AngryBadger
Вопросов: 33
Ответов: 245
Профиль | | #4
Добавлено: 19.01.09 15:02
Да это-то понятно, но у меня массив, действительно, состоит из элементов с разными типами данных.
fAndOrIn, спасибо. Но выиграша в скорости, действительно нет. Ну и ладно)
Номер ответа: 5
Автор ответа:
fAndOrIn
Вопросов: 5
Ответов: 344
Профиль | | #5
Добавлено: 19.01.09 20:04
Кстати, при тестировании на скорость, надеюсь, выключаете строки типа
Номер ответа: 6
Автор ответа:
AngryBadger
ICQ: 3329[нуль]7519
Вопросов: 0
Ответов: 13
Web-сайт:
Профиль | | #6
Добавлено: 19.01.09 21:52
Михаил at home
Ка-анэщна))), оно там нужно было для проверки))