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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 02.03.2009, 13:41   #1
eto
Пользователь
 
Регистрация: 24.02.2009
Сообщений: 29
Вопрос задать диапазон используя значение переменной

Добрый день, уважаемые знатоки.
Подскажите, пожалуйста, как:
1. присвоить переменной значение из ячейки, допустим, A1
2. задать вот такой диапазон:

Код:
x = 5 ' на самом деле, значение из A1
Range("A12:G12").Select
Selection.AutoFill Destination:=Range("A12:G[12+x]"), Type:=xlFillDefault
eto вне форума Ответить с цитированием
Старый 02.03.2009, 14:03   #2
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

Selection.AutoFill Destination:=Range(range("A12"), range("G12").offset x)
или
Selection.AutoFill Destination:=Range(cells(12,1), cells(12+x,7))
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 02.03.2009, 14:11   #3
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Можно и покороче:

[A12:G12].AutoFill [A12:G12].Resize([a1] + 1)
EducatedFool вне форума Ответить с цитированием
Старый 02.03.2009, 16:35   #4
eto
Пользователь
 
Регистрация: 24.02.2009
Сообщений: 29
По умолчанию

спасибо большое за ответы, почти получилось )

а как задать переменную не напрямую n=a1 тоже формулой типа n=[А; 1+y]?
и возможно ли это в варианте "покороче"?
eto вне форума Ответить с цитированием
Старый 02.03.2009, 16:40   #5
eto
Пользователь
 
Регистрация: 24.02.2009
Сообщений: 29
По умолчанию

Цитата:
Сообщение от eto Посмотреть сообщение
спасибо большое за ответы, почти получилось )

а как задать переменную не напрямую n=a1 тоже формулой типа n=[А; 1+y]?
и возможно ли это в варианте "покороче"?
кажется, глупость какую-то спросила.. сорри, видимо, на таким образом сформулированный вопрос подходит второй вариант кода, приведенный IgorGO.

меня сейчас скорее интересует, как именно задать переменную n=[А; 1+y], чтобы брать данные из разных ячеек
eto вне форума Ответить с цитированием
Старый 02.03.2009, 16:47   #6
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Как-то так: (помимо этого, есть ещё много способов обратиться к ячейке)
Код:
Sub test()
    ' как именно задать переменную n=[А; 1+y], чтобы брать данные из разных ячеек
    
    n = [d5] ' значение ячейки D5
    n = [d5].Offset(2) ' значение ячейки D7 ' на 2 строки вниз
    n = [d5].Offset(, 3) ' значение ячейки G5 ' на 3 столбца вправо
    n = [d5].Offset(2, -1) ' значение ячейки C7 '  на 2 строки вниз и на 1 столбец влево
    
    n = Cells(2, 4) ' значение ячейки D2
    n = Cells(3, "G") ' значение ячейки G3
    n = Range("d2") ' значение ячейки D2
    [a1] = 5
    n = Range("d" & [a1]) ' значение ячейки D5, если в ячейке A1 находится число 5
    n = Cells([a1], "G") ' значение ячейки G5, если в ячейке A1 находится число 5
    
    n = Cells(2, 4).Offset(2, -1) ' значение ячейки С4
End Sub
Опишите, что должен делать Ваш макрос, и мы посоветуем наиболее оптимальный код.

Последний раз редактировалось EducatedFool; 02.03.2009 в 16:52.
EducatedFool вне форума Ответить с цитированием
Старый 02.03.2009, 18:31   #7
eto
Пользователь
 
Регистрация: 24.02.2009
Сообщений: 29
По умолчанию

макрос делает кучу всего, у меня с описанием глобального запроса, как Вы могли убедиться, сегодня беда

но спасибо за развернутый ответ, он мне помог даже несколько задач решить

надеюсь, сможете помочь еще с такой задачей - в ячейку нужно вставить формулу, но в ней тоже присутствует переменная.. или может быть можно иначе?

ActiveCell.FormulaR1C1 = "=SUM(R[2]C[-4]:R[2+m]C[-4])"

собственно, в предыдущем куске кода копируются данные из одной строки на несколько вниз, а в эту ячеку должна встать сумма значений в столбце G по новоиспеченным строкам
eto вне форума Ответить с цитированием
Старый 02.03.2009, 18:37   #8
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Попробуйте так:
Код:
    m = 3
    ActiveCell.FormulaR1C1 = "=sum(R[2]C[-4]:R[" & (2 + m) & "]C[-4])"
Лучше не обращаться к активной ячейке (ActiveCell), а указывать конкретную ячейку.
EducatedFool вне форума Ответить с цитированием
Старый 03.03.2009, 16:18   #9
eto
Пользователь
 
Регистрация: 24.02.2009
Сообщений: 29
По умолчанию

спасибо, получилось.

моё чувство прекрасного очень страдает от того, что не владею инструментом в полной мере, чтобы отказаться от использования обращения ActiveCell, но есть над чем работать

а вот еще вопрос, с которым никак не могу справиться сама:

Код:
Cells(Rows.Count, "A").End(xlUp).Offset(3).Select
i = ActiveCell.Row     ‘допустим, 10

‘далее идёт вставка, не влияющая на i

‘Selection.PasteSpecial Paste:=xlPasteColumnWidths, Operation:=xlNone, _
    SkipBlanks:=False, Transpose:=False
‘ActiveSheet.Paste
‘Selection.EntireRow.Hidden = False

Cells(i + 2, 7).Select
ActiveCell.FormulaR1C1 = "=RC[-4]/R[" & (i) & "]C7*RC[-1]*R[" & (i) & "]C4"

видим в ячейке G12:

=C12/$G22*F12*$D22 ‘(при чем для ячейки G21 уже =C21/$G40*F21*$D40)

‘далее кусок цикла
НО! надо чтобы в ячейке G12 было:

=C12/$G$10*F12*$D$10

и в других соответственно формула правильно прописывалась.
не пойму, почему вставляется 22 и 40, хотя в данном случае д.б.,соответственно, 10 и 19..
eto вне форума Ответить с цитированием
Старый 03.03.2009, 16:28   #10
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Цитата:
не пойму, почему вставляется 22 и 40, хотя в данном случае д.б.,соответственно, 10 и 19..
Я тоже не пойму

Больше всего впечатляют строки типа
Цитата:
‘далее кусок цикла
Прикрепите файл, а то мы будем писать этот макрос ещё полгода.
Подробно объясните, что должен делать макрос.

И результат не заставит себя долго ждать
EducatedFool вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Функция не меняет значение переменной.... DoHJICyaH Общие вопросы C/C++ 1 02.11.2008 20:10
задать значение переменной в только что макросом открытой книге tolikman Microsoft Office Excel 2 17.10.2008 16:35
как получить значение переменной smoke888 PHP 3 20.06.2008 02:11
Как написать в коде чтобы диапазон А копировался как значение в диапазон В. Dorvir Microsoft Office Excel 12 23.05.2008 22:11
Как получить значение системной переменной в С++ PersonaGrata Общие вопросы C/C++ 2 29.02.2008 22:14