Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.94/35: Рейтинг темы: голосов - 35, средняя оценка - 4.94
8 / 8 / 0
Регистрация: 30.01.2013
Сообщений: 33
1

Запись в массив из столбца с начала активной ячейки

05.03.2013, 21:09. Показов 6837. Ответов 9
Метки нет (Все метки)

Нужно записать в массив числа, записанные в столбце рабочего листа, начиная с выделенной ячейки
В массив записываю так, но не могу определить активную ячейку и конечную ячейку, чтобы не записывать в массив пустоту
Visual Basic
1
2
3
If Int(Cells(Row2, Col)) = Cells(Row2, Col) Then
          a(n) = Cells(Row2, Col) 
        End If
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.03.2013, 21:09
Ответы с готовыми решениями:

Выделение столбца от активной ячейки
Как выделить весь столбец до низа от активной ячейки.

имя (заголовок) столбца активной ячейки в ListObject
В экселе делаю свою формулу через VBA. вставлять буду в ячейку умной таблицы. Как узнать в каком...

Автоматический пересчет только строки и столбца активной ячейки в Excel
Добрый день, уважаемые форумчане! Прошу помощи! Не успел вплотную заняться изучением VBA, как...

Запись в TextBox значение активной ячейки
Здравствуйте, подскажите, пожалуйста, как записать в TextBox значение активной ячейки, а то только...

9
15038 / 6362 / 1726
Регистрация: 24.09.2011
Сообщений: 9,971
05.03.2013, 23:47 2
Получите массив одним действием:
Visual Basic
1
2
Dim arr()
arr = Range(ActiveCell, Cells(Rows.Count, ActiveCell.Column).End(xlUp)).Value
Это будет двумерный массив типа Variant(1 to 20, 1 to 1).
1
8 / 8 / 0
Регистрация: 30.01.2013
Сообщений: 33
10.03.2013, 21:14  [ТС] 3
А как записать в одномерный массив?
0
4376 / 660 / 36
Регистрация: 17.01.2010
Сообщений: 2,134
10.03.2013, 21:56 4
А почему именно нужен одномерный? Но если очень нужно...
"Казанский" вам показал, это и будет одномерный. Но можно еще перебором (это займет больше времени).
Попробуйте вот так:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Dim Row2&, Col&, i&, endRow&, counter&, mArr()
   Row2=Activecell.row
   Col=Activecell.column
   counter=0
   for i=Row2 to endRow ' endRow - это номер _
                            последней нужной строки, которую Вы _
                            должны как-то определить, и который _
                            (здесь) должен удовлетворять _
                            условие endRow > Row2
      if cells(i,Col).value <> "" Then
         counter = counter + 1
         redim preserve mArr(counter)
         mArr(counter) = cells(i,Col).value
      End if
   next ' i
1
8 / 8 / 0
Регистрация: 30.01.2013
Сообщений: 33
10.03.2013, 22:16  [ТС] 5
Сделала так:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
Col = ActiveCell.Column   'Номер активного столбца
Row = ActiveCell.Row      'Номер активной строки
N = 0
ReDim a(10) 
Do
  N = N + 1  
'При переходе к следующей десятке элементов массива A, расширя-ем
'его на 10 элементов, сохраняя предыдущие значения 
  If (N Mod 10) = 0 Then ReDim Preserve a(N + 10)
  a(N) = Cells(N, Col)
'Если в A(N) записано значение Empty (Пусто), то выходим из цикла
Loop While a(N) <> Empty
0
4376 / 660 / 36
Регистрация: 17.01.2010
Сообщений: 2,134
10.03.2013, 22:23 6
Row = ActiveCell.Row
Убегайте от такого с всех ног!!!! Слева Row - это переменная, а справа Row - часть синтаксиса VBA. Он может умом поехать. Назвите переменную как Вам нравится: mRow, currRow, activeRow ...., но только не Row!!!
И потом. Зачем Вам стат. массив? Не легче работать с динамическим?
0
15038 / 6362 / 1726
Регистрация: 24.09.2011
Сообщений: 9,971
10.03.2013, 22:35 7
Цитата Сообщение от oooooops Посмотреть сообщение
А как записать в одномерный массив?
Добавьте транспонирование
Visual Basic
1
arr = Application.Transpose(Range(ActiveCell, Cells(Rows.Count, ActiveCell.Column).End(xlUp)))
0
4376 / 660 / 36
Регистрация: 17.01.2010
Сообщений: 2,134
10.03.2013, 23:27 8
Я тут подумал (редко, но бывает) . Вы бегаете от группы к группе. Переопределяете размерности и т.д.... Но одна из Ваших главных задач - убежать от пустых значений в массиве. А попробуйте так:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Sub asdf()
Dim counter As Long, mArr()
Dim mRng As Range, currCell As Range
    With ActiveSheet
        Set mRng = Range(ActiveCell, _
            Cells(.UsedRange.Row - 1 + _
                    .UsedRange.Rows.Count, ActiveCell.Column)) ' _
                                          определили диапазон  с данными.
        Set mRng = mRng.SpecialCells(xlCellTypeConstants) ' _
                                         ПЕРЕопределили этот диапазон, _
                                         куда теперь входят только не пустые ячейки _
                                         (что б это проверить, напишите где-то _
                                           ниже mRng.Select) 
    End With
    ReDim mArr(mRng.Cells.Count) ' один раз определили размер массива
    counter = 0
        For Each currCell In mRng
            counter = counter + 1 ' счетчик для присвоения индекса _
                                                   члену массива.
            mArr(counter) = currCell.Value
        Next
End Sub
Должно работать много быстрее. О! Забыл! Вижу, Вы девушка - с прошедшим Вас!
1
ikki
11.03.2013, 00:02
  #9

Не по теме:

:jokingly: о! какой галантный смайлик.

1
4376 / 660 / 36
Регистрация: 17.01.2010
Сообщений: 2,134
11.03.2013, 00:07 10
Ну не мужику ведь! Хотя это сегодня модно.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.03.2013, 00:07

Выделение диапазона столбца от активной ячейки до последней строки имеющей текст
Добрый день! Подскажите решение проблемы. Есть данные которые заполнены в н-ом диапазоне, допустим,...

Изменение значения фиксированной ячейки в зависимости от активной ячейки
Добрый день. Помогите пожалуйста написать макрос так, чтобы при изменении активной ячейки,...

нужно цифры из ячейки правого столбца дописать к цифрам из соседней ячейки левого столбца
Суть проблемы в следующем: есть два столбца с цифрами, нужно цифры из ячейки правого столбца...

DataGridView обязательное условие для ячейки столбца - чтение/запись RightToLeft
Как установить обязательным условием чтения, записи данных(ввода т.е.) слева направо. Это связано с...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru