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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 02.08.2012, 18:38   #1
hziben
 
Регистрация: 05.06.2012
Сообщений: 7
По умолчанию Цикл сравнения и действие

Здравствуйте. Начал мучиться с вба совсем недавно. Пока кое-как освоил юзер-форму для заполнения данных (кстати, возможно ли делать древовидные списки. скажем выбрал в списке 1 какую-то категорию, а список 2 стал соответствовать подсписку из этой категории)
Пишу в познавательных целях примитивную игру в экселе, и нужно с помощью макроса выполнить действие.
Макрос должен выполнять действие

Calculate

пока ячейка Н3

Н3=0
станет равной нулю.

После чего он должен сделать так

Код:
    Range("A4:D4").Select
    Selection.Copy
    Range("A5:D5").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
т.е. если правильно записалось, скопировать первый диапазон и вставить его как цифровое значение на ячейку ниже.

Конец цикла
и макроса.

Т.е. в чем смыл. Имеется генератор случайных чисел. Его нужно обновлять пока он не будет удовлетворять определенным критериям. Для корректности работа зафиксировать результат копипастом в соседние ячейки, после чего приступаем к игре.
hziben вне форума Ответить с цитированием
Старый 02.08.2012, 18:56   #2
kuklp
Участник клуба
 
Регистрация: 02.05.2010
Сообщений: 1,390
По умолчанию

Курим справку по while...wend, do...loop.
Убираем селекты и лишнее:
Range("A4:D4").Copy
Range("A5:D5").PasteSpecial xlPasteValues
mailto: kuklp60@gmail.com, ящики для благодарностей:
WM Z206653985942, R334086032478, U238399322728
kuklp вне форума Ответить с цитированием
Старый 02.08.2012, 20:22   #3
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Ещё проще:
Код:
Range("A5:D5").Value = Range("A4:D4").Value
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 02.08.2012, 22:36   #4
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Ещё короче:
Код:
[A5:D5].Value =[A4:D4].Value
EducatedFool вне форума Ответить с цитированием
Старый 02.08.2012, 22:43   #5
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Такой вариант тоже рассматривал
Но говорят, что это хуже, т.к. работает дольше.
Хотя сам в своих кодах для себя пишу именно так, т.к. сильно ленивый
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 02.08.2012, 22:58   #6
Казанский
Старожил
 
Аватар для Казанский
 
Регистрация: 31.12.2010
Сообщений: 2,133
По умолчанию

> возможно ли делать древовидные списки. скажем выбрал в списке 1 какую-то категорию, а список 2 стал соответствовать подсписку из этой категории

Это один из самых популярных вопросов:
http://yandex.ru/yandsearch?text=связанные+списки+excel
exceleved@yandex.ru Яндекс.Деньги: 410011500007619
Казанский вне форума Ответить с цитированием
Старый 03.08.2012, 12:43   #7
hziben
 
Регистрация: 05.06.2012
Сообщений: 7
По умолчанию

Спасибо за помощь. Покурил указанные циклы и вот что вышло
Код:
Sub Èãðà1()
'
' Èãðà1 Ìàêðîñ
'

'
Do
    Calculate
Loop While H3 > 0
    
Range("A4:D4").Copy
Range("A5:D5").PasteSpecial xlPasteValues
 
 End Sub
Ошибок не выдает, но работает не так как хочется. Подозреваю что причина тому некорректная ссылка на ячейку Н3. Посмотрел несколько страниц гугла, но ни у кого, нормальных ссылок на ячейки не видел. везде i и прочие присвоенные операторы. Подскажите как правильней.

п.с. решил посмотреть что будет если =0. как я понял, цикл прекращается когда условие не выполняется (ложь). Сделал наоборот. Как начало оно перебирать. И не останавливается. Хотя вижу, нужные условия проскакивают. Почему он не останавливается? Ведь все тоже самое, только условие обратное данному.

Последний раз редактировалось hziben; 03.08.2012 в 12:50.
hziben вне форума Ответить с цитированием
Старый 03.08.2012, 14:33   #8
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Loop While H3 > 0
переведу - цикл пока переменная H3 больше нуля.
Но она не будет больше нуля.
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 03.08.2012, 15:15   #9
hziben
 
Регистрация: 05.06.2012
Сообщений: 7
Хорошо

Код:
Do
    Calculate
Loop While Range("H3") > 0
    
Range("A4:D4").Copy
Range("A5:D5").PasteSpecial xlPasteValues
Сделал так. Выполнял макрос много, некорректной работы не заметил. Спасибо за отклик)
hziben вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Операторы сравнения krugolet Общие вопросы C/C++ 4 30.03.2012 21:05
Цикл по времени - Как сделать так чтобы цикл выполнялся к примеру 10 секунд ? Anarki Общие вопросы C/C++ 3 13.11.2009 19:23
Цикл с предусловием. ( цикл while) Цикл с постусловием. (цикл repeat ... until) Mr.User Помощь студентам 9 23.11.2007 01:34