Remkomplekty.ru

IT Новости из мира ПК
1 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Vba excel текущая ячейка

Чтение и запись значения ячейки в VBA

В приложении Excel все данные как правило находятся в ячейках на листах, с которыми макросы работают как с базой данных. Поэтому, начинающему программисту VBA важно понимать как читать значения из ячейки Excel в переменные или массивы и, наоборот, записывать какие-либо значения на лист в ячейки.

Обращение к конкретной ячейке

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

Полный путь к ячейке A1 в Книге1 на Листе1 можно записать двумя вариантами:

  • С помощью Range
  • С помощью Cells

Пример 1: Обратиться к ячейке A3 находящейся в Книге1 на Листе1

Однако, как правило, полный путь редко используется, т.к. макрос работает с Книгой, в которой он записан и часто на активном листе. Поэтому путь к ячейке можно сократить и написать просто:

Пример 2: Обратиться к ячейке A1 в текущей книге на активном листе

Если всё же путь к книге или листу необходим, но не хочется его писать при каждом обращении к ячейкам, можно использовать конструкцию With End With. При этом, обращаясь к ячейкам, необходимо использовать в начале «.» (точку).

Пример 3: Обратиться к ячейке A1 и B1 в Книге1 на Листе2.

Так же, можно обратиться и к активной (выбранной в данный момент времени) ячейке.

Пример 4: Обратиться к активной ячейке на Листе3 текущей книги.

Чтение значения из ячейки

Есть 3 способа получения значения ячейки, каждый из которых имеет свои особенности:

  • Value2 — базовое значение ячейки, т.е. как оно хранится в самом Excel-е. В связи с чем, например, дата будет прочтена как число от 1 до 2958466, а время будет прочитано как дробное число. Value2 — самый быстрый способ чтения значения, т.к. не происходит никаких преобразований.
  • Value — значение ячейки, приведенное к типу ячейки. Если ячейка хранит дату, будет приведено к типу Date. Если ячейка отформатирована как валюта, будет преобразована к типу Currency (в связи с чем, знаки с 5-го и далее будут усечены).
  • Text — визуальное отображение значения ячейки. Например, если ячейка, содержит дату в виде «число месяц прописью год», то Text (в отличие от Value и Value2) именно в таком виде и вернет значение. Использовать Text нужно осторожно, т.к., если, например, значение не входит в ячейку и отображается в виде «#####» то Text вернет вам не само значение, а эти самые «решетки».

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

Пример 5: В ячейке A1 активного листа находится дата 01.03.2018. Для ячейки выбран формат «14 марта 2001 г.». Необходимо прочитать значение ячейки всеми перечисленными выше способами и отобразить в диалоговом окне.

Пример 6: В ячейке С1 активного листа находится значение 123,456789. Для ячейки выбран формат «Денежный» с 3 десятичными знаками. Необходимо прочитать значение ячейки всеми перечисленными выше способами и отобразить в диалоговом окне.

При присвоении значения переменной или элементу массива, необходимо учитывать тип переменной. Например, если оператором Dim задан тип Integer, а в ячейке находится текст, при выполнении произойдет ошибка «Type mismatch». Как определить тип значения в ячейке, рассказано в следующей статье.

Пример 7: В ячейке B1 активного листа находится текст. Прочитать значение ячейки в переменную.

Таким образом, разница между Text, Value и Value2 в способе получения значения. Очевидно, что Value2 наиболее предпочтителен, но при преобразовании даты в текст (например, чтобы показать значение пользователю), нужно использовать функцию Format.

Запись значения в ячейку

Осуществить запись значения в ячейку можно 2 способами: с помощью Value и Value2. Использование Text для записи значения не возможно, т.к. это свойство только для чтения.

Пример 8: Записать в ячейку A1 активного листа значение 123,45

Все три строки запишут в A1 одно и то же значение.

Пример 9: Записать в ячейку A2 активного листа дату 1 марта 2018 года

Читать еще:  Как нарисовать линию в excel

В данном примере тоже запишется одно и то же значение в ячейку A2 активного листа.

Визуальное отображение значения на экране будет зависеть от того, какой формат ячейки выбран на листе.

Vba excel текущая ячейка

malaxov
Многовато лишнего, зачем то идет копирование выделенной ячейки? (в той что только что вставили дату)

если просто вставить дату и активировать правую ячейку то

Private Sub CommandButton2_Click()
ActiveCell.FormulaR1C1 = «=TODAY()» ‘вставляем дату
ActiveCell.Offset(0, 1).Activate ‘активируем соседнюю справа ячейку
End Sub

V3
Многовато лишнего, зачем то идет копирование выделенной ячейки?

Дык, он хочет не формулу, а значение вставить.

Private Sub CommandButton2_Click()
ActiveCell = Date ‘вставляем дату
ActiveCell.Offset(0, 1).Activate ‘активируем соседнюю справа ячейку
End Sub

И еще такой небольшой вопросик: данный макрос используется в таком файле, в который нужно вносить платежки. Для облегчения труда «оператора платежек» добавлены две кнопки — «добавить строку» и «сегодня» (которая вставляет дату и отодвигает курсор для ввода суммы). А как предусмотреть такую возможность для автоматического расчета комиссии, т.е. в ячейку G10 вводится сумма, а макрос автоматически определяет ту ячейку, где занесена комиссия (в данном случае это E4), т.е. первую заполненную в столбце E выше от ряда занесения суммы, а затем умножает вводимую сумму на значение комиссии, делит произведение на 100 и записывает значение в соответствующую соседнюю ячейку. А также желательно было бы, чтобы макрос применялся только к столбцам, где заполненной является самая первая ячейка в ряду. В данном случае в ячейке G1 занесены значение месяца и года.
Сложная задачка? 🙂

К сообщению приложены файлы: 1.png, 700×500, 59Кb

Что вот так если в G внесены данные ищем ближайшее верхнее по столбцу Е перемножаем и делим на 100
записывает значение в соответствующую соседнюю ячейку это в какую? я положил данные в столбец Н
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address Like «*G*» Then
While Target.Offset(-i, -2).Value = Empty
i = i + 1
Wend
Target.Offset(0, 1).Value = Target.Value * Target.Offset(-i, -2).Value / 100
End If
End Sub

желательно было бы, чтобы макрос применялся только к столбцам, где заполненной является самая первая ячейка в ряду
Первая ячейка объединненая и она определяется верхней левой ячейкой т.е. ее адрес не G1, а F1. Надо проверять есть ли какая либо запись в ней? я правильно понимаю

Добавление от 02.07.2006 22:38:

Подправил согласно комментариям
Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Address Like «*G*» And Cells(1, 7).Value <> Empty Then
While Target.Offset(-i, -2).Value = Empty And Target.Offset(-i, -2).Row > 1
i = i + 1
Wend
Target.Offset(0, 1).Value = Target.Value * Target.Offset(-i, -2).Value / 100
End If

Пара условий:
1. Не вводить текст в столбец G, должны вводиться цифры, не предусмотрена проверка на ввод
2. Нельзя выделять несколько ячеек в столбце G и нажимать Del, не предусмотрена проверка выделения и изменения сразу нескольких ячеек
3. Сделана проверка только есть данные в столбце Е или нет (иначе можно выйти выше первой строки)

Vba excel текущая ячейка

вполне подходит — только запоминайте адрес прямо в ячейку на листе.

С другой стороны, сам Excel действительно сохраняет где-то в книге адреса всех последних активных ячеек каждого листа, так что задачка интересная. Быстрое гугление не дало ответа на вопрос

Пользователь и VB-программа (для краткости — демон) работают параллельно.
Активация Листа1 демоном ведет к деактивации Листа2 пользователя,
на котором пользователь в это время работает. Это недопустимо.

Кроме того, демон м.б. стартован после того как пользователь
побывал на Листе1 демона и покинул его — «вручную деактивировал» Лист1.
Поэтому демону нечего запоминать «в ячейку на листе»[1].
В процессе совместной работы пользователя и демона, у демона
м.б. несколько жизней (от своего старта до своего завершения),
и очередной старт жизни м.б. необязательно на Листе1.

Почему-то народ пытается обойти именно
изначально сформулированное, главное (и единственное!)
условие задачки — запрет активации неактивного листа))))

Вы не понимаете? Excel не поддерживает такого функционала (по крайней мере, стандартными средствами).

Читать еще:  Формулы в vba excel

Вам же советуют реальный обходной путь. Который исходит из того, что «текущую ячейку» на неактивном листе может изменить только пользователь. Который при этом должен хотя бы раз активировать лист. И затем деактивировать (!) А вы ударяетесь в пояснения, не имеющие отношения к задаче, — видимо, не знаете, как правильно организовать событийную модель своей задачи.

..и вообще-то при Worksheet_Deactivate для Листа1
в ActiveCell.Address(0, 0) содержится
адрес ячейки Листа2 НА который делается переход
а не
адрес ячейки Листа1 С которого делается переход..

[admin]Оформляйте коды тегами![/admin]

Я придумал немного другой вариант (с доп.переменной в модуле каждого «нужного» листа), построенный на исключениях.
Правда, что-то там не дает переключаться на другие открытые книги (есть обход — можно создать новую книгу, а в ней уже открыть нужную, но тогда до закрытия «новооткрытого» — не вернуться в книгу с демоном), хотя и продолжает считать и записывать верно. Что-то там с событиями — надо посмотреть.
Зато в рабочей книге даже удаление/добавление/копирование листов (во время работы демона) — без нареканий (при добавлении — надо озаботиться прописыванием переменной, при копировании — достаточно переместить курсор в нужную ячейку. Ибо демон пропускает активный лист при обработке, а пишет только на неактивные. И кода — минимум

Да, ещё. Переменные в модулях листа — Variant с расчетом на Object/Range, поэтому смотрите внимательно, как выполняете присваивание. Зато можно обращаться прямо к «активной» ячейке и её свойствам/методам. Конечно, можно сделать String (будет надёжнее при написании кода), но это уж проблемы разработчика.

Вопрос 19. VBA. Адресация ячеек в Excel. Ссылка на одиночную ячейку.

Адресация ячеек в экселе.

в эксель ячейка строка столбец и диапазон ячеек рассматривается как один обьект Range иногда для обозначения ячейки используется cells для ссылки используется два формата. формат а1-обычный. ссылка состояит из имени столбца и номера строки, например д4

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

R1 и C1 в данном формате R задает номер строки C номер столбца, ссылка является абсотной. для указания относительной ссылки, задается смещение по отношению к активной ячейке, смещение указывается в квадратных скобках, знак указывает направление смещения.

Ссылка на одиночную ячейку имеет вид [ обьект.] Range

например workSheets(лист1) . Range(» A7″)=34

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

например, для ввода числа 34 неоходима команда sheets(1). cells(7,1). Value=34

номер строки и столбца могут задаваться с помощью переменных

для этого напишем процедуру с неявным обьявлением переменных где j- номер строки i-номер столбца.

Операторы, выражения и операции

различают простые операторы , записываемые в одну строку и сложные. самые простые операторы это операторы присваемые, используются для присвоения переменной нужного значения

операторы условия IF используются если нужно выполнить какие то действия взависимости от условия, синтаксическая конструкция этого оператора может иметь две формы:

1.безальтернативную-IF условие THEN

2 альтернативную -IF условие ELSE

Если условие принимает значение истина, то выполняется команды оператор 1

если условие принимает значение лож, то выполняются команды оператор2

Вопрос №20 VBA. Условный оператор. Примеры.

Вопрос №21. VBA. Циклы. Примеры.

Операторы циклов.
цикл со счетчиком
For Счётчик цикла=НачальноеЗначение

To
КонечноеЗначение [Step Шаг]

Операторы
[Exit For]
Next [счетчик цикла]

Цикл-это группа операторов, которые прогрмамма многократно выполняет

В вба существует два основных типов цикла:
-циклы со счетчиком
-циклы с условием

Step(шаг)-число, задающее шаг цикла,т.е. значение на которое увеличивается или уменьшается значение счетчика на каждом шаге. это число может быть отрицательным(в этом случае шаг будет уменьшаться), если слово step отсутствует, то значение шага равно 1.
Exit For-оператор досрочного выхода из цикла необязательный
Next-окончание цикла

Пример 1. Просуммировать четные числа натурального ряда до50 включительно, сумму плместить в ячейку рабочего листа excel

Читать еще:  Как очистить историю видео в одноклассниках

Sub sum()
Dim f As Integer, sum As Integer sum=0
For f=2 To 50 Step 2
sum=sum+f
Next
Range(«A1»).Value=sum
End sub

Главной особенностью циклов с условием является условие, которое может принимать значение истины или лжи.
В вба есть 2 основных типа циклов с условием:
-Do While. Loop (цикл с предусловием)
-Do Until..Loop (цикл с постусловием)

Цикл с предусловием
Do While/Until выражение
Операторы
[Exit do]
Loop
Цикл с постусловием
Вo
операторы
[Exit Do]
Loop While/Until выражение

В первом случае условие задается в операторе начала цикла, во втором — в операторе конца цикла

Do, Loop— ключевые слова, обозначающие начало и конец цикла
While, Until-ключевые слова определяющие тип цикла

Цикл Do While выполняется до тех пор, пока условие имеет значение истинf
Цикл Do Until выполняется до тех пор, пока условие имеет значение ложь

Exit do-принудительный выход из цикла

Пример 2. Написать программу, суммирующую на рабочем листе Excel. Выпуск продукции значения ежедневных прибылей из столбца D и помещающую результат в отдельную ячейку с поясняющей надписью, как показано на рисунке.

Как получить строку ячейки из текущей функции VBA Excel

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

Как я могу манипулировать этой функцией, чтобы вернуть строки ячеек каждого из значений, которые добавляются в мой массив месяцев.

Каков был бы лучший способ сохранить эти два значения, т. е. дату (октябрь-2011) & номер строки (т. е. 456)

Буксировочные массивы? Затем верните массив с этими двумя массивами внутри него?

Может ли кто-нибудь дать решение этой проблемы?

2 Ответа

НЕ ПОЛНОСТЬЮ ПРОТЕСТИРОВАН

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

Это неаккуратно и незакончено, но работает, насколько я знаю, тест в копии ваших фактических данных, а не на ваших фактических данных. Когда у меня будет больше времени, я постараюсь больше убирать.

И может называться как:

Похожие вопросы:

Как получить значение объединенной ячейки excel, имеющей адрес диапазона, например $B$4:$B$11 в vba

У меня есть набор пользовательских функций vba, которые находятся в модуле excel, а затем вызываются из электронной таблицы excel. на данный момент все работает нормально. Меня попросили.

У меня есть формула в диапазоне ячеек в рабочем листе, которые оценивают числовые значения. Как получить числовые значения в VBA из диапазона, переданного в функцию? Предположим, что первые 10 строк.

Как я могу получить ссылку A1-style ячейки листа Excel в VBA? Я использую Access 2007 VBA. Так, например, для ячейки MyWorksheet.Range(A1).Offset(2, 3) возвращается значение D3. Это кажется таким.

Существует ли функция для получения адреса ячейки, которая вызывает функцию VBA ? Я использовал Application.ActiveCell.Address, но обнаружил, что этот метод не является правильным способом получения.

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

Я унаследовал таблицу Excel со многими функциями VBA, и неясно, где (или даже если) многие из них используются. Есть ли способ найти использование функции VBA или, возможно, поиск ее вызовов.

Я хочу получить значения соседних ячеек для расчета в VBA. Легко получить левую ячейку текущей ячейки (e.g.H19) обычно так: =H18 Если я скопирую эту ячейку в другие ячейки, каждая из них будет.

При попытке использовать пользовательскую функцию VBA из ячейки листа excel я получаю ошибку: The formula you typed contains an error Однако, когда я вызываю ту же функцию из VBA, она работает.

Нужна помощь в создании функции, которая возвращает уравнение ячейки без знака равенства. Это можно сделать в Google Таблицах, Excel, VBA или скриптах Google App. Пример ниже Вместо ввода A1+A2.

Ссылка на основную публикацию
Adblock
detector