Разное

Получить значение ячейки vba excel: Чтение и запись значения ячейки в VBA

Содержание

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

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

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

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

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

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

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


Workbooks("Книга1.xls").Sheets("Лист1").Range("A3") ' Обратиться к ячейке A3
Workbooks("Книга1.xls").Sheets("Лист1").Cells(3, 1) ' Обратиться к ячейке в 3-й строке и 1-й колонке (A3)

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

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


Range("A1")
Cells(1, 1)

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

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


With Workbooks("Книга1").Sheets("Лист2")
  ' Вывести значение ячейки A1, которая находится на Листе2
  MsgBox .Range("A1")
  ' Вывести значение ячейки B1, которая находится на Листе2
  MsgBox .Range("B1")
End With

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

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


Application.ActiveCell ' полная запись
ActiveCell ' краткая запись

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

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

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

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

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


MsgBox Cells(1, 1)        ' выведет 01.03.2018
MsgBox Cells(1, 1).Value  ' выведет 01.03.2018
MsgBox Cells(1, 1).Value2 ' выведет 43160
MsgBox Cells(1, 1).Text   ' выведет 01 марта 2018 г.

Dim d As Date
d = Cells(1, 1).Value2    ' числовое представление даты преобразуется в тип Date
MsgBox d                  ' выведет 01.03.2018

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


MsgBox Range("C1")        ' выведет 123,4568
MsgBox Range("C1").Value  ' выведет 123,4568
MsgBox Range("C1").Value2 ' выведет 123,456789
MsgBox Range("C1").Text   ' выведет 123,457р.

Dim c As Currency
c = Range("C1").Value2    ' значение преобразуется в тип Currency
MsgBox c                  ' выведет 123,4568

Dim d As Double
d = Range("C1").Value2    ' значение преобразуется в тип Double
MsgBox d                  ' выведет 123,456789

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

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


Dim s As String
Dim i As Integer
s = Range("B1").Value2 ' успех
i = Range("B1").Value2 ' ошибка

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

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

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

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


Range("A1") = 123.45
Range("A1").Value = 123.45
Range("A1").Value2 = 123.45

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

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


Cells(2, 1) = #3/1/2018#
Cells(2, 1). Value = #3/1/2018#
Cells(2, 1).Value2 = #3/1/2018#

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

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

Excel Vba получение значения ячейки и установка строки

Я хочу установить строку как определенную букву, основанную на значении ячейки. Ячейка должна иметь только значения «P1», «P2», «P3», «P4». Если ячейка «P1», то я хочу установить строку «products2» как «a», если его «P2» я хочу «products2» установить как «b» …

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

Dim Products As String
Dim Products2 As String

      Products = wash.offset(1, 3).Value

            If Products = P1 Then
                Products2 = "a"
            ElseIf Products = P2 Then
                MsgBox "we got here"
                Products2 = "b"
            End If

            MsgBox "products2 = " & Products2

excel

vba

Поделиться

Источник


VBAnoob    

13 августа 2015 в 15:20

3 ответа


  • как указать диапазон в vba, используя значение ячейки в excel

    Я очень новичок в vba и в основном использую его только при изменении значения диапазона (предварительно записав скрипт с помощью макроса в excel). Поскольку я добавляю / удаляю строки в excel, мне нужно перейти к скрипту vba и вручную обновить часть диапазона. Так что если мой диапазон на листе…

  • Считывание Ячейки Excel И Установка Цвета Строки

    Я использую Com Interop и C#. я должен перебирать файл Excel, ища определенные значения в каждой из строк (всегда в столбце 2). Для некоторых значений мне нужно установить цвет фона строки в красный цвет. У меня возникли проблемы: Считывание значения в ячейке [i][2] для строки i и Установка цвета…



2

Вот версия, которая будет делать то, что вы хотите, и расширить его до P3 и т.д. Мне пришлось установить wash в какое-то место, чтобы заставить код работать. Предполагается, что значение в ячейке, к которой вы обращаетесь, имеет вид Pi , где i -целое число. Он получает значение i, сдвинутое вниз на 1, затем получает букву в алфавите, сдвинутом на i (так что «a» для 0, «b» для 1 и т. д.)

Sub ProdString()
    Dim Products As String
    Dim Products2 As String
    Dim i As Long
    Dim wash as Range

    Set wash = Range("A1")
    Products = wash.Offset(1, 3).Value
    Products = Mid(Trim(Products), 2) 'strip off the "P"
    i = Val(Trim(Products)) - 1
    Products2 = Chr(i + Asc("a"))
    MsgBox "Products2 = " & Products2

End Sub

Поделиться


John Coleman    

13 августа 2015 в 15:39



1

То, как он существует прямо сейчас, он пытается сравнить products с переменной, а не со строкой

Dim Products As String
Dim Products2 As String

Products = cstr(trim(wash.offset(1, 3).Value))

If Products = "P1" Then
    Products2 = "a"
ElseIf Products = "P2" Then
    MsgBox "we got here"
    Products2 = "b"
End If

MsgBox "products2 = " & Products2

Хороший способ расширить его, чтобы он легко охватывал «P1» через «P4», — использовать оператор select следующим образом:

Products = CStr(Trim(wash. Offset(1, 3).value))

Select Case Products
    Case "P1":
        Products2 = "a"
    Case "P2":
        Products2 = "b"
    Case "P3":
        Products2 = "c"
    Case "P4":
        Products2 = "d"
End Select

MsgBox "products2 = " & Products2

Это намного проще сканировать во время чтения.

Поделиться


Cohan    

13 августа 2015 в 15:24



0

Моя попытка

Function StrOut(strIn As String)
StrOut = Chr(96 + CLng(Replace(strIn, "P", vbNullString)))
End Function

тест

Sub TestDaCode()
Debug.Print StrOut("P1")
Debug.Print StrOut("P2")
End Sub

Поделиться


brettdj    

14 августа 2015 в 03:21



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

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

Учитывая пример простого файла excel здесь , что такое код VBA для копирования значения, формирования и гиперссылки ячейки? т. е. в ячейке B5 мы вызовем =myCopyCellFunction(B2) и получим точное…

обработайте событие завершения редактирования значения ячейки (vba)

Привет в моей книге EXCEL я использую vba. Как я могу обработать событие потери фокуса ячейки или завершения редактирования ее значения.

Считается ли тип числового значения ячейки в Excel ALWAYS двойным?

В VBA, как показывает эта спецификация , числовые значения могут иметь несколько типов: Double, Integer, Long, LongLong, Single, Decimal, Byte. Однако, похоже, что в Excel, для ячейки, содержащей…

как указать диапазон в vba, используя значение ячейки в excel

Я очень новичок в vba и в основном использую его только при изменении значения диапазона (предварительно записав скрипт с помощью макроса в excel). Поскольку я добавляю / удаляю строки в excel, мне…

Считывание Ячейки Excel И Установка Цвета Строки

Я использую Com Interop и C#. я должен перебирать файл Excel, ища определенные значения в каждой из строк (всегда в столбце 2). Для некоторых значений мне нужно установить цвет фона строки в красный…

Excel vba макрос копирует строки несколько раз на основе целочисленного значения ячейки

Я ищу макрос VBA Excel, который копирует полные строки в другой рабочий лист. Ему потребуется создать дополнительные дубликаты этой строки на основе целочисленного значения ячейки. Это полезно при…

Excel VBA Macros для копирования и вставки значения ячейки в определенные ячейки на основе текста в столбце

Я пытаюсь скопировать и вставить текстовые значения в определенное количество ячеек в excel на основе сравнения текста. Пожалуйста, смотрите ниже для объяснения: У меня есть 2 столбца A(пустой) и B…

VBA Excel-вставить символ на основе значения ячейки

Мне нужно работать с Excel, к которому я абсолютно новичок. Я ищу решение VBA, чтобы ускорить некоторые ежедневные работы. Вот мой случай: мне нужно проверить ячейки столбца C, которые имеют…

Excel VBA: вставить N листов в зависимости от значения ячейки

Я новичок в Excel VBA. Я хочу вставить количество ячеек на основе значения ячейки. У меня есть лист1, я хочу использовать b4 в качестве ссылки на количество листов (который является шаблоном),…

Изменение цвета заливки ячейки MS Excel без макроса vba

Я думал, что напишу это где-нибудь, потому что мне потребовалось немного времени, чтобы понять, как изменить цвет заливки ячейки в MS Excel. Произошло то, что я изменил цвет заливки ячейки, назначив…

Как получить значение ячейки из формулы в Excel, используя VBA?

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

Предположим, что первые 10 строк столбца A на листе содержат rand(), и я передаю это в качестве аргумента своей функции. ..

public Function X(data as Range) as double

    for c in data.Cells
        c.Value    'This is always Empty
        c.Value2   'This is always Empty
        c.Formula  'This contains RAND()
    next

end Function

Я вызываю функцию из ячейки…

=X(a1:a10)

Как получить значение ячейки, например 0.62933645?

Excel 2003, VB6

vba

excel-2003

Поделиться

Источник


Simon    

23 мая 2009 в 12:21

3 ответа


  • Интерпретируйте значение из формулы как формулу в Excel 2010

    У меня есть формула, которую я использую для динамического создания формул для ссылки на данные в отдельных электронных таблицах. Например, у меня есть формула в ячейке, которая возвращает =<path>\[<file>]<reference> . Таким образом, возвращаемое значение для ячейки R496 будет…

  • Excel VBA: Changin concatenate, mid и найти формулы для VBA кода

    Я создаю еще один VBA для этого мне нужно значение от excel формулы до VBA. .. Формула excel является =CONCATENATE(MID(J11, 1, FIND(_, J11, 1)),#.формат jpg) код, который я записываю в VBA, используя макрос excel… ActiveCell.FormulaR1C1 = _ =СЦЕПИТЬ(СЕРЕДИНА(RC[-1],1,FIND(_,RC[-1],1)),#.формат…



6

Следующий код работает для меня при запуске с VBA (Excel 2003):

Public Function X(data As Range) As Double

For Each c In data.Cells
    a = c.Value     'This works
    b = c.Value2    'This works too (same value)
    f = c.Formula   'This contains =RAND()
Next

End Function

a и b-это одно и то же и равны тому, что я передаю (это диапазон ячеек с Rand() в них). Я не знаю, что еще здесь происходит.

Ага! Вам нужно установить X, нет? Я не уверен, что именно вы ожидаете от этой функции, но вам нужно установить X (имя функции) в значение, которое вы хотите вернуть. Добавьте эту строку:

X = a

Поделиться


Richard Morgan    

23 мая 2009 в 12:44



1

Я не могу воспроизвести проблему, используя макет, который вы разместили. Я заметил несколько синтаксических ошибок в вашем опубликованном коде (т. е.: «for» должно быть «для каждого»). Но когда я поставил =RAND() в A1:A10 и =X(A1:A10) , я получил возврат просто отлично с этим:

Public Function X(data As Range) As Double
    Dim c As Excel.Range
    Dim sum As Double
    For Each c In data.Cells
        sum = sum + c.Value
    Next
    X = sum
End Function

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

Public Function X(data As Range) As Double
    Dim c As Excel.Range
    Dim sum As Double
    For Each c In data.Cells
        sum = sum + Excel.Evaluate(c.Formula)
    Next
    X = sum
End Function

Но вообще говоря, вы не захотите этого делать, так как это в основном вычисление одного и того же значения дважды.

Поделиться


Oorang    

27 мая 2009 в 08:54



0

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

Для ускорения macros часто делается что-то вроде следующего..

'Set Reasonable default
Application.CutCopyMode = False
Application.ScreenUpdating = False
Application.Interactive = False
Application.Calculation = xlCalculationManual

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

Public Function X(data As Range) As Double
    'You may need the following as well
    'Application.Calculate
    Dim c As Range
    For Each c In data.Cells
        c.Calculate
        c.Value    'This is now has a value
        c.Value2   'This is now has a value
        c.Formula  'This contains RAND()
    Next
End Function

Поделиться


Frobbit    

17 марта 2010 в 01:13


  • Специальные ячейки в Excel для возврата значения формулы

    Я хотел быстрый простой способ скопировать значения ячеек на другой лист, используя SpecialCells в Excel, а не цикл Мой VBA код, как показано ниже: Sub copyMissingData() Worksheets(Source). Range(Z4:Z2000).SpecialCells(xlCellTypeConstants).Copy Worksheets(Destination).Range(missing_qbc) End Sub Мои…

  • Использовать значение ячейки (текст) как часть формулы в Excel VBA

    У меня есть проблема при выполнении макроса в Excel VBA, который выглядит просто, но я не смог найти ответ. Я хочу изменить формулу в зависимости от значения конкретной ячейки; ячейка находится в C7 и может иметь текст OR или текст AND. Часть формулы (будучи строковыми переменными CritEUs и…


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

Excel VBA: получить значение ячейки, независимое от форматирования ячейки

В Excel VBA Range(A1).Value должен возвращать базовое значение диапазона A1 на листе. Но я получаю другое значение, если ячейка отформатирована как бухгалтерская. Как мне получить фактическое…

Excel: вызов библиотечной функции VBA из Формулы ячейки?

Можно ли вызвать функцию библиотеки VBA, например. StrReverse (в VBA.Strings ) непосредственно из Формулы ячейки без записи функции-оболочки?

Получить значение объединенной ячейки excel из адреса ее ячейки в vba

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

Интерпретируйте значение из формулы как формулу в Excel 2010

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

Excel VBA: Changin concatenate, mid и найти формулы для VBA кода

Я создаю еще один VBA для этого мне нужно значение от excel формулы до VBA… Формула excel является =CONCATENATE(MID(J11, 1, FIND(_, J11, 1)),#.формат jpg) код, который я записываю в VBA, используя…

Специальные ячейки в Excel для возврата значения формулы

Я хотел быстрый простой способ скопировать значения ячеек на другой лист, используя SpecialCells в Excel, а не цикл Мой VBA код, как показано ниже: Sub copyMissingData(). ..

Использовать значение ячейки (текст) как часть формулы в Excel VBA

У меня есть проблема при выполнении макроса в Excel VBA, который выглядит просто, но я не смог найти ответ. Я хочу изменить формулу в зависимости от значения конкретной ячейки; ячейка находится в C7…

Автоматическое копирование только цвета из одной ячейки в другую — EXCEL VBA

У меня есть ячейка 017 , значение и цвет этой ячейки постоянно меняется из-за формулы и условного форматирования. Ячейка O16 также постоянно изменяется из-за формулы, но формула и их значения…

Excel VBA: значение ячейки из макроса

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

Получить значение мощности ячейки

Вероятно, это очень просто сделать, но я не могу придумать, как это сделать. x). В качестве примера…

Исчерпывающее описание объекта Dictionary — Макросы и программы VBA — Excel — Каталог статей

Содержание:

1. Что такое Dictionary?
2. Создание Dictionary
3. Свойства и методы объекта Dictionary
4. Наполнение словаря
    4.1. Типы данных ключа и элемента
    4.2. Через метод Add
    4.3. Через свойство Item
    4.4. Неявное добавление ключа в Dictionary
5. Удаление элементов
    5.1. Удаление конкретного элемента
    5.2. Очистка всего словаря
6. Ключи
    6.1. Последовательность хранения
    6.2. Добавление элементов с ключами разных типов
    6.3. Уникальность строковых ключей
    6.4. Генерация уникальных ключей
7. Элементы
    7.1. Типы элементов
    7.2. UDT
8. Доступ к элементам словаря
    8.1. Извлечение элемента по ключу
    8. 2. Извлечение элемента по номеру его индекса
    8.3. Извлечение ключа по номеру его индекса
9. Перебор словаря
    9.1. For each по массивам Keys и Items
    9.2. For по массивам Keys и Items
    9.3. Фильтрация элементов
    9.4. Выгрузка словаря в диапазон ячеек
    9.5. Операции с ключами/элементами при помощи формул рабочего листа
10. Файл примера
11. Заключение
12. Использованный источник

1. Что такое Dictionary?

Если вы программируете на VBA/VBS, то рано или поздно вынуждены будете познакомиться с объектом Dictionary. Если в двух словах, то Dictionary — это продвинутый массив. Как вы знаете, массив — это упорядоченный набор неких (обычно однородных) элементов. Вот типичный массив:

Элементы пронумерованы и доступны по номеру индекса. Индекс всегда числовой.

А вот, что из себя представляет Dictionary (словарь):

Как видите, каждому элементу поставлен в соответствие не просто числовой индекс, а уникальный ключ, который в данном случае представляет из себя текстовую строку (имена). Двух одинаковых ключей в словаре быть не может, но могут быть одинаковые элементы (хоть все одинаковые). Таким образом словарь — это обычно некий список, снабжённый ключом, при помощи которого вы хотите извлекать полезную информацию (элементы). В указанном примере мы имеем, допустим, имена детей в качестве ключа, а в качестве элементов, поставленных в соответствие ключу, скажем, количество карманных денег у ребёнка.

С другой стороны нечто подобное можно же сделать, используя массив. Давайте объявим двумерный массив:

Должно быть у словаря есть какие-то преимущества перед таким использованием массивов? И это действительно так!

Давайте пока просто перечислим важнейшие преимущества:

  1. Словарь контролирует уникальность ключей. Два одинаковых ключа не могут быть добавлены в словарь. Это важное свойство, так как программисту очень часто требуется обеспечить или проконтролировать уникальность каких-либо наборов значений, и в этом может с успехом быть использован Dictionary;

  2. Словарь очень эффективно (при помощи встроенного алгоритма бинарного поиска) осуществляет извлечение элементов по известному ключу. В десятки раз быстрее, чем обычный перебор;

  3. У словаря есть встроенный метод (Exists), при помощи которого можно понять, добавлен ли некий ключ в коллекцию;

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

  5. Словарь может вернуть все ключи и все элементы в виде отдельных одномерных массивов.

▲ вверх

2. Создание Dictionary

Существует несколько способов создать объект типа Dictionary. Ознакомимся с ними:

Считается, что методы, использующие позднее связывание надёжнее в плане обеспечения работоспособности программы на разных компьютерах, так как не зависят от настроек Tools — References… редактора VBA.

Однако, учитывая, что библиотека Microsoft Scripting Runtime присутствует везде, начиная с Windows 2000, я думаю, что вы без какого-либо ущерба можете использовать методы раннего связывания. Раннее связывание хорошо тем, что оно несколько быстрее работает, а также во время разработки вы можете пользоваться функцией завершения кода (когда среда программирования вам подсказывает имеющиеся у объекта свойства и методы). Выбор за вами.

▲ вверх

3. Свойства и методы объекта Dictionary

Тип Идентификатор Описание
Свойство Count dicObject.Count
Возвращает количество элементов в словаре. Только для чтения.
Свойство Item dicObject.Item(key)[ = newitem]
Устанавливает или возвращает элемент с указанным ключом. Чтение/запись.
Свойство Key dicObject.Key(key) = newkey
Заменяет ключ элемента на новое значение.
Свойство CompareMode dicObject.CompareMode[ = compare]
Устанавливает и возвращает режим сравнения текстовых ключей в словаре. Чтение/запись.
Метод Add dicObject.Add (key, item)
Добавляет пару ключ-элемент в словарь.
Метод Exists dicObject. Exists(key)
Возвращает true, если указанный ключ существует в словаре, либо false — в противном случае.
Метод Items dicObject.Items( )
Возвращает массив, состоящий из всех элементов, имеющихся в коллекции.
Метод Keys dicObject.Keys( )
Возвращает массив, состоящий из всех ключей, имеющихся в коллекции.
Метод Remove dicObject.Remove(key)
Удаляет из словаря элемент с указанным ключом.
Метод RemoveAll dicObject.RemoveAll( )
Полностью очищает словарь от элементов. Сам объект словаря при этом не уничтожается.

▲ вверх

4. Наполнение словаря

4.1. Типы данных ключа и элемента

Dictionary наполняется по одному элементу. Не существует способов наполнить словарь массово. Чтобы добавить в словарь новый элемент вы должны иметь уникальный ключ и сам элемент, который под этим ключом будет храниться в словаре.

В качестве типа данных для элемента может быть использовано практически всё что угодно: числа, логический тип, строки (в том числе пустые), дата-время, массивы, любые объекты (листы, диапазоны, коллекции, другие словари, пустой указатель Nothing).

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

UDT (User Defined Type) не может напрямую использоваться в качестве ключа и/или элемента, но данное ограничение можно обойти, объявив аналог UDT, создав класс и определив в нём свойства аналогичные имеющимся в UDT. А поскольку класс — это объектный тип, то его уже можно использовать для ключей и элементов.

▲ вверх

4.2. Через метод Add

На листе Example, прилагаемого к статье файла, есть таблица с TOP30 стран по площади их территории. Для области данных этой таблицы объявлен именованный диапазон SquareByCountry. Пример ниже добавляет все строки указанногот ИД в Dictionary по принципу страна (key) — площадь (item):

Как видите, для добавления элемента (item) мы в 12-й строке кода использовали метод Add объекта dicCountry. Если в нашей таблице будет задвоена страна, то при попытке добавить в словарь элемента с ключом, который в словаре уже есть, будет сгенерировано исключение:

▲ вверх

4.3. Через свойство Item

Используя свойство Item, также можно добавлять пары ключ-элемент, однако, при попытке добавить дублирующий ключ исключения сгенерировано НЕ БУДЕТ, а элемент будет заменён на новый (с потерей старого). Это очень полезно — иметь возможность выбирать способы наполнения словаря, отличающиеся реакцией на задвоение ключей.

▲ вверх

4.4. Неявное добавление ключа в Dictionary

И ещё один неожиданный и я бы сказал экзотический способ пополнения словаря. Если упомянуть свойство Item по ПРАВУЮ сторону оператора присваивания, то он оказывается добавит в словарь key с пустым item, если данного key не существует в коллекции. Если же такой key уже существует, то никаких действий предпринято не будет.

Ещё раз хочу обратить ваше внимание, что элемент (item) при таком пополнении коллекции будет пустым (Empty). Это можно использовать, если вам нет необходимости что-то хранить в элементах в качестве полезной нагрузки (например, когда вы просто строите список уникальных значений, встречающихся в столбце таблицы).

Если вы читаете словарь через Item (а это, собственно, самый логичный и распространенный метод), и при этом хотите избежать добавления пустых ключей в словарь, используйте предварительно метод Exists, что контроля наличия такого ключа в коллекции.

▲ вверх

5. Удаление элементов

Есть 2 варианта удаления элементов из словаря:

5.1. Удаление конкретного элемента

▲ вверх

5.2. Очистка всего словаря

Полагаю, комментировать тут нечего.

▲ вверх

6. Ключи

6.1. Последовательность хранения

Следует понимать, что элементы в словаре хранятся в той последовательности, в которой они добавлялись в словарь. Менять эту последовательность можно только путём полной перестройки словаря (хотя не совсем понятно для чего это может понадобиться).

▲ вверх

6.2. Добавление элементов с ключами разных типов

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

Вот, что мы получим, выполнив представленный код:

▲ вверх

6.3. Уникальность строковых ключей

При помощи свойства CompareMode можно управлять тем, как Dictionary будет реагировать на одинаковые текстовые ключи, набранные в разном регистре. При значении CompareMode равным константе TextCompare (1) разный регистр игнорируется и ключи считаются идентичными, а при константе BinaryCompare (0) такие ключи считаются разными. Менять CompareMode можно только, когда словарь пуст (либо только создан, либо только что очищен).

▲ вверх

6.4. Генерация уникальных ключей

Иногда требуется сохранить в Dictionary все элементы, а какие при этом будут ключи нам всё равно — лишь бы они были уникальные, так как в противном случае мы можем потерять некоторые элементы (items). В таких случаях очень удобно использовать свойство Count в качестве генератора уникального значения ключа, так как Count гарантированно увеличивается на единицу всякий раз, когда добавляется элемент.

▲ вверх

7. Элементы

7.1. Типы элементов

Продемонстрируем добавление в словарь элементов разных типов:

▲ вверх

7.2. UDT

Как я уже упоминал, напрямую переменные типа UDT нельзя сохранять в качестве элементов Dictionary. Чтобы это обойти нужно вместо UDT создать модуль класса, полностью соответствующий структуре необходимого вам UDT. Например, я создал модуль класса с названием MyRGB и определил его так:

далее становится возможным следующее:

▲ вверх

8. Доступ к элементам словаря

8.1. Извлечение элемента по ключу

Этот способ мы уже обсуждали, но для полноты картины повторимся.

Мы используем свойство Item с указанием ключа. Если ключа не существует, то будет возвращено значение Empty, а в словарь добавлен данный ключ со значением Empty в качестве элемента. Никаких исключений не генерируется. Если хотите избежать добавления ключа в коллекцию, используйте предварительно метод Exists для проверки его наличия.

▲ вверх

8.2. Извлечение элемента по номеру его индекса

Для извлечения конкретного элемента по его индексу необходимо использовать конструкцию Items()(i), где i — индекс элемента, начинающийся с нуля. Это довольно неожиданный синтаксис, я не припомню, чтобы он применялся где-то ещё кроме Dictionary. Согласно таблице, приведенной выше, Items — свойство, содержащее одномерный массив всех элементов словаря. Также есть соответствующий массив Keys для всех ключей словаря.

▲ вверх

8.3. Извлечение ключа по номеру его индекса

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

▲ вверх

9. Перебор словаря

9.1. For each по массивам Keys и Items

▲ вверх

9.2. For по массивам Keys и Items

▲ вверх

9.3. Фильтрация элементов

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

▲ вверх

9. 4. Выгрузка словаря в диапазон ячеек

Результат:

▲ вверх

9.5. Операции с ключами/элементами при помощи формул рабочего листа

Если ключи/элементы у вас в виде числовых значений, то к ним легко можно применять стандартные функции рабочего листа. Например, ниже я определяю страну с наибольшей территорией и вывожу её название. Числовую территорию в данном случае желательно иметь в виде ключа, так как зная ключ, вывести элемент легко, а вот, зная элемент, найти по нему ключ, гораздо сложнее (потребуется перебор всего словаря).

К вашим услугам и другие функции, такие как: Min(), Large(), Small() и т.д.

▲ вверх

10. Файл примера

Скачать примеры кода VBA

▲ вверх

11. Заключение

Я надеюсь, что данная статья помогла вам хорошенько разобрать с объектом Dictionary. В моих ближайших планах рассказать, как при помощи словаря строить произвольные иерархические структуры. Так же стоит упомянуть, что в VBA есть такой встроенный объект Collection. Однако, по своим функциональным возможностям он достаточно уныл и вчистую проигрывает Dictionary, поэтому я не хочу тратить на него силы и время. Единственное его преимущество это то, что он часть MS Office, а словарь — часть MS Windows, поэтому первый работает в MS Excel for Mac, а второй — нет. Но пока (да и вообще) в нашей стране это обстоятельство можно с лёгкостью игнорировать.

▲ вверх

12. Использованный источник

Массу конкретного материала по объекту Dictionary я подчерпнул из этой замечательной (огромной!) статьи некоего, по всей видимости испанского, автора, имени которого на сайте нет. Очень рекомендую. На сайте также даётся огромное количество примеров работы с объектной моделью Outlook!

Читайте также:

Получение значений с другого листа в Excel с помощью VBA

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

У меня есть некоторые значения в excel (sheet2), например:

    A  B  C  D
    -  -  -  -  
1 | 2  5  9  12
2 | 5  8  4  5
3 | 3  1  2  6

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

  • Я хочу получить сумма каждого столбца в строке 4. и мне это удается, но я могу использовать его только в sheet2.

Im с помощью » с приложением.WorksheetFunction», и я хочу изменить это, чтобы получить значения из sheet2.

Не могли бы вы помочь мне с этим и как установить sheet2 в качестве активируемого листа.

надеюсь, мой вопрос ясен.

спасибо

26

автор: Ben Rhys-Lewis

5 ответов


попробовать

 ThisWorkbook. Sheets("name of sheet 2").Range("A1")

для доступа к диапазону на листе 2 независимо от того, где находится ваш код или какой лист в настоящее время активен. Чтобы сделать лист 2 активным листом, попробуйте

 ThisWorkbook.Sheets("name of sheet 2").Activate

Если вам просто нужна сумма строки на другом листе, нет необходимости использовать VBA вообще. Введите такую формулу на листе 1:

=SUM([Name-Of-Sheet2]!A1:D1)

что будет (для вас очень конкретный пример)

ActiveWorkbook.worksheets("Sheet2").cells(aRow,aCol).Value=someval

или

someVal=ActiveWorkbook.worksheets("Sheet2").cells(aRow,aCol).Value

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

16

автор: jpinto3912


Sub TEST()
Dim value1 As String
Dim value2 As String
value1 = ThisWorkbook.Sheets(1).Range("A1").Value 'value from sheet1
value2 = ThisWorkbook.Sheets(2).Range("A1").Value 'value from sheet2
If value1 = value2 Then ThisWorkbook.Sheets(2).Range("L1").Value = value1 'or 2
End Sub

это будет сравнивать значения ячеек двух листов, и если они совпадают, поместите значение на лист 2 в столбец L.

1

автор: James Heffer


SomeVal=ActiveWorkbook. рабочие листы («Sheet2»).клеток(С. С. Гончаров,aCol).Значение

не работает. Однако следующий код работал только для меня.

SomeVal = ThisWorkbook.Листы(2).клеток(С. С. Гончаров,aCol).Значение


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

objWorkbook.WorkSheets(1).Activate
objWorkbook.WorkSheets(2).Activate

Как сделать ячейку активной в excel vba?

Здравствуйте. Googl меня не понимает, может вы подскажите?

Есть форма календарь, которая запускается кнопкой.

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

Можно в продцедуре календаря изменить

ActiveCell.Value = Calendar1. Value

например на

 = Calendar1.Value

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

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

Отображение формы запускается так

Private Sub CommandButton1_Click()
    frmCalendar.Show
End Sub

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

CodeNet

/

Языки программирования

/

Visual Basic

/

VBA

/

Excel VBA: Приёмы программирования

Как определить адрес активной ячейки.

Q: Как в макросе узнать и использовать текущее положение курсора (не мышиного, естественно)?

A:Очень просто! 🙂 ActiveCell. Row и ActiveCell.Column — покажут координаты активной ячейки.

Комментарий:

можно использовать BB-коды

Максимальная длина комментария — 4000 символов.

CodeNet

ВКонтакте

Facebook

Twitter

Google

Яндекс

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

 

1.

90K

17 апреля 2013 года

Дмитрий Литвиненко

0 / / 17.04.2013

+1 / -1

17 апреля 2013, 22:49:22

Спасибо, освежило память))

2.

64K

28 сентября 2010 года

Vladlen70

0 / / 28.09.2010

+3 / -1

28 сентября 2010, 16:25:13

А не проще ли использовать — ActiveCell.Address или Activecell.AddressLocal?

Обращение к ячейке на листе Excel из кода VBA. Запись информации в ячейку. Чтение информации из ячейки. Очистка значения ячейки. Метод ClearContents объекта Range.

  1. Обращение к ячейке
  2. Запись информации в ячейку
  3. Чтение информации из ячейки
  4. Очистка значения ячейки

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

Допустим, у нас есть два открытых файла: «Книга1» и «Книга2», причем, файл «Книга1» активен и в нем находится исполняемый код VBA.

В общем случае при обращении к ячейке неактивной рабочей книги «Книга2» из кода файла «Книга1» прописывается полный путь:

  Workbooks("Книга2.xlsm").Sheets("Лист2").Range("C5")  Workbooks("Книга2.xlsm").Sheets("Лист2").Cells(5, 3)  

Удобнее обращаться к ячейке через свойство рабочего листа Cells(номер строки, номер столбца), так как вместо номеров строк и столбцов можно использовать переменные. Обратите внимание, что при обращении к любой рабочей книге, она должна быть открыта, иначе произойдет ошибка. Закрытую книгу перед обращением к ней необходимо открыть.

Теперь предположим, что  у нас в активной книге «Книга1» активны «Лист1» и ячейка на нем «A1». Тогда обращение к ячейке «A1» можно записать следующим образом:

  ActiveCell  Range("A1")  Cells(1, 1)  

Точно также можно обращаться и к другим ячейкам активного рабочего листа, кроме обращения ActiveCell, так как активной может быть только одна ячейка, в нашем примере — это ячейка «A1».

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

  Sheets("Лист3").Cells(2, 8)  

Кроме того к ячейке на рабочем листе можно обращаться по ее индексу (порядковому номеру), который считается по расположению ячейки на листе слева-направо и сверху-вниз. Например, индекс ячеек в первой строке равен номеру столбца. Индекс ячеек во второй строке равен количеству ячеек в первой строке (которое равно общему количеству столбцов на листе — зависит от версии Excel) плюс номер столбца. Индекс ячеек в третьей строке равен количеству ячеек в двух первых строках плюс номер столбца. И так далее. Для примера, Cells(4) та же ячейка, что и Cells(1, 4). Используется такое обозначение редко, тем более, что у разных версий Excel может быть разным количество столбцов и строк на рабочем листе.

Запись информации в ячейку

Содержание ячейки определяется ее свойством — «Value», которое в VBA Excel является свойством по умолчанию и его можно явно не указывать. Записывается информация в ячейку при помощи оператора присваивания «=»:

  Cells(2, 4).Value = 15  Cells(2, 4) = 15  Range("A1") = "Этот текст записываем в ячейку"  ActiveCell = 28 + 10*36  

Вместе с числами и текстом можно использовать переменные. Примеры здесь и ниже приведены для активного листа. Для неактивных листов дополнительно необходимо указывать имя листа, как в разделе «Обращение к ячейке».

Чтение информации из ячейки

Считать информацию из ячейки в переменную можно также при помощи оператора присваивания «=»:

  Sub Test()  Dim a1 As Integer, a2 As Integer, a3 As Integer  Range("A3") = 6  Cells(2, 5) = 15  a1 = Range("A3")  a2 = Cells(2, 5)  a3 = a1 * a2  MsgBox a3  End Sub  

Точно также можно обмениваться информацией между ячейками:

  Cells(2, 2) = Range("A4")  

Очистка значения ячейки

Очищается ячейка от значения с помощью метода ClearContents. Кроме того, можно присвоить ячейке значение нуля или пустой строки:

  Cells(10, 2).ClearContents  Range("D23") = 0  ActiveCell = ""  

Выбор диапазона ячеек относительно текущей ячейки (Microsoft Excel)

Обратите внимание:
Эта статья написана для пользователей следующих версий Microsoft Excel: 97, 2000, 2002 и 2003. Если вы используете более позднюю версию (Excel 2007 или новее), , этот совет может не сработать для вас . Чтобы ознакомиться с версией этого совета, написанного специально для более поздних версий Excel, щелкните здесь: Выбор диапазона ячеек относительно текущей ячейки.

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

Диапазон (Cells (Selection.Row, 1), Cells (Selection.Row, 3)). Выбрать
 

Свойство Cells возвращает объект, представляющий определенную строку и столбец (отдельную ячейку) листа. В этом случае Cells используется дважды для определения определенного диапазона ячеек. Первый экземпляр возвращает первую ячейку текущей строки, а второй возвращает третью ячейку текущей строки. Таким образом, диапазон становится ячейками с первой по третью текущей строки.

Вместо использования свойства Cells для указания местоположения вы можете использовать свойство Offset для выполнения большей части той же задачи. Рассмотрим следующий код:

Диапазон (ActiveCell.Offset (-3, 5), ActiveCell.Offset (0, 10)). Выберите
 

Использует свойство Offset объекта ActiveCell, чтобы указать диапазон относительно текущей выбранной ячейки. Свойство Offset принимает аргумент, представляющий строку и столбец смещения. Отрицательное значение представляет вверх (для строки) и влево (для столбца).Положительное значение — вниз (для строки) и вправо (для столбца). Вы также можете использовать значение 0, которое представляет текущую строку или столбец.

ExcelTips — ваш источник экономичного обучения работе с Microsoft Excel.
Этот совет (2268) применим к Microsoft Excel 97, 2000, 2002 и 2003. Вы можете найти версию этого совета для ленточного интерфейса Excel (Excel 2007 и более поздних версий) здесь: Выбор диапазона ячеек относительно текущего Ячейка .

Автор Биография

Аллен Вятт

Аллен Вятт — всемирно признанный автор, автор более чем 50 научно-популярных книг и многочисленных журнальных статей. Он является президентом Sharon Parq Associates, компании, предоставляющей компьютерные и издательские услуги. Узнать больше о Allen …

Слово зависает при работе с большим количеством картинок

Разве вы не ненавидите, когда Word зависает? Эта проблема возникает у Лори, когда она работает с картинками в своих документах.Есть какие-то …

Узнать больше

Настройки масштабирования макета страницы

Настройку масштаба, при которой вы просматриваете документ, иногда можно сохранить вместе с документом. Этот совет объясняет, как зум …

Узнать больше

Создание ярлыка панели задач Flip 3D

Flip 3D легко вызвать с клавиатуры. Если вы человек, который любит пользоваться мышью, вы можете создать …

Узнать больше

Excel VBA Loop — простые макросы Excel

Одинарный контур | Двойная петля | Тройная петля | Выполнить цикл

Цикл — один из самых мощных методов программирования.Цикл в Excel VBA позволяет перебирать диапазон ячеек с помощью всего нескольких строк кода.

Одноконтурный

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

Поместите командную кнопку на лист и добавьте следующие строки кода:

Dim i как целое число

Для i = от 1 до 6
Ячейки (i, 1). Value = 100
Next i

Результат при нажатии кнопки команды на листе:

Объяснение: Строки кода между For и Next будут выполнены шесть раз.Для i = 1 Excel VBA вводит значение 100 в ячейку на пересечении строки 1 и столбца 1. Когда Excel VBA достигает следующего i, он увеличивает i на 1 и переходит обратно к оператору For. Для i = 2 Excel VBA вводит значение 100 в ячейку на пересечении строки 2 и столбца 1 и т. Д.

Примечание: рекомендуется всегда делать отступ (табуляцию) кода между словами For и Next. Это упрощает чтение вашего кода.

Двойная петля

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

Поместите командную кнопку на лист и добавьте следующие строки кода:

Dim i как целое число, j как целое число

Для i = от 1 до 6
Для j = от 1 до 2
Ячейки (i, j). Значение = 100
Далее j
Далее i

Результат при нажатии кнопки команды на листе:

Объяснение: Для i = 1 и j = 1 Excel VBA вводит значение 100 в ячейку на пересечении строки 1 и столбца 1. Когда Excel VBA достигает Next j, он увеличивает j на 1 и переходит обратно к For j. заявление.Для i = 1 и j = 2 Excel VBA вводит значение 100 в ячейку на пересечении строки 1 и столбца 2. Затем Excel VBA игнорирует Next j, поскольку j выполняется только от 1 до 2. Когда Excel VBA достигает Next i , он увеличивает i на 1 и возвращается к выражению For i. Для i = 2 и j = 1 Excel VBA вводит значение 100 в ячейку на пересечении строки 2 и столбца 1 и т. Д.

Тройной контур

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

Поместите командную кнопку на лист и добавьте следующие строки кода:

Dim c как целое, i как целое, j как целое

Для c = от 1 до 3
Для i = от 1 до 6
Для j = от 1 до 2
Рабочие листы (c) . Cells (i, j) .Value = 100
Далее j
Далее i
Далее c

Объяснение: Единственное изменение, внесенное по сравнению с кодом для двойного цикла, состоит в том, что мы добавили еще один цикл и добавили рабочие листы (c).перед ячейками, чтобы получить двумерный диапазон на первом листе для c = 1, втором листе для c = 2 и третьем листе для c = 3. Загрузите файл Excel, чтобы увидеть этот результат.

Цикл выполнения цикла

Помимо цикла For Next, в Excel VBA есть и другие циклы. Например, цикл Do While. Код, помещенный между Do While и Loop, будет повторяться до тех пор, пока часть после Do While имеет значение true.

1. Поместите командную кнопку на лист и добавьте следующие строки кода:

Dim i как целое число
i = 1

Do while i <6
Ячейки (i, 1).Значение = 20
i = i + 1
Петля

Результат при нажатии кнопки команды на листе:

Объяснение: пока i меньше 6, Excel VBA вводит значение 20 в ячейку на пересечении строки i и столбца 1 и увеличивает i на 1. В Excel VBA (и в других языках программирования) символ ‘ = ‘значит становится. Это не означает равных. Итак, i = i + 1 означает, что i становится i + 1. Другими словами: возьмите текущее значение i и прибавьте к нему 1.Например, если i = 1, i становится 1 + 1 = 2. В результате значение 20 будет помещено в столбец A пять раз (а не шесть, потому что Excel VBA останавливается, когда i становится равным 6).

2. Введите числа в столбец A.

3. Поместите командную кнопку на рабочий лист и добавьте следующие строки кода:

Dim i как целое число
i = 1

Do While Cells (i, 1) .Value <> «»
Cells (i, 2) .Value = Cells (i, 1) .Value + 10
i = i + 1
Петля

Результат при нажатии кнопки команды на листе:

Объяснение: пока Cells (i, 1).Значение не пустое (<> означает не равно), Excel VBA вводит значение в ячейку на пересечении строки i и столбца 2, что на 10 больше, чем значение в ячейке на пересечении строки i и столбца 1 . Excel VBA останавливается, когда i равно 7, потому что Cells (7, 1) .Value пусто. Это отличный способ перебрать любое количество строк на листе.

Получение значений из другого листа в Excel с помощью VBA

Excel чрезвычайно мощен, даже если он использует только базовые функции добавления данных в ячейки и электронные таблицы, сортировки и обработки этих данных в прекрасную работу клеточного удовольствия.Тем не менее, Excel способен на гораздо больше, чем позволяет стандартное редактирование содержимого ячеек, с помощью магии сценариев Visual Basic для приложений или VBA .

Мы кратко рассмотрим один простой пример использования VBA в Excel для извлечения значений из одного рабочего листа , но это лишь верхушка айсберга того, что Excel и VBA могут достичь вместе.

Доступ к редактору Visual Basic

Для начала вам нужно найти Visual Basic Editor в Excel. Это будет зависеть от того, какая версия Excel у вас запущена, но для большинства современных версий Visual Basic Editor можно найти на вкладке Developer на ленте меню.

После обнаружения просто щелкните Macros , введите имя макроса (мы будем использовать MySum для этого примера), затем щелкните create , чтобы открыть редактор и начать создание сценария.

Скрипт

В редакторе вы увидите объявление вашего макроса MySum , который представляет собой просто стандартную функцию vba , которую мы можем редактировать для выполнения наших ставок.

В нашем примере, возможно, у нас есть рабочий лист с именем Sales , и мы хотим использовать этот макрос для суммирования (, сумма ) первых 25 значений в столбце B .

Таким образом, чтобы начать наш скрипт, нам нужно выбрать соответствующий рабочий лист с именем Sales , а затем, используя этот выбранный объект , сузить наш выбор, захватив определенные ячейки (известные как диапазон ячеек ), которые мы хотим общее.

  Sub MySum ()
    Рабочие листы («Продажи»).Диапазон ("B1: B25")
Конец подписки
  

Теперь нам действительно нужно получить общую сумму или сумму всех этих значений, поэтому мы оборачиваем предыдущий вызов объекта в WorksheetFunction of Sum , например:

  Sub MySum ()
    WorksheetFunction.Sum (Worksheets ("Продажи"). Диапазон ("B1: B25"))
Конец подписки
  

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

Для этого воспользуемся объектом ActiveCell , установив для его значения Value значение, равное нашей общей сумме:

  Sub MySum ()
    ActiveCell.Value = WorksheetFunction.Sum (Рабочие листы ("Продажи"). Диапазон ("B1: B25"))
Конец подписки
  

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *