Các ô đang hoạt động trong excel

Bạn có thể sử dụng lối tắt đến phương thức

Set rng = Range("A1")
Set rng = Cells(1, 1)
Set rng = Range("NamedRange")
6, nhưng cách này kém hiệu quả hơn và thường nên tránh trong mã sản xuất

Set rng = [A1]
Set rng = [A1:B10]

Tất cả các ví dụ trên đề cập đến các ô trên trang tính đang hoạt động. Trừ khi bạn đặc biệt muốn chỉ làm việc với trang tính đang hoạt động, tốt hơn là bạn cũng nên Dim một biến

Set rng = Range("A1")
Set rng = Cells(1, 1)
Set rng = Range("NamedRange")
7

Dim ws As Worksheet
Set ws = Worksheets("Sheet1")
Set rng = ws.Cells(1, 1)
With ws
    Set rng = .Range(.Cells(1, 1), .Cells(2, 10))
End With

Nếu bạn muốn làm việc với

Set rng = Range("A1")
Set rng = Cells(1, 1)
Set rng = Range("NamedRange")
8, để rõ ràng, tốt nhất bạn nên nói rõ ràng. Nhưng hãy cẩn thận, vì một số phương pháp
Set rng = Range("A1")
Set rng = Cells(1, 1)
Set rng = Range("NamedRange")
7 thay đổi trang tính đang hoạt động

Set rng = ActiveSheet.Range("A1")

Một lần nữa, điều này đề cập đến sổ làm việc đang hoạt động. Trừ khi bạn đặc biệt muốn chỉ làm việc với

Set rng = Range("A1:B10")
Set rng = Range("A1", "B10")
Set rng = Range(Cells(1, 1), Cells(10, 2))
Set rng = Range("AnotherNamedRange")
Set rng = Range("A1").Resize(10, 2)
0 hoặc
Set rng = Range("A1:B10")
Set rng = Range("A1", "B10")
Set rng = Range(Cells(1, 1), Cells(10, 2))
Set rng = Range("AnotherNamedRange")
Set rng = Range("A1").Resize(10, 2)
1, tốt hơn là bạn cũng nên Dim biến
Set rng = Range("A1:B10")
Set rng = Range("A1", "B10")
Set rng = Range(Cells(1, 1), Cells(10, 2))
Set rng = Range("AnotherNamedRange")
Set rng = Range("A1").Resize(10, 2)
2

Set rng = [A1]
Set rng = [A1:B10]
0

Nếu bạn muốn làm việc với

Set rng = Range("A1:B10")
Set rng = Range("A1", "B10")
Set rng = Range(Cells(1, 1), Cells(10, 2))
Set rng = Range("AnotherNamedRange")
Set rng = Range("A1").Resize(10, 2)
0, để rõ ràng, tốt nhất bạn nên nói rõ ràng. Nhưng hãy cẩn thận, vì nhiều phương pháp
Set rng = Range("A1:B10")
Set rng = Range("A1", "B10")
Set rng = Range(Cells(1, 1), Cells(10, 2))
Set rng = Range("AnotherNamedRange")
Set rng = Range("A1").Resize(10, 2)
4 thay đổi sổ đang hoạt động

Set rng = [A1]
Set rng = [A1:B10]
3

Bạn cũng có thể sử dụng đối tượng

Set rng = Range("A1:B10")
Set rng = Range("A1", "B10")
Set rng = Range(Cells(1, 1), Cells(10, 2))
Set rng = Range("AnotherNamedRange")
Set rng = Range("A1").Resize(10, 2)
1 để chỉ cuốn sách chứa mã đang chạy

Set rng = [A1]
Set rng = [A1:B10]
5

Một đoạn mã phổ biến (xấu) là mở một cuốn sách, lấy một số dữ liệu rồi đóng lại

Điều này tệ đây

Set rng = [A1]
Set rng = [A1:B10]
6

Và nó sẽ tốt hơn như

Set rng = Range("A1")
Set rng = Cells(1, 1)
Set rng = Range("NamedRange")
0

Chuyển phạm vi cho các

Set rng = Range("A1:B10")
Set rng = Range("A1", "B10")
Set rng = Range(Cells(1, 1), Cells(10, 2))
Set rng = Range("AnotherNamedRange")
Set rng = Range("A1").Resize(10, 2)
6 và
Set rng = Range("A1:B10")
Set rng = Range("A1", "B10")
Set rng = Range(Cells(1, 1), Cells(10, 2))
Set rng = Range("AnotherNamedRange")
Set rng = Range("A1").Resize(10, 2)
7 của bạn dưới dạng các biến Phạm vi

Set rng = Range("A1")
Set rng = Cells(1, 1)
Set rng = Range("NamedRange")
1

Bạn cũng nên áp dụng các Phương thức (chẳng hạn như

Set rng = Range("A1:B10")
Set rng = Range("A1", "B10")
Set rng = Range(Cells(1, 1), Cells(10, 2))
Set rng = Range("AnotherNamedRange")
Set rng = Range("A1").Resize(10, 2)
8 và
Set rng = Range("A1:B10")
Set rng = Range("A1", "B10")
Set rng = Range(Cells(1, 1), Cells(10, 2))
Set rng = Range("AnotherNamedRange")
Set rng = Range("A1").Resize(10, 2)
9) cho các biến

Set rng = Range("A1")
Set rng = Cells(1, 1)
Set rng = Range("NamedRange")
2

Nếu bạn đang lặp qua một phạm vi ô, tốt hơn (nhanh hơn) là sao chép các giá trị phạm vi vào một mảng biến thể trước và lặp qua đó

Viết công thức trong Excel là một công việc tốn nhiều thời gian và phải lặp đi lặp lại. Vì sao chúng ta không sử dụng VBA để làm việc mà trở nên nhanh chóng, đơn giản hơn?

Cách thứ 1. Ghi vĩ mô

Đây là một cách đơn giản, thực hiện dễ dàng với những ai chưa biết viết mã tự động trong VBA. Việc cần làm chỉ là
  • Mở thẻ Nhà phát triển trong Excel lên
  • Bấm Ghi macro
  • Thực hiện viết mẫu 1 công thức trong Excel
  • Chọn Dừng ghi âm
  • Vào cửa sổ VBA để kiểm tra
Ví dụ như sau. Khi ghi lại Macro, thực thi hàm SUM tại ô A7 tính tổng cho vùng A2. A6 ta thu được đoạn mã

Tế bào hoạt động. FormulaR1C1 = “=SUM(R[-5]C. R[-1]C)”

Đoạn mã này hiểu thế nào? . is ô được kích hoạt, ô đang được chọn. Ở đây ô đang được chọn là ô A7. FormulaR1C1 thuộc tính gán công thức vào Ô/Dải ô dưới dạng tham chiếu R1C1 trong Excel =SUM(R[-5]C. R[-1]C) là công thức nội dung được chỉ định, trong đó
  • R[-5]C is Cách 5 dòng 0 cột tính lên phía trên. Vị trí đang chọn là A7 thì R[-5]C cho kết quả là A2
  • R[-1]C là cách 1 dòng 0 cột tính toán phía trên. Vị trí đang chọn là A7 thì R[-1]C cho kết quả là A6
Như vậy công thức này tương đồng với =SUM(A2. A6) Khi sử dụng Record Macro thì luôn cho chúng ta định dạng FormulaR1C1. Sau này nếu không quen đọc thì sẽ khó khăn cho chúng ta khi xác định nội dung công thức. Xem thêm. Hướng dẫn cách chuyển kiểu tham chiếu R1C1 trong Excel

Cách thứ 2. Sử dụng các thuộc tính Công thức khi viết mã trong VBA

Chúng ta có thể dựa vào cách Record Macro để biết nguyên tắc VBA gán công thức trong Excel như thế nào. Nhưng cách không áp dụng nhiều, do tham khảo R1C1 khó viết. Do đó, chúng ta có thể sử dụng Công thức thuộc tính (không phải Công thứcR1C1) và viết trực tiếp trong mã viết cửa sổ của VBA. Cú pháp khá đơn giản, bao gồm 3 phần
  • Phần 1. Vị trí ô/vùng ô sẽ đặt công thức. Xác định đính kèm theo tên Sheet, tên Workbook nếu cần
  • Phần 2. Thuộc tính. Công thức
  • Phần 3. Nội dung công thức cần gán vào ô/vùng ô. Nội dung công thức cần đặt trong dấu nháy kép
Ví dụ như sau. Nhưng công việc này cần chú ý những nội dung gì? .

Hướng dẫn cách gán công thức vào ô và tự động lấy kết quả của công thức Excel VBA