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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 02.07.2009, 22:34   #1
motorway
Участник клуба
 
Регистрация: 28.06.2009
Сообщений: 1,950
Стрелка Как объявить диапазон ячеек при известных границах

Как объявить диапазон ячеек при известных ограничивающих его столбце и строке в численном виде, чтобы можно было потом его использовать в цикле For Each?
Имеются цифры row, col, например 2, 4. Нужно получить в этом случае объект Range (A2:D4).
motorway вне форума Ответить с цитированием
Старый 03.07.2009, 03:02   #2
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Не совсем понял, как из цифр 2 и 4 получить диапазон A2:D4...
Код:
Sub test()
    Row = 2: col = 4
    Dim cell As Range, ra As Range

    Set ra = Range("a" & Row & ":d" & col) ' попробуйте так
    Set ra = Range([a2], Cells(Row, col)) ' или так
    Set ra = Range(Cells(Row, "A"), Cells(col, col)) ' ещё вариант

    For Each cell In ra.Cells
        ' обработка ячеек
        cell = Rnd: cell.Interior.ColorIndex = Rnd * 50
    Next cell
End Sub
EducatedFool вне форума Ответить с цитированием
Старый 03.07.2009, 16:05   #3
motorway
Участник клуба
 
Регистрация: 28.06.2009
Сообщений: 1,950
По умолчанию

Я от усталости написал случайно не точно. На самом деле я хотел получить по цифре 2 нижнюю границу для строки, а 4 - столбец D. То есть 8 ячеек: A1,A2,B1,B2,C1,C2,D1,D2.
Но мне нужно, чтобы само определялось, что за буква будет, т.е. необяз. все время D.

Кстати, вот еще есть вариант, но не работает проход по циклу:
Dim a As Range

a = Range(Cells(1, 1), Cells(2, 4))

For Each cell In a
MsgBox (cell.Text)
Next cell

Object variable or with block variable not set

Последний раз редактировалось motorway; 03.07.2009 в 16:10.
motorway вне форума Ответить с цитированием
Старый 03.07.2009, 16:19   #4
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Код:
Sub test()
    Dim a As Range, cell As Range
    Set a = Range(Cells(1, 1), Cells(2, 4))
    For Each cell In a
        MsgBox cell.Text
    Next cell
End Sub
В Вашем случае может получиться так:
Код:
Sub test1()
    Dim a As Range, cell As Range
    ro = 2: col = 4
    Set a = Range(Cells(1, 1), Cells(ro, col))
    For Each cell In a
        MsgBox cell.Text
    Next cell
End Sub
Код:
Sub test2()
    Dim a As Range, cell As Range
    ro = 2: col = 4
    Set a = Cells(1, 1).Resize(ro, col)
    For Each cell In a
        MsgBox cell.Text
    Next cell
End Sub

Sub test3()
    ro = 2: col = 4
    For Each cell In Cells(1, 1).Resize(ro, col)
        MsgBox cell.Text
    Next cell
End Sub

Последний раз редактировалось EducatedFool; 03.07.2009 в 16:22.
EducatedFool вне форума Ответить с цитированием
Старый 03.07.2009, 16:24   #5
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

теперь многие, кто тут бывает в непонятках "что, собственно, нужно получить?"

диапазон всегда начинается с А1 а заканчивается рядом row и колонкой col? Так?

приведено 3 способа получения нужного диапазона и приведен цикл For Each, который обходит все ячейки диапазона (каждой из ячеек присваивает случайное значение и закрашивает случайным цветом). 2-й из приведенных способ никак не ссылается на колонку D.

еще вариант:
Set ra = Range(cells(1,1), cells(row, col))
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 03.07.2009, 16:28   #6
motorway
Участник клуба
 
Регистрация: 28.06.2009
Сообщений: 1,950
По умолчанию

Для моего случая всегда с A1, но может быть и типа I13:J16
motorway вне форума Ответить с цитированием
Старый 03.07.2009, 16:57   #7
motorway
Участник клуба
 
Регистрация: 28.06.2009
Сообщений: 1,950
По умолчанию

У меня еще проблема с тем, что я определяю данный диапазон для нескольких листов в цикле:
Код:
For i = 1 To (Worksheets.Count - 1)
    Dim TRange As Range, cell As Range
    Set TRange = Range(Worksheets(i).Cells(1, 1), Cells(Worksheets(i).Cells.SpecialCells(xlCellTypeLastCell).Row, Worksheets(i).Cells.SpecialCells(xlCellTypeLastCell).Column))
    For Each cell In TRange
....
Что-то я запутался, как правильно в цикле по листам кроме последнего объявить такой диапазон, где используются ячейки листа от A1 до нижней правой используемой границы.

Method Range of object _Global Failed
motorway вне форума Ответить с цитированием
Старый 03.07.2009, 17:14   #8
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Код:
Sub test4()
    Dim sh As Worksheet, TRange As Range, cell As Range

    For i = 1 To (Worksheets.Count - 1)
        Set sh = Worksheets(i)
        Set TRange = Range(sh.Cells(1, 1), sh.Cells.SpecialCells(xlCellTypeLastCell))

        For Each cell In TRange
            MsgBox cell.Text
        Next cell
    Next i
End Sub

Sub test5()
    Dim TRange As Range, cell As Range
    For i = 1 To (Worksheets.Count - 1)
        For Each cell In Worksheets(i).UsedRange.Cells
            MsgBox cell.Text, vbInformation, _
                   "Ячейка " & cell.Address & " на листе " & Worksheets(i).Name
        Next cell
    Next i
End Sub
EducatedFool вне форума Ответить с цитированием
Старый 03.07.2009, 17:30   #9
motorway
Участник клуба
 
Регистрация: 28.06.2009
Сообщений: 1,950
По умолчанию

Спасибо. Больше подходит первый вариант, т.к. в варианте с UsedRange пустые ячейки игнорируются, а мне нужно их тоже передавать, поэтому я и отказался от UsedRange.
motorway вне форума Ответить с цитированием
Старый 29.11.2009, 03:08   #10
nikolainikitin
Новичок
Джуниор
 
Аватар для nikolainikitin
 
Регистрация: 29.11.2009
Сообщений: 1
По умолчанию Дайте совет какой движок сайта лучше купить?

Здравствуйте, Уважаемые коллеги.
Извините что не совсем в тему сайта www.programmersforum.ru обращаюсь,
давно хочу открыть форум про пневматическое оружие, но никак с движком форума определиться не могу.
Нужен ведь движок форума с нормальной защитой от спама, а то мой друг себе форум установил и его заполнили спамом уже через 2 недели.
А Вы какой движок сайта на www.programmersforum.ru используете? Какой скрипт форума лучше выбрать для открытия форума про пневматическое оружие?
Буду рад любому совету, в заранее спасибо.

С уважением Николай.
nikolainikitin вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Бейсик. Как передать в формулу диапазон ячеек? Наталья Ивановна Помощь студентам 2 02.06.2009 23:36
как объявить синус? pinya86 Microsoft Office Excel 4 13.05.2009 03:05
Добавление данных в диапазон ячеек denneo Microsoft Office Excel 1 08.02.2009 09:05
Как написать в коде чтобы диапазон А копировался как значение в диапазон В. Dorvir Microsoft Office Excel 12 23.05.2008 22:11