Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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


Донат для форума - использовать для поднятия настроения себе и модераторам

А ещё здесь можно купить рекламу за 25 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru

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

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

skype: ExcelVBA.ru
По умолчанию

Не совсем понял, как из цифр 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
Репутация: 196
По умолчанию

Я от усталости написал случайно не точно. На самом деле я хотел получить по цифре 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,838
Репутация: 1220

skype: ExcelVBA.ru
По умолчанию

Код:
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,174
Репутация: 1811

icq: 7934250
skype: i2x0,5
По умолчанию

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

диапазон всегда начинается с А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
Репутация: 196
По умолчанию

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

У меня еще проблема с тем, что я определяю данный диапазон для нескольких листов в цикле:
Код:
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,838
Репутация: 1220

skype: ExcelVBA.ru
По умолчанию

Код:
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
Репутация: 196
По умолчанию

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

icq: 64534666
По умолчанию Дайте совет какой движок сайта лучше купить?

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

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

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

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


19:53.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.