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

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

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

Студворк — интернет-сервис помощи студентам
Нужно записать в массив числа, записанные в столбце рабочего листа, начиная с выделенной ячейки
В массив записываю так, но не могу определить активную ячейку и конечную ячейку, чтобы не записывать в массив пустоту
Visual Basic
1
2
3
If Int(Cells(Row2, Col)) = Cells(Row2, Col) Then
          a(n) = Cells(Row2, Col) 
        End If
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
05.03.2013, 21:09
Ответы с готовыми решениями:

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

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

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

9
15155 / 6428 / 1731
Регистрация: 24.09.2011
Сообщений: 9,999
05.03.2013, 23:47
Получите массив одним действием:
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  [ТС]
А как записать в одномерный массив?
0
4377 / 661 / 36
Регистрация: 17.01.2010
Сообщений: 2,134
10.03.2013, 21:56
А почему именно нужен одномерный? Но если очень нужно...
"Казанский" вам показал, это и будет одномерный. Но можно еще перебором (это займет больше времени).
Попробуйте вот так:
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  [ТС]
Сделала так:
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
4377 / 661 / 36
Регистрация: 17.01.2010
Сообщений: 2,134
10.03.2013, 22:23
Row = ActiveCell.Row
Убегайте от такого с всех ног!!!! Слева Row - это переменная, а справа Row - часть синтаксиса VBA. Он может умом поехать. Назвите переменную как Вам нравится: mRow, currRow, activeRow ...., но только не Row!!!
И потом. Зачем Вам стат. массив? Не легче работать с динамическим?
0
15155 / 6428 / 1731
Регистрация: 24.09.2011
Сообщений: 9,999
10.03.2013, 22:35
Цитата Сообщение от oooooops Посмотреть сообщение
А как записать в одномерный массив?
Добавьте транспонирование
Visual Basic
1
arr = Application.Transpose(Range(ActiveCell, Cells(Rows.Count, ActiveCell.Column).End(xlUp)))
0
4377 / 661 / 36
Регистрация: 17.01.2010
Сообщений: 2,134
10.03.2013, 23:27
Я тут подумал (редко, но бывает) . Вы бегаете от группы к группе. Переопределяете размерности и т.д.... Но одна из Ваших главных задач - убежать от пустых значений в массиве. А попробуйте так:
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
11.03.2013, 00:02

Не по теме:

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

1
4377 / 661 / 36
Регистрация: 17.01.2010
Сообщений: 2,134
11.03.2013, 00:07
Ну не мужику ведь! Хотя это сегодня модно.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
11.03.2013, 00:07
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru