Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Вивчайте Читання та запис значень комірок | Робота з Даними в Excel
Excel VBA для автоматизації бізнесу

Читання та запис значень комірок

Свайпніть щоб показати меню

Найбільш базова дія VBA — це зчитування та запис значення комірки:

Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("Orders")
 
Debug.Print ws.Range("C2").Value      ' Acme Corp
ws.Range("I2").Value = "Shipped"      ' overwrite the Status cell

Cells(row, column) виконує те саме, але з використанням чисел замість літер — це дійсно корисно під час циклів, оскільки змінна циклу є числом, а не літерою:

Debug.Print ws.Cells(2, 3).Value      ' same as Range("C2") — row 2, column 3
ws.Cells(2, 9).Value = "Shipped"      ' same as Range("I2")

Value проти Formula проти Formula2

Виглядають взаємозамінними, але це не так:

ws.Range("H2").Value                  ' returns the calculated result: 202.5
ws.Range("H2").Formula                ' returns the formula as typed: =E2*F2*(1-G2)
ws.Range("H2").Formula2               ' like Formula, but supports newer dynamic-array functions
Рис.3.1

Використовуйте .Value, якщо потрібно лише число. Використовуйте .Formula, якщо записуєте формулу в комірку — наприклад, для програмного створення стовпця Total замість ручного введення та копіювання:

ws.Range("H2").Formula = "=E2*F2*(1-G2)"

NumberFormat

Керує відображенням значення без зміни самого числа:

ws.Range("F2:F6").NumberFormat = "$#,##0.00"     ' currency
ws.Range("G2:G6").NumberFormat = "0%"              ' percentage
ws.Range("B2:B6").NumberFormat = "dd/mm/yyyy"      ' date

Це важливіше, ніж здається — комірка може містити 0.1 і одночасно відображати "10%", і лише NumberFormat керує другим аспектом.

Завдання

  1. Написати Sub, який зчитує Customer та Total для замовлення ORD1003 у дві змінні та виводить їх у MsgBox.
  2. Змінити Status для ORD1002 на "Shipped" за допомогою Cells(row, column) замість Range.
  3. Застосувати NumberFormat = "$#,##0.00" до стовпців Unit Price і Total, а також "0%" до стовпця Discount %.
Підказка
expand arrow

1. Зчитування Customer та Total для ORD1003

  • Спочатку визначте, в якому рядку знаходиться ORD1003 — порахуйте вниз по таблиці з початкових даних розділу 3: ORD1001 — це рядок 2, отже ORD1003 — ще на два рядки нижче.
  • Customer та Total — це різні стовпці. Порахуйте по заголовку (Order ID, Order Date, Customer, Product, Qty, Unit Price, Discount %, Total, Status), щоб знайти відповідну літеру для кожного.
  • Оголосіть одну змінну для імені клієнта (String) і одну для суми (Double), явно звертайтеся до аркуша так, як показано в розділі 3 (ThisWorkbook.Worksheets("Orders")), і зчитайте значення кожної клітинки за допомогою .Value у відповідну змінну.
  • Об'єднайте обидві змінні в одне повідомлення за допомогою & перед передачею їх у MsgBox — ви вже робили це у розділі 2.

2. Зміна Status для ORD1002 через Cells(row, column)

  • Cells(row, column) приймає лише числа, а не літери — ви вже знаєте, в якому рядку знаходиться ORD1002; для стовпця просто порахуйте позицію (Status — останній, дев'ятий стовпець).
  • Це пряме присвоєння: .Cells(row, column).Value = "Shipped", не потрібно нічого зчитувати перед цим.

3. Застосування NumberFormat до трьох стовпців

  • NumberFormat задається для діапазону так само, як і для окремої клітинки — просто застосуйте його до F2:F6, H2:H6 та G2:G6 (перевірте, яка літера відповідає Unit Price, Total та Discount % перед введенням).
  • Для кожного стовпця — окремий рядок, оскільки Unit Price/Total потребують грошового формату, а Discount % — відсоткового; не намагайтеся застосувати обидва формати в одному рядку.
  • Звернення до діапазону через вже оголошену змінну ws робить усі три рядки короткими та послідовними.
Розв'язок
expand arrow
Sub ExploreOrdersData()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Worksheets("Orders")

    ' --- 1. Read ORD1003's Customer and Total ---
    Dim customerName As String
    Dim orderTotal As Double

    customerName = ws.Range("C4").Value
    orderTotal = ws.Range("H4").Value

    MsgBox "Customer: " & customerName & " | Total: " & orderTotal

    ' --- 2. Change ORD1002's Status using Cells(row, column) ---
    ws.Cells(3, 9).Value = "Shipped"

    ' --- 3. Apply NumberFormat to Unit Price, Total, and Discount % ---
    ws.Range("F2:F6").NumberFormat = "$#,##0.00"   ' Unit Price
    ws.Range("H2:H6").NumberFormat = "$#,##0.00"   ' Total
    ws.Range("G2:G6").NumberFormat = "0%"           ' Discount %
End Sub
Все було зрозуміло?

Як ми можемо покращити це?

Дякуємо за ваш відгук!

Секція 3. Розділ 1

Запитати АІ

expand

Запитати АІ

ChatGPT

Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат

Читання та запис значень комірок

Найбільш базова дія VBA — це зчитування та запис значення комірки:

Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("Orders")
 
Debug.Print ws.Range("C2").Value      ' Acme Corp
ws.Range("I2").Value = "Shipped"      ' overwrite the Status cell

Cells(row, column) виконує те саме, але з використанням чисел замість літер — це дійсно корисно під час циклів, оскільки змінна циклу є числом, а не літерою:

Debug.Print ws.Cells(2, 3).Value      ' same as Range("C2") — row 2, column 3
ws.Cells(2, 9).Value = "Shipped"      ' same as Range("I2")

Value проти Formula проти Formula2

Виглядають взаємозамінними, але це не так:

ws.Range("H2").Value                  ' returns the calculated result: 202.5
ws.Range("H2").Formula                ' returns the formula as typed: =E2*F2*(1-G2)
ws.Range("H2").Formula2               ' like Formula, but supports newer dynamic-array functions
Рис.3.1

Використовуйте .Value, якщо потрібно лише число. Використовуйте .Formula, якщо записуєте формулу в комірку — наприклад, для програмного створення стовпця Total замість ручного введення та копіювання:

ws.Range("H2").Formula = "=E2*F2*(1-G2)"

NumberFormat

Керує відображенням значення без зміни самого числа:

ws.Range("F2:F6").NumberFormat = "$#,##0.00"     ' currency
ws.Range("G2:G6").NumberFormat = "0%"              ' percentage
ws.Range("B2:B6").NumberFormat = "dd/mm/yyyy"      ' date

Це важливіше, ніж здається — комірка може містити 0.1 і одночасно відображати "10%", і лише NumberFormat керує другим аспектом.

Завдання

  1. Написати Sub, який зчитує Customer та Total для замовлення ORD1003 у дві змінні та виводить їх у MsgBox.
  2. Змінити Status для ORD1002 на "Shipped" за допомогою Cells(row, column) замість Range.
  3. Застосувати NumberFormat = "$#,##0.00" до стовпців Unit Price і Total, а також "0%" до стовпця Discount %.
Підказка
expand arrow

1. Зчитування Customer та Total для ORD1003

  • Спочатку визначте, в якому рядку знаходиться ORD1003 — порахуйте вниз по таблиці з початкових даних розділу 3: ORD1001 — це рядок 2, отже ORD1003 — ще на два рядки нижче.
  • Customer та Total — це різні стовпці. Порахуйте по заголовку (Order ID, Order Date, Customer, Product, Qty, Unit Price, Discount %, Total, Status), щоб знайти відповідну літеру для кожного.
  • Оголосіть одну змінну для імені клієнта (String) і одну для суми (Double), явно звертайтеся до аркуша так, як показано в розділі 3 (ThisWorkbook.Worksheets("Orders")), і зчитайте значення кожної клітинки за допомогою .Value у відповідну змінну.
  • Об'єднайте обидві змінні в одне повідомлення за допомогою & перед передачею їх у MsgBox — ви вже робили це у розділі 2.

2. Зміна Status для ORD1002 через Cells(row, column)

  • Cells(row, column) приймає лише числа, а не літери — ви вже знаєте, в якому рядку знаходиться ORD1002; для стовпця просто порахуйте позицію (Status — останній, дев'ятий стовпець).
  • Це пряме присвоєння: .Cells(row, column).Value = "Shipped", не потрібно нічого зчитувати перед цим.

3. Застосування NumberFormat до трьох стовпців

  • NumberFormat задається для діапазону так само, як і для окремої клітинки — просто застосуйте його до F2:F6, H2:H6 та G2:G6 (перевірте, яка літера відповідає Unit Price, Total та Discount % перед введенням).
  • Для кожного стовпця — окремий рядок, оскільки Unit Price/Total потребують грошового формату, а Discount % — відсоткового; не намагайтеся застосувати обидва формати в одному рядку.
  • Звернення до діапазону через вже оголошену змінну ws робить усі три рядки короткими та послідовними.
Розв'язок
expand arrow
Sub ExploreOrdersData()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Worksheets("Orders")

    ' --- 1. Read ORD1003's Customer and Total ---
    Dim customerName As String
    Dim orderTotal As Double

    customerName = ws.Range("C4").Value
    orderTotal = ws.Range("H4").Value

    MsgBox "Customer: " & customerName & " | Total: " & orderTotal

    ' --- 2. Change ORD1002's Status using Cells(row, column) ---
    ws.Cells(3, 9).Value = "Shipped"

    ' --- 3. Apply NumberFormat to Unit Price, Total, and Discount % ---
    ws.Range("F2:F6").NumberFormat = "$#,##0.00"   ' Unit Price
    ws.Range("H2:H6").NumberFormat = "$#,##0.00"   ' Total
    ws.Range("G2:G6").NumberFormat = "0%"           ' Discount %
End Sub
Все було зрозуміло?

Як ми можемо покращити це?

Дякуємо за ваш відгук!

Секція 3. Розділ 1
some-alt