Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.81/313: Рейтинг темы: голосов - 313, средняя оценка - 4.81
1 / 1 / 0
Регистрация: 18.01.2011
Сообщений: 15

Как указать адрес ячейки через переменную

15.06.2012, 01:18. Показов 66253. Ответов 31
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Нужно в ("C5:C116") вместо С116 вставить переменну i, которая обозначает ячейку. Подскажите пожалуйста как это реализовать?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
15.06.2012, 01:18
Ответы с готовыми решениями:

Адрес ячейки через переменную
Добрый день! Несколько раз перечитал аналогичные темы, но рецепты не помогали, либо мозгов не хватало. Уважаемые жители форума! ...

Как сохранить в переменную адрес активной ячейки, а затем эту ячейку выделить?
Физический смысл такой: Когда пользователь клацает по листочкам, активируется макрос, закрепляющий шапки, и в следствии этого выделяется...

Можно ли указать адрес ячейки, путем выделения её на листе?
Привет! Задача такая: Программа должна переносить данные с одной ячейки в другую. Т.е. выбираем ячейку, из которой хотим перенести...

31
 Аватар для Alex77755
11525 / 3812 / 683
Регистрация: 13.02.2009
Сообщений: 11,229
15.06.2012, 01:37
Visual Basic
1
"C5:" & i
Подразумевается, что в i есть и буква
1
1 / 1 / 0
Регистрация: 18.01.2011
Сообщений: 15
15.06.2012, 02:05  [ТС]
я сам запутался =(
нужно что бы макрос работал только для тех ячеек, где есть значение. Я хотел следующим кодом определить последнюю ячейку, вывести адрес ячейки в переменную i. В коде указать i как границу для макроса.


Visual Basic
1
2
3
4
Dim lLastRow As Long
  Dim lLastCol As Long
     lLastRow = Cells(Rows.Count, 3).End(xlUp).Row
      lLastCol = Cells(3, Columns.Count).End(xlToLeft).Column
Подскажите пожалуйста, как это реализовать?

Добавлено через 10 минут
Visual Basic
1
Selection.AutoFill Destination:=Range("C5:" & lLastRow, lLastCol), Type:=xlFillDefault
вот тут выдает ошибку Method 'Range' of object' _Global' Failed
0
призрак
 Аватар для ikki
3266 / 894 / 119
Регистрация: 11.05.2012
Сообщений: 1,702
Записей в блоге: 2
15.06.2012, 04:51
Visual Basic
1
Range("C5", Cells(lLastRow, lLastCol))
1
369 / 78 / 6
Регистрация: 23.05.2012
Сообщений: 232
15.06.2012, 08:35
Цитата Сообщение от nnndaniil Посмотреть сообщение
нужно что бы макрос работал только для тех ячеек, где есть значение. Я хотел следующим кодом определить последнюю ячейку, вывести адрес ячейки в переменную i. В коде указать i как границу для макроса.
Если строки с данными идут без разрывов внутри, то я обычно пользую:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Public Function Разрыв(Лист, КонтрСтолбец, Optional СоСтроки As Integer)
'функция просматривает ячейки КонтрСтолбца и возвращает номер
'строки в которой найдена пустая ячейка (своеобразный EOF).
'Можно "искать" разрыв, начиная СоСтроки, иначе с первой
  Dim Строка  As Integer
  With Worksheets(Лист)
    If СоСтроки = 0 Then
        Строка = 1
    Else
        Строка = СоСтроки
    End If
 
    Do While .Cells(Строка, КонтрСтолбец).Value <> ""
        Разрыв = Строка
        Строка = Строка + 1
    Loop
  End With
End Function
Понятно что таким же образом, модифицировав макрос, можно найти крайний столбец.
Их пересечение даст крайнюю ячейку
1
735 / 203 / 11
Регистрация: 23.06.2011
Сообщений: 440
15.06.2012, 10:07
Range(Cells(i0, j0), Cells(i1,j1))
Где
i0 - номер строки левой верхней ячейки диапазона,
j0 - Номер столбца левой верхней ячейки диапазона,
i1 - номер строки правой нижней ячейки диапазона,
j1 - номер столбца правой нижней ячейки диапазона.
1
2619 / 549 / 109
Регистрация: 21.03.2012
Сообщений: 1,051
15.06.2012, 10:26
Цитата Сообщение от skol13 Посмотреть сообщение
...функция просматривает ячейки КонтрСтолбца и возвращает номер строки в которой найдена пустая ячейка (своеобразный EOF)...
А разве не проще для этой цели использовать метод SpecialCells?
Пример:
Visual Basic
1
Worksheets(1).Columns(1).Cells.SpecialCells(xlCellTypeBlanks).Item(1).Row
1
369 / 78 / 6
Регистрация: 23.05.2012
Сообщений: 232
15.06.2012, 10:47
Цитата Сообщение от Dmitrii Посмотреть сообщение
А разве не проще для этой цели использовать метод SpecialCells?
А если у вас данные идут не с первой строки?
Например несколько строк пропущенных, потом что-то типа шапки таблицы, в которой тоже не все ячейки заполнены?
Какую строку вернет ваш метод?
Правильно - первую строку в которой есть пустая ячейка в столбце поиска.
Но она будет далеко не последняя из строк с данными.

Добавлено через 12 минут
вообще конечно способов может быть туча и разных.
Который и как применить - все зависит от конкретных условий.
ТС дана куча ответов на его вопрос - что нибудь да пригодится
1
200 / 98 / 2
Регистрация: 24.09.2011
Сообщений: 261
15.06.2012, 10:55
Цитата Сообщение от nnndaniil Посмотреть сообщение
я сам запутался =(
нужно что бы макрос работал только для тех ячеек, где есть значение.
я всегда делал так:

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
With ОбластьТипаRange
Dim obLast as Range, obCurr as Range
set obLast = .Find("*", searchdirection:=xlPrevious)
if Not obLast is nothing then
set obCurr = obLast
do
set obCurr = .Find("*", after:=obCurr)
Call ОбработкаНайденнойЯчейки(obCurr)
loop obCurr.Address = obLast.Address
endif
end with
Там возникают проблемы, только если по ходу обработки удаляешь или вставляешь ячейки. Не помню этих тонкостей, но если кому надо будет...

Не по теме:

как тут в коде VB вставлять отступы? тэг[INDENT] не работает =/

1
2619 / 549 / 109
Регистрация: 21.03.2012
Сообщений: 1,051
15.06.2012, 10:58
skol13, моя реплика относится не к задаче автора темы, а к Вашей функции.
Цитата Сообщение от skol13 Посмотреть сообщение
А если у вас данные идут не с первой строки?..
Да ведь ничего же не мешает задать вместо целого столбца нужный диапазон. В функции-то Вы его задаёте, используя переменную СоСтроки.
Visual Basic
1
Worksheets(1).Range(Cells(СоСтроки, 1), Cells(65536, 1)).Cells.SpecialCells(xlCellTypeBlanks).Item(1).Row
1
369 / 78 / 6
Регистрация: 23.05.2012
Сообщений: 232
15.06.2012, 11:02
Цитата Сообщение от sulfur Посмотреть сообщение
Не по теме:
как тут в коде VB вставлять отступы? тэг[INDENT] не работает =/

Не по теме:

Я просто из макроса копирую код - все с отступами получается.
Правда я табулятором отступы в макросе привык делать - с пробелами может и не выходит - не знаю



Добавлено через 2 минуты
Цитата Сообщение от Dmitrii Посмотреть сообщение
Да ведь ничего же не мешает задать вместо целого столбца нужный диапазон.
Ну так функция то была написана или может быть даже откуда то выдернута в непонятно каком забытом году
Багаж знаний то растет.
А сейчас просто по привычке тащу ее из проекта в проект
1
200 / 98 / 2
Регистрация: 24.09.2011
Сообщений: 261
15.06.2012, 11:04
хотя со SpecialCells проще, оказывается =)
1
1 / 1 / 0
Регистрация: 18.01.2011
Сообщений: 15
15.06.2012, 12:59  [ТС]
Цитата Сообщение от Gibboustooth Посмотреть сообщение
Range(Cells(i0, j0), Cells(i1,j1))
Решил сделать по Вашему примеру, но теперь мне выдает ошибку в строке Selection.AutoFill Destination.
Вот собственно весь код, мне нужно до последней ячейки, в которой есть данные, столбца С- вставить формулу.

Visual Basic
1
2
3
4
5
6
7
8
Range("C5").Select
    ActiveCell.FormulaR1C1 = "=++RC[2]/RC[1]"
    Range("C5").Select
    
    Selection.AutoFill Destination:=Range(Cells(i5, j3), Cells(i200, j3)), Type:=xlFillDefault
    
    Range("C5:C200").Select
    ActiveWindow.SmallScroll Down:=200
0
735 / 203 / 11
Регистрация: 23.06.2011
Сообщений: 440
15.06.2012, 13:16
Цитата Сообщение от nnndaniil Посмотреть сообщение
Решил сделать по Вашему примеру, но теперь мне выдает ошибку в строке Selection.AutoFill Destination.
i и j перед числами не надо ставить. "0" и "1" в моих примерах - просто индексы. Надо было отформатировать:

Range(Cells(i0, j0), Cells(i1,j1))


Извинияюсь
1
1 / 1 / 0
Регистрация: 18.01.2011
Сообщений: 15
15.06.2012, 13:50  [ТС]
Цитата Сообщение от Gibboustooth Посмотреть сообщение
i и j перед числами не надо ставить. "0" и "1" в моих примерах - просто индексы. Надо было отформатировать:

Range(Cells(i0, j0), Cells(i1,j1))


Извинияюсь
Поставил, все заработало, спасибо!
Но я рассчитывал на другой результат, что в этом диапазоне, он будет искать последнюю заполненную ячейку и вставлять формулу только до последней заполненной ячейки, а не для всего диапазона.
Подскажите пожалуйста, как это можно реализовать?
0
735 / 203 / 11
Регистрация: 23.06.2011
Сообщений: 440
15.06.2012, 14:25
Цитата Сообщение от nnndaniil Посмотреть сообщение
Но я рассчитывал на другой результат, что в этом диапазоне, он будет искать последнюю заполненную ячейку и вставлять формулу только до последней заполненной ячейки, а не для всего диапазона.
Подскажите пожалуйста, как это можно реализовать?
выбор последней заполненной ячейки на листе:
Visual Basic
1
Cells.Find("*", , , , xlByRows, xlPrevious)

Если нужно найти последнюю ячейку в определенном столбце:
Visual Basic
1
Columns(i).Find("*", , , , xlByRows, xlPrevious)
где i - номер столбца.

В вашем случае код будет выглядеть так:
Visual Basic
1
Selection.AutoFill Destination:=Range(Cells(5, 3), Columns(3).Find("*", , , , xlByRows, xlPrevious)), Type:=xlFillDefault
2
1 / 1 / 0
Регистрация: 18.01.2011
Сообщений: 15
15.06.2012, 14:42  [ТС]
Цитата Сообщение от Gibboustooth Посмотреть сообщение
В вашем случае код будет выглядеть так:
Visual Basic
1
Selection.AutoFill Destination:=Range(Cells(5, 3), Columns(3).Find("*", , , , xlByRows, xlPrevious)), Type:=xlFillDefault

Теперь на этой строчке
Visual Basic
1
Selection.AutoFill Destination:=
выдает ошибку, что метод AutoFill из класса Range завершен не верно.

Код сейчас такой:
Visual Basic
1
2
3
4
5
 Range("C5").Select
    ActiveCell.FormulaR1C1 = "=++RC[2]/RC[1]"
    Range("C5").Select
    Selection.AutoFill Destination:=Range(Cells(5, 3), Columns(3).Find("*", , , , xlByRows, xlPrevious)), Type:=xlFillDefault
Range("C5:C150").Select
В чем может быть ошибка?
0
призрак
 Аватар для ikki
3266 / 894 / 119
Регистрация: 11.05.2012
Сообщений: 1,702
Записей в блоге: 2
15.06.2012, 15:18
такую ошибку может выдавать только в одном случае - если Selection совпадает с Destination
конкретно для Вашего случая - все ячейки в столбце C ниже C5 - пустые.
2
1 / 1 / 0
Регистрация: 18.01.2011
Сообщений: 15
15.06.2012, 15:52  [ТС]
Цитата Сообщение от ikki Посмотреть сообщение
такую ошибку может выдавать только в одном случае - если Selection совпадает с Destination
конкретно для Вашего случая - все ячейки в столбце C ниже C5 - пустые.
Точно!! Извините меня, за мою недальновидность.
У меня сначала макрос вставляет пустой столбце С, затем в него протягивается формула.
Можно сделать что бы формулу копировало до последней строки, в которой есть данные?
Например столбец B, строка 120 является последней, то что бы формулу в столбце С протянуло до 120 строки.
0
призрак
 Аватар для ikki
3266 / 894 / 119
Регистрация: 11.05.2012
Сообщений: 1,702
Записей в блоге: 2
15.06.2012, 16:02
попробуйте так:
Visual Basic
1
[c5].resize([b:b].Find("*", , , , xlByRows, xlPrevious).row-4,1).formular1c1= "=RC[2]/RC[1]"
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
15.06.2012, 16:02
Помогаю со студенческими работами здесь

указать адрес получателя из ячейки access
Добрый день, а может у кого-то уже и вечер! Нужна помощь. Не могу сделать макрос(или что-то еще), чтобы при запуске его у меня...

Как указать аргумент через переменную?
есть код: ShellExecute (NULL, L&quot;open&quot;, L&quot;C:\\Program Files\\1Cv77\\BIN\\1CV7.exe&quot;, L&quot;enterprise /M /DC:\\cpp\\1s_auto_ms\\auto\\db...

Как записать 0 в переменную через ее адрес?
Здравствуйте. Как записать 0 в переменную через ее адрес? .data curDay BYTE 11h curMonth BYTE 22h curYear BYTE 33h ...

Как указать адрес "ячейки"?
Здравствуйте! Есть таблица, создана ленточная форма. Операторы вбивают инфу в &quot;главной&quot; форме по &quot;ячейкам&quot;. Возможно...

Указать адрес ячейки Excel цифровыми координатами, а не буквенными
Открываю или создаю, если нету, файл Excel и забиваю в него данные. ​*private void WriteDataInExcel() { DateTime...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru