Excel VB: циклы, переменные, ячейки…

Программирование на Visual Basic for Applications
voice
Начинающий
Начинающий
 
Сообщения: 1
Зарегистрирован: 26.12.2006 (Вт) 11:57

Excel VB: циклы, переменные, ячейки…

Сообщение voice » 26.12.2006 (Вт) 11:59

Если кто в курсе, - помогите, пожалуйста, решить проблему:

Мне нужно написать макрос для Excel. По ходу программы каждая ячейка одного столбца (таблицы Excel) должна проходить проверку по условиям (всего ячеек 2500).
Я хотел сделать цикл. То есть, к примеру, название ячейки Q1… заменить единицу на переменную (скажем X… т.е. написать QX), и прогнать её циклом for X=X+1 и т.д.
Но программа это не переваривает…

Эта проблема всплывает и в других местах программы… Например, каждую шестую строку Excel таблицы разложить в столбец…

Если кто знает как это можно уладить, - пожалуйста, подскажите…

inq
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 185
Зарегистрирован: 12.04.2006 (Ср) 7:50
Откуда: 78

Сообщение inq » 26.12.2006 (Вт) 12:06

Я хотел сделать цикл. То есть, к примеру, название ячейки Q1… заменить единицу на переменную (скажем X… т.е. написать QX), и прогнать её циклом for X=X+1


cells(X, 17)
подписи нет и не будет

rok
Новичок
Новичок
 
Сообщения: 49
Зарегистрирован: 18.06.2005 (Сб) 12:45

Сообщение rok » 26.12.2006 (Вт) 15:04

Код: Выделить всё
Range("Q1").Activate
For a = 1 To ActiveCell.CurrentRegion.Count
Debug.Print Range("A" & a).value
Next

Чудовище под кроватью
Обычный пользователь
Обычный пользователь
 
Сообщения: 88
Зарегистрирован: 27.11.2006 (Пн) 14:46
Откуда: А из ника не ясно?

Сообщение Чудовище под кроватью » 27.12.2006 (Ср) 7:02

rok писал(а):
Код: Выделить всё
Range("Q1").Activate
For a = 1 To ActiveCell.CurrentRegion.Count
Debug.Print Range("A" & a).value
Next

:?: и что это должно делать?
У-у-у!!

Nicky
Постоялец
Постоялец
 
Сообщения: 519
Зарегистрирован: 12.08.2004 (Чт) 12:14

Сообщение Nicky » 27.12.2006 (Ср) 10:01

rok написал все, что знал

rok
Новичок
Новичок
 
Сообщения: 49
Зарегистрирован: 18.06.2005 (Сб) 12:45

Сообщение rok » 28.12.2006 (Чт) 12:25

Между For and Next все, что Вы напишете-например условие для проверки и соответствующие действия, а вобще проверять надо при вводе-зачем участие в вычислениях не верных данных (не факт, что по результату видно ошибочность данных)?

Чудовище под кроватью
Обычный пользователь
Обычный пользователь
 
Сообщения: 88
Зарегистрирован: 27.11.2006 (Пн) 14:46
Откуда: А из ника не ясно?

Сообщение Чудовище под кроватью » 28.12.2006 (Чт) 13:44

rok писал(а):Между For and Next все, что Вы напишете

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

Какая проверка? Какие данные? Ничего не понимаю :( Речь же вроде о простейшем цикле, где в цикле перебираются строки.
Зачем, например,
Range("Q1").Activate
For a = 1 To ActiveCell.CurrentRegion.Count
Когда и можно и без активации и в одну строку:
For a = 1 To Range("Q1").CurrentRegion.Count
У-у-у!!

rok
Новичок
Новичок
 
Сообщения: 49
Зарегистрирован: 18.06.2005 (Сб) 12:45

Сообщение rok » 28.12.2006 (Чт) 14:56

Конечно можно и одной строкой-тогда надо выделять ячейку в столбце Q-а так из любого места листа.Данные надо проверять при заполнении столбца, а не после того когда набралось несколько тысяч значений в том числе и не допустимых, результаты которых уже где-то используются.
А вообще VBA по интернету это круто(читайте буквари и морщите лоб).Меня лично давит жаба насчет бабок за net. Удачи. :D

Чудовище под кроватью
Обычный пользователь
Обычный пользователь
 
Сообщения: 88
Зарегистрирован: 27.11.2006 (Пн) 14:46
Откуда: А из ника не ясно?

Сообщение Чудовище под кроватью » 28.12.2006 (Чт) 15:11

rok писал(а):Конечно можно и одной строкой-тогда надо выделять ячейку в столбце Q-а так из любого места листа.

Чтобы проверить любую ячейку любого листа на соответствие условию, просто обращаемся к этой ячейке Worksheets().Range() и дальше - условие. Зачем её выделять, да еще и активировать?
Данные надо проверять при заполнении столбца

А это делается с помощью события Worksheet_Change (а то и просто Данные -> Проверка), а приведенная конструкция будет запускаться только когда сам её запустишь.
А вообще VBA по интернету это круто(читайте буквари и морщите лоб).... . Удачи. :D

Взаимно.
У-у-у!!

inq
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 185
Зарегистрирован: 12.04.2006 (Ср) 7:50
Откуда: 78

Сообщение inq » 28.12.2006 (Чт) 15:54

Поток сознания тов. rok просто поражает : )
подписи нет и не будет

rok
Новичок
Новичок
 
Сообщения: 49
Зарегистрирован: 18.06.2005 (Сб) 12:45

Сообщение rok » 28.12.2006 (Чт) 16:57

Ребята,ну из-за чего весь сыр-бор, как ввести данные в ячейку не выделив ее ?
и какая принципиальная разница между Worksheets().Range() и range().activate(в обоих вариантах по 16 символов). А насчет проверки-ну не понимаю зачем проверять тысячи записей не понятно при каком по счету Worksheet_Change, если это можно делать при изменении ячейки в конкретном столбце.
А что касается второго вопроса то имеется 256 столбцов, что делать если строк больше 256*6 ?

Nicky
Постоялец
Постоялец
 
Сообщения: 519
Зарегистрирован: 12.08.2004 (Чт) 12:14

Сообщение Nicky » 29.12.2006 (Пт) 8:45

rok писал(а):Ребята,ну из-за чего весь сыр-бор, как ввести данные в ячейку не выделив ее ?
Например, так: cells(10,10) = "Большой привет"
rok писал(а):и какая принципиальная разница между Worksheets().Range() и range().activate
RTFM
rok писал(а):(в обоих вариантах по 16 символов).
LOL
rok писал(а):А насчет проверки-ну не понимаю зачем проверять тысячи записей не понятно при каком по счету Worksheet_Change, если это можно делать при изменении ячейки в конкретном столбце.
Вопрос на засыпку: ты открыл книгу. Как с помощью Worksheet_Change проверить диапазон на валидность?

Чудовище под кроватью
Обычный пользователь
Обычный пользователь
 
Сообщения: 88
Зарегистрирован: 27.11.2006 (Пн) 14:46
Откуда: А из ника не ясно?

Сообщение Чудовище под кроватью » 29.12.2006 (Пт) 8:53

inq писал(а):Поток сознания тов. rok просто поражает : )

Да, забавный персонаж. Меня напоминает... лет 5-10 назад. :)

2 rok:
А насчет проверки-ну не понимаю зачем проверять тысячи записей не понятно при каком по счету Worksheet_Change

Событие Worksheet_Change вызывается с параметром Item (тип Range), указывающим, какой диапазон изменился :D .

ну из-за чего весь сыр-бор

Я всего лишь попросил тебя написать комментарий к каждой строчке кода. - Что делает и зачем? Просто как-то всегда обходился без CurrentRegion, вот и любопытно, а зачем оно тут вообще используется.
А ты мне про проверку начал рассказывать :cry:
У-у-у!!


Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот и гости: 98

    TopList