Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.54/54: Рейтинг темы: голосов - 54, средняя оценка - 4.54
0 / 0 / 0
Регистрация: 18.04.2011
Сообщений: 12
1

Запомнить значения из выделенного диапазона в переменную

13.01.2012, 02:04. Показов 9771. Ответов 12
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
подскажите как запомнить значения из выделенного диапазона? не copy или paste, а просто запомнить. Для того чтобы потом обращаться к элементам этого диапазона как к переменным.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.01.2012, 02:04
Ответы с готовыми решениями:

На основе значений выделенного диапазона сформировать значения нового диапазона
На основе значений выделенного диапазона сформировать значения нового диапазона по указанному в...

Как запомнить значения первой строки выбранного диапазона?
Уважаемые форумчане! :) Доброго времени суток, Нужна ваша помощь... Есть диапазон ячеек в несколько...

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

Нахождение максимального значения среди отрицательных элементов выделенного диапазона рабочей таблицы
Разработать подпрограмму нахождения максимального значения сре ди отрицательных элементов...

12
173 / 19 / 3
Регистрация: 14.12.2010
Сообщений: 50
13.01.2012, 06:15 2
Цитата Сообщение от alyam Посмотреть сообщение
подскажите как запомнить значения из выделенного диапазона? не copy или paste, а просто запомнить. Для того чтобы потом обращаться к элементам этого диапазона как к переменным.
Запомнить где?
Если в коде макроса, то
Visual Basic
1
2
Dim vData As Variant
vData = Selection.Value
И обращайся к значениям, как элементам двумерного массива
Visual Basic
1
Debug.Print vData(1,1)
0
Заблокирован
13.01.2012, 07:27 3
Цитата Сообщение от alyam Посмотреть сообщение
подскажите как запомнить значения из выделенного диапазона?
Следует различать пару моментов:
запомнить выделенную область
или
запомнить значения ячеек выделенной области?
Если тебе нужно сиюминутное значение выделенных ячеек или их значение однозначно не меняется в течение сеанса работы, то способ от anvg подойдёт!
А если тебе нужно сохранить выделенную область, чтобы потом обращаться к значениям её ячеек,
то проще сохранить её в переменную
Visual Basic
1
2
dim myRange as range
set myRange=selection
и обращаться к текущим значениям myRange, как элементам двумерного массива (и не только)!
0
0 / 0 / 0
Регистрация: 18.04.2011
Сообщений: 12
13.01.2012, 09:39  [ТС] 4
Visual Basic
1
2
3
Dim myRange() As Variant
myRange = Selection.Value
MsgBox (myRange(1, 1))
если я выделяю всего одну ячейку, то не работает, выдает несоответствие типов. Работает, только с выделенным диапазоном, в котором несколько ячеек. как быть? аналогичное происходит и со вторым способом.

Добавлено через 11 минут
сорри. второй способ работает лучше. сейчас проверю все нюансы.
0
15145 / 6418 / 1731
Регистрация: 24.09.2011
Сообщений: 9,999
13.01.2012, 09:45 5
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
Sub bb()
Dim myRange(), x ' As Variant
x = Selection.Value
If IsArray(x) Then
    myRange = x
    Erase x 'необязательно
Else
    ReDim myRange(1 To 1, 1 To 1)
    myRange(1, 1) = x
End If
MsgBox myRange(1, 1)
End Sub
0
0 / 0 / 0
Регистрация: 18.04.2011
Сообщений: 12
13.01.2012, 09:59  [ТС] 6
я не пойму. почему при очищении выделенных ячеек myRange выдает пустые значения?

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
Dim myRange As Range
Dim i As Variant
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Set myRange = Selection
End Sub
 
Sub Worksheet_Change(ByVal Target As Range)
For Each i In myRange '
MsgBox (i)
Next '
End Sub
0
15145 / 6418 / 1731
Регистрация: 24.09.2011
Сообщений: 9,999
13.01.2012, 10:03 7
Потому что в этом варианте myRange - ссылка на объект-диапазон, а не массив значений.
0
0 / 0 / 0
Регистрация: 18.04.2011
Сообщений: 12
13.01.2012, 10:04  [ТС] 8
Цитата Сообщение от Казанский Посмотреть сообщение
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
Sub bb()
Dim myRange(), x ' As Variant
x = Selection.Value
If IsArray(x) Then
    myRange = x
    Erase x 'необязательно
Else
    ReDim myRange(1 To 1, 1 To 1)
    myRange(1, 1) = x
End If
MsgBox myRange(1, 1)
End Sub
твой вариант неудобен знаешь чем? тем, что когда я захочу использовать значения этого массива в программе, мне придется снова проверять массив это или нет.
0
15145 / 6418 / 1731
Регистрация: 24.09.2011
Сообщений: 9,999
13.01.2012, 10:07 9
Нет, это достаточно сделать один раз после считывания диапазона.
1
0 / 0 / 0
Регистрация: 18.04.2011
Сообщений: 12
13.01.2012, 10:41  [ТС] 10
да. ты прав. выглядит убого, но работает стабильно.
спасибо.
0
Заблокирован
13.01.2012, 11:40 11
Цитата Сообщение от alyam Посмотреть сообщение
выглядит убого
Чуть-чуть приукрасил (хотя бы от X с Erase ушли)
Visual Basic
1
2
3
4
5
6
7
Dim a()
If Selection.Count = 1 Then
  ReDim a(1 To 1, 1 To 1)
  a(1, 1) = Selection.Value
Else
  a = Selection.Value
End If
0
0 / 0 / 0
Регистрация: 18.04.2011
Сообщений: 12
13.01.2012, 12:37  [ТС] 12
я не об этом. сама идея переопределения переменной, для присваивания какого-либо значения выглядит убого.
0
15145 / 6418 / 1731
Регистрация: 24.09.2011
Сообщений: 9,999
13.01.2012, 13:01 13
Если бы Вы описали задачу, можно было бы предложить другие варианты.
Например, если задача предполагает работу с массивом только спомощью For Each, пределы индексов массива не имеют значения, и можно сделать проще:
Visual Basic
1
2
Dim a()
If Selection.Count = 1 Then a = array(Selection.Value) Else a = Selection.Value
Добавлено через 11 минут
Далее. В зависимости от задачи, бывает удобнее держать массив в переменной типа Variant. В этом случае доступ к элементам массива занимает больше времени, но зато можно копировать один массив в другой одной операцией присвоения, а не циклом. Пример тут: Возведение матрицы в степень, заданной массивом
0
13.01.2012, 13:01
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.01.2012, 13:01
Помогаю со студенческими работами здесь

Переход по ячейкам выделенного диапазона
Не могу понять систему. В диапазоне определил ячейки с числами. Переопределил диапазон. При ручном...

Найти максимум из выделенного диапазона
Нужно найти максимальное значение в ячейке из выделенного диапазона и закрасить ячейку каким-либо...

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

Не проходит сортировка по текстовому полю выделенного диапазона
не проходит сортировка по текстовому полю выделенного диапазона начиная от количества строк...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru