We use VBA to automate our tasks in excel. The idea of using VBA is to connect the interface of excel with the programming. One of the very most connections between them is by changing the cell values. The change in cell value by programming shows the power of VBA. In this article, we will see how to set, get and change the cell value.
Set Cell Value
Assigning a cell with a value can be achieved by very two famous functions in VBA i.e. Range and Cells function.
Range Function in VBA
The range function helps access the cells in the worksheet. To set the cell value using the range function, we use the .Value.
Syntax: Range(cell_name).Value = value_to_be_assinged.
Set the value to a single cell
If you want to assign ’11’ to cell A1, then the following are the steps:
Step 1: Use the Range function, in the double quotes type the cell name. Use .Value object function. For example, Range(“A1”).Value = 11.
Step 2: Run your macro. The number 11 appears in cell A1.
Set the value to multiple cells at the same time
Remember the days, when your teacher gives you punishment, by making you write the homework 10 times, those were the hard days, but now the effort has exponentially reduced. You can set a value to a range of cells with just one line of code. If you want to write your name, for example, “Arushi” 10 times, in the range A2 to A11. Use range function. Following are the steps:
Step 1: Use the Range function, in the double quotes, write “Start_of_cell: End_of_cell”. Use .Value object function. For example, Range(“A2:A11”).Value = “Arushi”.
Step 2: Run your macro. The text “Arushi” appears from cell A2 to A11 inclusive.
Cells Function in VBA
The Cells function is similar to the range function and is also used to set the cell value in a worksheet by VBA. The difference lies in the fact that the Cells function can only set a single cell value at a time while the Range function can set multiple values at a time. Cells function use matrix coordinate system to access cell elements. For example, A1 can be written as (1, 1), B1 can be written as (1, 2), etc.
Syntax: Cells(row_number, column_number).Value = value_to_be_assign
For example, you want to set the cell value to “Arushi cleared CA with Rank “, in cell B1. Also, set cell C1, to ‘1’. Following are the steps:
Step 1: Open your VBA editor. Use cells function, as we want to access cell B1, the matrix coordinates will be (1, 2). Type, Cells(1, 2).Value = “Arushi cleared CA with Rank” in the VBA code.
Step 2: To access cell C1, the matrix coordinates are (1, 3). Type, Cells(1, 3).Value = 1 in the VBA code.
Step 3: Run your macro. The required text appears in cell B1, and a number appears in C1.
Setting Cell values by Active cell and the input box
There are other ways by which you can input your value in the cell in a worksheet.
Active Cell
You can set the cell value of a cell that is currently active. An active cell is the selected cell in which data is entered if you start typing. Use ActiveCell.Value object function to set the value either to text or to a number.
Syntax: ActiveCell.Value = value_to_be_assigned
For example, you want to assign the active cell with a text i.e. “Arushi is practicing CA”, also want to change the color of the cell to yellow. Following are the steps:
Step 1: Use the ActiveCell object to access the currently selected cell in the worksheet. Use ActiveCell.Value function object to write the required text.
Step 2: Color the cell by using ActiveCell.Interior.Color function. For example, use vbYellow to set your cell color to yellow.
Step 3: Run your macro. The currently selected cell i.e. B1 has attained the requirements.
Input Box
You can use the input box to set the cell value in a worksheet. The input box takes the custom value and stores the result. This result could further be used to set the value of the cell. For example, set the cell value of A1, dynamically by taking input, from the input box.
Following are the steps
Step 1: Open your VBA editor. A sub-procedure name geeks() is created. Use the Range function to store the value given by the input box.
Step 2: Run your Macro. A dialogue-box name Microsoft Excel appears. Enter the value to be stored. For example, “geeks for geeks”. Click Ok.
Step 3: Open your worksheet. In cell A1, you will find the required text is written.
Get Cell Value
After setting the cell value, it’s very important to have a handsome knowledge of how to display the cell value. There can be two ways two get the cell value either print the value in the console or create a message box.
Print Cell Value in Console
The console of the VBA editor is the immediate window. The immediate window prints the desired result in the VBA editor itself. The cell value can be stored in a variable and then printed in the immediate window. For example, you are given a cell A1 with the value ’11’, and you need to print this value in the immediate window.
Following are the steps
Step 1: Press Ctrl + G to open the immediate window.
Step 2: The cell value in A1 is 1.
Step 3: Open your VBA editor. Declare a variable that could store the cell value. For example, Val is the variable that stores the cell value in A1. Use the Range function to access the cell value. After storing the cell value in the val, print the variable in the immediate window with the help of Debug.Print(val) function.
Step 4: Run your macro. The cell value in A1 is printed in the immediate window.
Print Cell Value in a Message Box
A message box can also be used to show the cell value in VBA. For example, a random string is given in cell A1 of your string i.e. “Arushi studies in Hansraj”. Now, if you want to display the cell value in A1, we can use Message Box to achieve this.
Following are the steps
Step 1: Open your VBA macro. Create a message box by using MsgBox. Use the Range(cell).Value function to access the cell value.
Step 2: Run your macro. A message box appears, which contains the cell value of A1.
Change Cell Values
The value, once assigned to the cell value, can be changed. Cell values are like variables whose values can be changed any number of times. Either you can simply reassign the cell value or you can use different comparators to change the cell value according to a condition.
By reassigning the Cell Value
You can change the cell value by reassigning it. In the below example, the value of cell A1 is initially set to 1, but later it is reassigned to 2.
Following are the steps
Step 1: Open your VBA code editor. Initially, the value of cell A1 is assigned to 1. This initial value is printed in the immediate window. After that, we changed the value of cell A1 to 2. Now, if we print the A1 value in the immediate window, it comes out to be 2.
Step 2: The immediate window shows the output as 1 and 2.
Changing cell value with some condition
We can use if-else or switch-case statements to change the cell value with some condition. For example, if your age is greater than 18 then you can drive else you cannot drive. You can output your message according to this condition.
Following are the steps
Step 1: A code is written in the image below, which tells whether you are eligible for a driving license or not. If your age is greater than 18 then cell A1 will be assigned with the value, “You are eligible for the driving license”, else A1 will be assigned with “You are not eligible for driving license”.
Step 2: Run your macro. An input box appears. Enter your age. For example, 19.
Step 3: According to the age added the cell value will be assigned.
Изменение значений других ячеек из пользовательской функции VBA Excel с помощью методов Range.Replace и Application.Volatile. Примеры кода.
В первых двух параграфах описано нетрадиционное использование процедуры Function, поэтому не применяйте его в серьезных проектах. Тестирование проводилось в Excel 2016.
Функция с методом Range.Replace
Пользовательская функция не предназначена для изменения значений ячеек, кроме той, в которой она расположена. Попытка присвоить какое-либо значение из функции другой ячейке приводит к неработоспособности функции и отображению в ячейке, где она расположена, сообщения «#ЗНАЧ!».
Но, как ни странно, внутри процедуры Function работает метод Range.Replace, которым мы воспользуемся для изменения значений других ячеек из пользовательской функции.
Пример 1
Эта функция заменяет значение ячейки Cell1 на значение ячейки Cell2 увеличенное на 100. Сама функция размещается в третьей ячейке, чтобы не возникла циклическая ссылка.
Function Primer1(Cell1 As Range, Cell2 As Range) Cell1.Replace Cell1, Cell2 + 100 End Function |
В этом примере мы не присваиваем пользовательской функции значение, поэтому отображается значение по умолчанию – 0. Если объявить эту функцию как строковую: Function Primer1(Cell1 As Range, Cell2 As Range) as String
, будет возвращена пустая строка.
Изменение значения ячейки C1 (Cell2) приведет к пересчету значения ячейки B1 (Cell1).
Попробуйте очистить или перезаписать ячейку B1 (Cell1), ничего не получится, так как функция Primer1 вновь перезапишет ее значением C1 (Cell2) + 100.
Метод Application.Volatile
Application.Volatile – это метод, который запускает пересчет функции при изменении значения любой ячейки рабочего листа, а не только той, которая присвоена объявленной в функции переменной. Метод Application.Volatile используется только в функциях.
Рассмотрим пересчет функции на следующем примере:
Пример 2
Function Primer2(Cell1 As Range, Cell2 As Range) As String Cell1.Replace Cell1, Cell2 + 100 Range(«B2»).Replace Range(«B2»), Range(«C2») + Cell1 End Function |
Эта функция будет пересчитываться только при изменении значений ячеек B1 и C1, присвоенных переменным Cell1 и Cell2. При изменении значения ячейки C2, значение ячейки B2 не изменится, так как не будет запущен пересчет функции Primer2.
Функция Primer2 начнет вести себя по-другому, если добавить в нее оператор Application.Volatile (переименуем ее в Primer3):
Пример 3
Function Primer3(Cell1 As Range, Cell2 As Range) As String Application.Volatile Cell1.Replace Cell1, Cell2 + 100 Range(«B2»).Replace Range(«B2»), Range(«C2») + Cell1 End Function |
Теперь при смене значения в ячейке C2, значение ячейки B2 тоже изменится.
В предыдущих примерах функциям не присваивалось конечное значение, чтобы показать, что такое возможно. При присвоении значения пользовательской функции следует следить за тем, чтобы не возникало циклических ссылок между ячейками с изменяемыми функцией значениями, в том числе и той, в которой размещена функция.
Безопасное использование функции
Если вам все-таки хочется в важном проекте VBA Excel с помощью одной пользовательской функции изменять значения нескольких ячеек, есть полностью безопасный вариант.
Он заключается в добавлении дополнительного аргумента в пользовательскую функцию, с помощью которого для каждой ячейки можно вывести отдельный результат. Функция размещается в каждой изменяемой ячейке.
В простых случаях для выбора можно использовать функцию Choose или, в более сложных, оператор If…Then…Else и оператор Select Case.
Пример 4
Используем функцию Choose для выбора способа вычисления пользовательской функции в зависимости от значения дополнительного аргумента:
Function Primer4(Cell1 As Range, Cell2 As Range, a As Byte) On Error Resume Next Primer4 = Choose(a, Cell1 + Cell2, Cell1 — Cell2, Cell1 * Cell2) End Function |
В функцию Primer4 добавлен дополнительный аргумент a, от которого зависит, какое действие будет произведено со значениями ячеек B1 и C1:
На следующем скриншоте представлены результаты вычисления функции в зависимости от значения аргумента a:
- В ячейке A1 вычисляется сумма значений ячеек B1 и C1 – аргумент a=1.
- В ячейке A2 вычисляется разность значений ячеек B2 и C2 – аргумент a=2.
- В ячейке A3 вычисляется произведение значений ячеек B3 и C3 – аргумент a=3.
Пример 5
Используем оператор If…Then…Else в сокращенном виде (If…Then…) для выбора способа вычисления функции в зависимости от значения дополнительного аргумента:
Function Primer5(Cell1 As Range, Cell2 As Range, a As Byte) If a = 1 Then Primer5 = Cell1 + Cell2 If a = 2 Then Primer5 = Cell1 — Cell2 If a = 3 Then Primer5 = Cell1 * Cell2 End Function |
Результаты будут те же, что и в четвертом примере.
Небольшая памятка по работе с макросами VBA Excel. Для вставки в код, измените название листа и диапазон ячеек на свой.
Добавить текст к значениям (в данном случае добавить слово «add» в начале ячеек):
1 2 3 |
For Each c In Worksheets("list1").Range("F7:F44").Cells c.Value = "add" + CStr(c.Value) Next |
Добавить к значениям текст из соседней ячейки справа:
1 2 3 |
For Each c In Worksheets("list1").Range("F7:F44").Cells c.Value = CStr(c.Value) + " " + c.Cells(1, 2).Value Next |
Вывести строку обрезанную до 6 символов:
1 2 3 |
For Each c In Worksheets("list1").Range("J3:J175").Cells c.Value = Left(c.Value, 6) Next |
Убрать все после первого пробела:
1 2 3 4 5 6 |
For Each c In Worksheets("list1").Range("J3:J175").Cells c.Value = CStr(c.Value) + " " spacePos = inStr(1, c.Value, " ") artLen = spacePos - 1 c.Value = Left(c.Value, artLen) Next |
Убрать все до первого пробела, затем убрать пробелы в начале строки:
1 2 3 4 5 |
For Each c In Worksheets("list1").Range("D2:D79").Cells spacePos = InStr(1, c.Value, " ") c.Value = Mid(c.Value, spacePos) c.Value = LTrim(c.Value) Next |
Если здесь нет нужного вам макроса, посмотрите ещё часть 2.
Homamilae 1 / 1 / 0 Регистрация: 14.11.2010 Сообщений: 48 |
||||
1 |
||||
Скрипт, который меняет значение ячейки на другое04.10.2013, 13:31. Показов 5042. Ответов 6 Метки нет (Все метки)
Подскажите пожалуйста, у меня есть файл. на листе 1 есть список элементов в столбце B, на листе 2 в столбце B тот же список и в столбце С краткие наименования этих элементов. Мне необходимо создать скрипт, который просматривает столбец B в листе 1 файла Excel, ищет соответствие в столбце B листа 2 и заменяет это значение в листе 1 на соответствующее из столбца С листа 2. Я впервые работаю с VBA. Что мне необходимо сделать? Спасибо большое за любую помощь! Добавлено через 3 часа 17 минут
Не могу разобраться как правильно записать «конец строк» и «условие, которое сравнивает Лист1.Cells(i, 1).Value = Лист2.Cells(j, 1).Value»
0 |
Kubuntovod 2670 / 786 / 176 Регистрация: 14.01.2013 Сообщений: 3,676 |
||||
04.10.2013, 15:03 |
2 |
|||
(if a = b) — это и есть условие. В Вашем случае, «если ячейка такая-то равна ячейке такой-то …».
На активном листе ищется последняя заполненная ячейка в столбце «B».
1 |
1 / 1 / 0 Регистрация: 14.11.2010 Сообщений: 48 |
|
04.10.2013, 16:16 [ТС] |
3 |
Спасибо за помощь! Dim j As Integer For j = 1 To 2301 If Лист1.Cells(i, 2).Value = Лист2.Cells(j, 3).Value Then Лист1.Cells(i, 2).Value = Лист2.Cells(j, 6).Value End If Next j End Sub Попробовала данный код на приложенном файле . Почему-то не заменились ячейки — не понятно почему (
0 |
Kubuntovod 2670 / 786 / 176 Регистрация: 14.01.2013 Сообщений: 3,676 |
||||
04.10.2013, 17:52 |
4 |
|||
Попробуйте вручную. Например, Лист1, строка 3, столбец 2 = «Предоставление сведений об административных правонарушениях в области дорожного движения». Ищем это значение в Листе 2, столбец 3. На строке 267 Бинго! Смотрим в столбец 6 Листа 2, а он брат близнец 3-му столбцу. Т.е. учитывая тот факт, что значения идентичны, то и замены не видно. Это если смотреть на Ваш код. А если прочесть первый пост, то код должен выглядеть так:
1 |
1 / 1 / 0 Регистрация: 14.11.2010 Сообщений: 48 |
|
04.10.2013, 18:07 [ТС] |
5 |
На листе 2 в столбце 3 есть короткие названия (меньше 255) — они заменяются сами на себя, поэтому идентичны. Добавлено через 8 минут Dim j As Integer For j = 1 To 2301 If Лист1.Cells(i, 2).Value = Лист2.Cells(j, 3).Value Then Лист1.Cells(i, 2).Value = Лист2.Cells(j, 4).Value Next j
0 |
6875 / 2807 / 533 Регистрация: 19.10.2012 Сообщений: 8,562 |
|
04.10.2013, 18:19 |
6 |
Я же на другом форуме написал — не то сравниваете. Внимательно! Выше уже тоже указали на ошибку = Лист2.Cells(j, 2).Value Then
1 |
1 / 1 / 0 Регистрация: 14.11.2010 Сообщений: 48 |
|
04.10.2013, 18:49 [ТС] |
7 |
У меня изменился файл, посмотрите ссылку для скачивания, которую я выложила
0 |
IT_Exp Эксперт 87844 / 49110 / 22898 Регистрация: 17.06.2006 Сообщений: 92,604 |
04.10.2013, 18:49 |
Помогаю со студенческими работами здесь Определить, какой скрипт меняет значение поля в форме Переключатель (флажок) в форме запроса, который меняет значение поля —Есть 2 связанные таблицы, есть запрос, который… Джава скрипт, который передает значение скрытого поля с одной страницы на другую
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: 7 |
umka777_89 Пользователь Сообщений: 10 |
Здравствуйте, подскажите пожалуйста, можно ли как-то средствами VBA отредактировать текст в ячейке..может как-нибудь поиск и замена.. Прошу помощи |
AndreTM Пользователь Сообщений: 454 |
#2 05.06.2013 23:25:53
|
||
nerv Пользователь Сообщений: 3071 |
можно с помощью регулярных выражений сделать |
umka777_89 Пользователь Сообщений: 10 |
Спасибо наверное, надо как-то проверять: Прикрепленные файлы
|
vikttur Пользователь Сообщений: 47199 |
umka777_89, Вы в курсе, что макрос в рисунок вставить нельзя? |
umka777_89 Пользователь Сообщений: 10 |
Извините пожалуйста… Изменено: umka777_89 — 06.06.2013 11:24:24 |
Юрий М Модератор Сообщений: 60584 Контакты см. в профиле |
Посетители форума, других названий, кроме как «Книга1» и «Пример», не знают… И невдомёк им, что те, кто хочет им помочь, при сохранении файла в папку загрузки, вынуждены КАЖДЫЙ раз придумывать новое имя для сохранения. Неужели так худо с фантазией? |
umka777_89 Пользователь Сообщений: 10 |
только вот что придумалось.. For i = 1 To iRws ComboBox1.AddItem Sheets(sn).Cells(i, 1) Ничего не происходит… |
umka777_89 Пользователь Сообщений: 10 |
Dim i& For i = 1 To iRws ошибка в строке ComboBox1.AddItem i |
Юрий М Модератор Сообщений: 60584 Контакты см. в профиле |
umka777_89, специально для кодов существует тег — пользуйтесь им. См. пост #2 |
umka777_89 Пользователь Сообщений: 10 |
#11 06.06.2013 15:07:39 Юрий М,
Изменено: umka777_89 — 06.06.2013 15:08:09 |
||
Юрий М Модератор Сообщений: 60584 Контакты см. в профиле |
Сначала его нужно очистить: ComboBox1.Clear |
umka777_89 Пользователь Сообщений: 10 |
Юрий М, Изменено: umka777_89 — 06.06.2013 15:26:35 |
Юрий М Модератор Сообщений: 60584 Контакты см. в профиле |
За темой не следил, КомбоБокс не нашёл — разбираться нет времени… Я Вам подсказал, что, если список в КомбоБоксе постоянно пополняется/нарастает (пост #11), то нужно его предварительно очистить. |
umka777_89 Пользователь Сообщений: 10 |
Юрий М, |
Юрий М Модератор Сообщений: 60584 Контакты см. в профиле |
Вижу его )) Давайте сначала: какие и где проводятся манипуляции и что должно быть в том или ином случае. |
umka777_89 Пользователь Сообщений: 10 |
#17 06.06.2013 19:37:15 Юрий М,
не выполняется, вот… |
||
Юрий М Модератор Сообщений: 60584 Контакты см. в профиле |
Так…)) Выделяю ячейку I98, появляется КомбоБокс. В нём сразу значение rrff, список КомбоБокса пуст. Что я делаю не так? |
umka777_89 Пользователь Сообщений: 10 |
Юрий М, |
Юрий М Модератор Сообщений: 60584 Контакты см. в профиле |
#20 06.06.2013 20:26:13 umka777_89, думаю, что этот несчастный КомбоБокс никому уже неинтересен — не будем загромождать форум. Предлагаю переместиться в Скайп — координаты в профиле. |