Читання та запис значень комірок
Свайпніть щоб показати меню
Найбільш базова дія 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
Використовуйте .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 керує другим аспектом.
Завдання
- Написати
Sub, який зчитує Customer та Total для замовлення ORD1003 у дві змінні та виводить їх уMsgBox. - Змінити Status для ORD1002 на "Shipped" за допомогою Cells(row, column) замість Range.
- Застосувати
NumberFormat = "$#,##0.00"до стовпців Unit Price і Total, а також "0%" до стовпця Discount %.
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робить усі три рядки короткими та послідовними.
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
Дякуємо за ваш відгук!
Запитати АІ
Запитати АІ
Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат
Читання та запис значень комірок
Найбільш базова дія 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
Використовуйте .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 керує другим аспектом.
Завдання
- Написати
Sub, який зчитує Customer та Total для замовлення ORD1003 у дві змінні та виводить їх уMsgBox. - Змінити Status для ORD1002 на "Shipped" за допомогою Cells(row, column) замість Range.
- Застосувати
NumberFormat = "$#,##0.00"до стовпців Unit Price і Total, а також "0%" до стовпця Discount %.
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робить усі три рядки короткими та послідовними.
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
Дякуємо за ваш відгук!