Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.04.2011, 11:02   #1
MIKE11IPME
Форумчанин
 
Регистрация: 03.05.2010
Сообщений: 159
По умолчанию Excel VBA

Задача стоит простая , выделить столбец нажать на созданную кнопку на листе и вывести результат вычислений
Вычисления сводятся к поиску максимального эл-та столбца и заменой всех кратных ему чисел столбца на их кв-ты
Суть вопроса как записать в одномерный массив выделенный нами столбец с данными и как вывести результат на тот же лист "книги" ?
Пытался писать только так и не понял как записать в массив
Есть вариант с определением диапазона ячеек (первая и последняя) , но пока приберегу его на потом =)
Заранее спасибо
Собственно вот что родил , но это не работает именно из-за неверной записи данных в массив =)
Код:
Private Sub CommandButton1_Click()

Dim Mas() As Byte
Dim p As Byte
p = Selection.Rows.Count
ReDim Mas(1 To p) As Byte
'Вот тут должно быть внесение данных в массив'
For i = 1 To p
 Mas(i) = Selection.Range.Rows(i)
 Next

Max = Mas(1)
For i = 1 To p - 1
 If Mas(i + 1) > Max Then Max = Mas(i + 1) Else Max = Max
Next
 
For i = 1 To p
Hug = Mas(i)
If Max Mod Hug = 0 Then Mas(i) = Hug * Hug
Next

End Sub

Последний раз редактировалось MIKE11IPME; 11.04.2011 в 12:10.
MIKE11IPME вне форума Ответить с цитированием
Старый 11.04.2011, 11:32   #2
MIKE11IPME
Форумчанин
 
Регистрация: 03.05.2010
Сообщений: 159
По умолчанию

И да Selection.Rows.Count эт мы случаем не диапазон получаем ?=)
или это все же число строк ?

Последний раз редактировалось MIKE11IPME; 11.04.2011 в 11:34.
MIKE11IPME вне форума Ответить с цитированием
Старый 11.04.2011, 12:13   #3
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

Selection - может быть что угодно, но если в этот момент отмечен диапазон - это диапазон

Selection.Rows - коллекция строк в диапазоне

Selection.Rows.Count - количество элементов в коллекции (строк в диапазоне)

Откройте в редакторе окно Locals, выполняйте свой макрос нажимая F8, следите за состоянием переменных, Вам многое станет понятно самостоятельно
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 11.04.2011, 12:26   #4
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Примерно так (всего 1 цикл, и то не по ячейкам, а внутри массива):
Код:
Private Sub CommandButton1_Click()
    Dim i As Long, Mas(), MaxValue As Double
    If Selection.Columns.Count > 1 Then Exit Sub
    If Selection.Cells.Count = 1 Then Exit Sub
    Mas = Selection.Value
    MaxValue = Application.Max(Application.Index(Mas, 0, 1))
    For i = 1 To UBound(Mas, 1)
        If Max Mod Mas(i, 1) = 0 Then Mas(i, 1) = Hug * Hug
    Next
    Selection.Value = Mas
End Sub
P.S. Совет: по возможности, не используйте имена переменных, совпадающих с зарезервированными в VBA Excel. Так, например, вместо используемой вами переменной "Max", надежнее использовать другую. Например, "MaxValue".
Чем шире угол зрения, тем он тупее.

Последний раз редактировалось SAS888; 11.04.2011 в 12:33. Причина: Добавлено.
SAS888 вне форума Ответить с цитированием
Старый 11.04.2011, 12:37   #5
MIKE11IPME
Форумчанин
 
Регистрация: 03.05.2010
Сообщений: 159
По умолчанию

Большущее спасибо =)
просто с синтаксисом VB не знаком
MIKE11IPME вне форума Ответить с цитированием
Старый 11.04.2011, 12:56   #6
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

и тут, видимо, опечатка
If Max Mod Mas(i, 1) = 0 Then Mas(i, 1) = Hug * Hug
заменить на
If MaxValue Mod Mas(i, 1) = 0 Then Mas(i, 1) = Hug * Hug

Собственно, Сережа детально разобрал эту ошибку сообщением выше))
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 11.04.2011, 13:18   #7
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Цитата:
и тут, видимо, опечатка
Да-да... Конечно... Извиняюсь. Спасибо, Игорь.
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
VBA Word,VBA Excel решить 2 задачи fafolo4ka Фриланс 6 05.03.2012 01:15
vba+excel Анна Рожкова Microsoft Office Excel 18 28.05.2010 21:41
VBA Excel PashaD Microsoft Office Excel 2 21.03.2010 18:47
Как запретить запуск программы на VBA Excel 2003 в Excel 2007 kovalevskivf Microsoft Office Excel 2 15.05.2009 16:47
Excel VBA fidot Microsoft Office Excel 1 28.12.2008 19:20