Tải bản đầy đủ (.docx) (27 trang)

Chiêu thứ 41 50(excel) - Tổng hợp các thủ thuật excel

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.06 MB, 27 trang )

Chiêu 41: Bẫy lỗi để trống dữ liệu
Bằng cách dùng Data Validation, chúng ta có thể bảo đảm rằng 1 trường dữ liệu nào đó nhất thiết phải nhập
liệu, không được để trống. Thí dụ ta tạo 1 bảng dữ liệu 2 trường, với tên trường là Tên và Bộ phận nằm ở 2 ô
A1 và B1.
Bên dưới, bạn muốn rằng bất kỳ người nào nhập liệu vào bảng cũng phải nhập đủ 2 nội dung này. Nếu bạn
bắt đầu với 1 bảng dữ liệu có sẵn những ô bị để trống, cần điền đầy vào, hãy xem phần sau:
Điền dữ liệu vào các ô trống:
Một số các công cụ hoặc hàm của Excel không làm việc với ô trống như Pivot table, Sorting, Filter, hàm
SumProduct, … Giả sử bạn có 1 cột A với 1 đống những ô trống nằm xen kẽ nhau. bạn hãy nhấn F5, hoặc
Control – G, nhấn Special, chọn ô chọn blank, và nhấn OK. Bây giờ tất cả các ô trống đã được chọn. Nếu bạn
muốn điền vào đó những giá trị hoặc công thức giống ô liền ngay trên của nó, hãy nhấn dấu bằng (=), nhấn
mũi tên lên, rồi nhấn Ctrl-Enter.
Bây giờ đến phần chính:
Tô chọn từ ô A3 đến ô B100 chẳng hạn, theo độ lớn của vùng bạn định nhập dữ liệu. Mở hộp thoại Data –
Validation, trong tab setting chọn Custom trong ô Allow, rồi điền công thức sau vào khung công thức:
=AND(COUNTA($A$2:$A2)=ROW()-2,COUNTA($B$2:$B2)=ROW( )-2)
Chú ý các ký hiệu $ liên quan đến tham chiếu tương đối và tuyệt đối, nếu sai hoặc thiếu, validation không
hoạt động như ý muốn ráng chịu.


Vào tab Alert, gõ tiêu đề cho thông báo cảnh báo trong ô Title, gõ câu thông báo của bạn vào ô Error
Message, chọn Stop trong khung Error Style.

Bây giờ mỗi khi bạn nhập thiếu dòng trên, mà nhảy xuống nhập dòng dưới, bạn sẽ được cảnh báo như sau:[/

Chiêu 42: Giảm danh sách xổ xuống của Validation, sau khi chọn 1.
Rất hữu ích cho người dùng Excel khi bạn cho họ 1 danh sách để chọn bằng Validation, nhưng cái danh sách
này tự động ngắn lại mỗi khi họ chọn 1 mục trong danh sách, để khỏi phải lựa chọn trong 1 danh sách quá
dài, đồng thời tránh việc nhập trùng dữ liệu (đôi khi cần thiết).
Bước 1:
Trong 1 sheet bất kỳ (thí dụ sheet1) bạn có 1 danh sách trong vùng A1:A10. Bạn hy đặt name cho danh sách


này bằng cách tô chọn vùng danh sách, rồi gõ tên MyList trong hộp namebox.
Bước 2:


Trong 1 sheet khác mà bạn muốn dùng validation dựa vào danh sách MyList nói trên, tô chọn vùng bạn cần,
mở menu Data – Validation, chọn Allow là List, source là =MyList, rồi nhấn OK.
Bước 3: mở cửa sổ VBA của sheet đó, copy đoạn code sau:

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim strVal As String
Dim strEntry As String
On Error Resume Next
strVal = Target.Validation.Formula1
If Not strVal = vbNullString Then
strEntry = Target
Application.EnableEvents = False
With Sheet1.Range("MyList")
.Replace What:=strEntry, _
Replacement:="", LookAt:=xlWhole, _
SearchOrder:=xlByRows, MatchCase:=False
.Sort Key1:=.Range("A1"), Order1:=xlAscending, _
Header:=xlNo, OrderCustom:=1, MatchCase:=False, _
Orientation:=xlTopToBottom
.Range("A1", .Range("A65536").End(xlUp)).Name = "MyList"
End With
End If
Application.EnableEvents = True
On Error GoTo 0
End Sub


Đóng cửa sổ VBA rồi quay về Excel. Thử chọn 1 mục trong validation, sang 1 ô khác và xổ cái validation
xuống, bạn sẽ thấy mục vừa chọn xong không còn trong list nữa.
Lưu ý trong code, khi nói đến name MyList, phải xác định rõ Sheet1.MyList, vì nếu không, VBA sẽ cho rằng
name này nằm chung sheet với sheet chứa code và sẽ không tìm thấy và báo lỗi.

Chiêu 43: Thêm các danh sách có sẵn và cả danh sách tự tạo vào menu chuột phải
Tạo một danh sách để fill trong Excel thông qua Fill handle là việc làm rất hay để nhanh chóng nhập danh sách các chuỗi số
hoặc chuỗi văn bản vào bảng tính. Excel đã xây dựng sẵn một số Custom List về các ngày trong tuần (Sun - Sat), danh sách
các tháng (Jan – Dec) và các chuỗi số nhưng bạn cũng có thể tự tạo thêm các danh sách mới cho mình. Phần này sẽ hướng
dẫn bạn các tạo thêm Custom List cho Fill Handle.
Trước tiên, bạn cần nhập vào danh sách các phần tử cần đưa vào Custom List trên bảng tính. Ví dụ như bạn nhập và 26
chữ cái trong các ô A1:A26 trên Sheet1. Sau đó nhấn vào nút Office ➝ Excel Options ➝ Popular ➝ Edit Custom Lists
(E2003: Tools ➝ Options ➝ Custom Lists). Nhấp chọn nút nằm bên trái nút Import và dùng chuột quét chọn vùng dữ liệu
A1:A26. Sau đó nhấn nút Import và OK. Kể từ lúc này danh sách các chữ cái sẽ có thể sử dụng để fill trong tất cả bảng tính
trên máy tính này.


Tiếp theo, để đưa các Custom List vào trong thực đơn ngữ cảnh thì bạn nhấn tổ hợp ALT+F11 rồi vào Insert ➝ Module. Sau
đó, bạn nhập vào đoạn mã như sau:
Code:
Sub AddFirstList()
Dim strList As String
strList = Application.CommandBars.ActionControl.Caption
If Not strList Like "*...*" Then Exit Sub
ActiveCell = Left(strList, InStr(1, strList, ".", vbTextCompare) - 1)
End Sub[/highlight]
Bạn kích chuột hai lần lên ThisWorkbook trong cửa sổ VBAProject và nhập vào đoạn mã sau:
[highlight=VB]
Private Sub Workbook_SheetBeforeRightClick _

(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
Dim cBut As CommandBarButton
Dim lListCount As Long
Dim lCount As Long
Dim strList As String
Dim MyList


On Error Resume Next
With Application
lListCount = .CustomListCount
For lCount = 1 To lListCount
MyList = .GetCustomListContents(lCount)
strList = .CommandBars("Cell").Controls(MyList(1) & "..." & _
MyList(UBound(MyList))).Caption
.CommandBars("Cell").Controls(strList).Delete
Set cBut = .CommandBars("Cell").Controls.Add(Temporary:=True)
With cBut
.Caption = MyList(1) & "..." & MyList(UBound(MyList))
.Style = msoButtonCaption
.OnAction = "AddFirstList"
End With
Next lCount
End With
On Error GoTo 0
End Sub

Đóng cửa sổ VBE và lưu bảng tính lại. Sau đó nhấp phải chuột vào một ô nào đó trên bảng tính, bạn sẽ thấy các Custom
List dựng sẵn và do bạn tạo xuất hiện trong trình đơn ngữ cảnh.



Muốn sử dụng, bạn chỉ cần nhấn chuột phải vào ô chọn, rồi chọn 1 trong các list hiện ra trong menu ngữ
cảnh, bạn sẽ có giá trị thứ nhất của list. Sau đó kéo cái Fill handle để fill list như mọi khi.

Chiêu thứ 44: Thay địa chỉ dữ liệu bằng tên.
Mặc dù các ô trong Excel đã được định thứ tự sẵn ngay từ đầu, tuy nhiên, sẽ thật dễ dàng biết bao nếu như
chúng được nhớ bằng tên, chẳng hạn như, bạn sẽ thấy mã số hàng hóa có tính gợi mở hơn là A1:A100 chứ
phải không?
Excel sử dụng cùng một kỹ thuật để định danh cho ô lẫn cho dãy, đó là sử dụng Name box (hộp Name) ở
phía ngoài cùng bên trái thanh công thức. Và để đặt tên cho một dãy, bạn hãy chọn dãy bạn muốn, sau đó,
bạn hãy đánh một cái tên bạn mong muốn vào Name box và nhấn phím Enter.


Bạn có thấy mũi tên ở phía bên phải Name box không? Khi bạn nhấn vào đó, sẽ có một danh sách các tên
được xổ xuống để bạn có thể tìm những tên của ô hay của dãy mà bạn đã sử dụng.

Cũng vậy, nếu như bạn chọn ô hoặc dãy nào đã được định danh thì ngay ở Name box, bạn sẽ không còn thấy
địa chỉ tham chiếu nữa mà thay vào đó là tên của ô hay dãy đó.
Bạn cũng có thể sử dụng tên thay vì địa chỉ ngay tại thanh công thức. Chẳng hạn, nếu bạn đặt tên cho F4 là
“number4”. Vậy, bạn có thể đánh là =number4 thay vì phải đánh là =F4 như trước. Tương tự vậy, giả sử như


bạn đặt tên cho A1:A10 là “soluong” và bạn cần tính tổng của nó. Bạn có thể dùng công thức =SUM(soluong)
thay vì phải dùng là =SUM(A1:A10).



Như vậy, bạn có thể thấy là kỹ thuật định danh này đặc biệt vô cùng hữu ích khi mà bảng tính của bạn ngày
một “phình to” hơn và phức tạp hơn.


Chiêu thứ 45: Sử dụng cùng một cái tên cho dãy ở những worksheet khác nhau.
Thỉnh thoảng, sẽ thật tiện lợi biết bao nếu sử dụng cùng một cái tên cho cùng một địa chỉ cho nhiều
worksheet khác nhau nhưng vẫn chung một workbook.
Thông thường, khi bạn sử dụng tên cho dãy xác định ở một worksheet xác định, tất nhiên là cùng chung một
workbook, nếu như tên đó đã được dùng rồi thì bạn sẽ không được dùng lại nó để định danh cho một dãy
khác ở một worksheet khác. Mặc dù vậy, bạn vẫn có thể sử dụng một số kỹ thuật để “qua mặt”.
Giả sử bạn có một workbook chứa ba worksheet khác nhau lần lượt mang tên là Sheet1, Sheet2 và Sheet3.
Và bạn muốn sử dụng cái tên “MyRange” để tham chiếu đến A1:A10 trong Sheet1, A1:A10 trong Sheet2 và
cả A1:A10 trong Sheet3. Bạn có thể làm thế này, sử dụng Name box như chiêu số 44, bạn hãy đặt tên
Sheet1!MyRange cho dãy A1:A10 trong Sheet1, tương tự Sheet2!MyRange trong Sheet2, Sheet3!MyRange
trong Sheet3.
Như vậy, khi bạn xổ danh sách tên trong Name box ra, tất cả những gì bạn thấy chỉ là tên MyRange. Và khi
bạn chọn nó, bạn sẽ được tham chiếu trực tiếp đến A1:A10 của chính worksheet bạn đang kích hoạt mà
không hề ảnh hưởng gì đến worksheet khác.
Bạn cũng có thể kiểm tra bằng cách vào Formulas -> Defined Names -> Name Manager, bạn sẽ thấy được


các tên dãy mà bạn đã tạo (với Excel 2003 là Insert -> Name -> Define, bạn sẽ chỉ thấy duy nhất một cái
tên và nó tham chiếu trực tiếp đến worksheet đang được kích hoạt).

Nếu tên worksheet của bạn có khoảng trắng, chẳng hạn như: Danh Sach, bạn không thể định danh cho
A1:A10 trong worksheet Danh Sach bằng cách gõ Danh Sach!MyRange, mà bạn phải gõ là ‘Danh Sach’!
MyRange. Thậm chí cả với tên worksheet không có khoảng trắng, bạn cũng có thể làm tương tự (chẳng hạn
‘DanhSach’!MyRange). Do đó, cách tốt nhất là bạn cứ dùng dấu nháy đơn cả khi tên worksheet có khoảng
trắng hay không có khoảng trắng.
Sử dụng tham chiếu tương đối
Thông thường, dãy mà bạn đặt tên sẽ có địa chỉ tham chiếu tuyệt đối. Mặc dù vậy, bạn không nhất thiết phải
sử dụng tham chiếu tuyệt đối. Bạn hãy làm các thao tác như sau:



1. Chọn ô A11, nhấn chuột phải chọn Name a Range (với Excel 2003, chọn Insert -> Name ->
Define).

2. Tại dòng “Name:”, gõ tên “GPENumber” (với Excel 2003, dòng đó tên là “Names in
Workbook:”).

3. Tại dòng “Refers To:”, gõ =A$1:A$10 và chọn OK.

4. Bạn hãy tạo một bảng dữ liệu như trong hình dưới đây.


5. Tại ô A11, gõ =SUM(GPENumber).
6. Tại ô B11, cũng gõ =SUM(GPENumber).
Kết quả bạn nhận được tại A11 là 55 và tại B11 là 10, bởi vì khi bạn định danh A$1:A$10, bạn đã sử dụng
tham chiếu tương đối cho cột và tham chiếu tuyệt đối cho hàng.

Bạn cũng nên lưu ý rằng, dù cho bạn dùng =SUM(GPENumber) ở một worksheet khác, nó vẫn sẽ tham chiếu
đến worksheet mà bạn đã dùng để định danh, chẳng hạn như trong trường hợp trên thì worksheet đã được
dùng khi định danh mang tên Sheet1.
Đơn giản hóa tổng: Nếu bạn muốn đơn giản hóa tổng, tức là mỗi khi bạn dùng tên, nó sẽ tự động cộng 10
ô đầu tiên trong cột lại với nhau, bạn hãy làm như sau:


1. Bạn hãy giả lập lại toàn bộ các bước 1, 2, 3 và 4 như đã từng làm phía trên. Tuy nhiên, ở bước

2, bạn đặt tên là “GPESum” và ở bước 3, tại dòng “Refers To:”, gõ =SUM(A$1:A$10) thay vì là
=A$1:A$10.
2. Tại ô A11, gõ =GPESum.
3. Tại ô B11, cũng gõ =GPESum.


Kết quả bạn nhận được cũng như trước, tuy vậy, công thức mà bạn phải gõ thì đã được lược giản đi rất nhiều.
Qua đây, bạn có thể thấy rằng, chỉ vài bước kết hợp đơn giản giữa địa chỉ tham chiếu tương đối, địa chỉ tham
chiếu tuyệt đối cùng một vài hàm, bạn đã có thể tiết kiệm rất nhiều công sức cho chính mình.

Chiêu thứ 46: Sử dụng tên để tạo hàm tự tạo
Mặc dù tham chiếu dữ liệu bằng tên thì rất tiện lợi, thỉnh thoảng nó cũng hữu ích với cả việc dùng tên để lưu
trữ giá trị hằng số hay một công thức nào đó, đặc biệt kể cả nếu bạn dùng để tạo một hàm VBA tự tạo nào
đó.
Giả sử bạn có tỷ suất thuế là 10% và bạn cần nó trong suốt quá trình tính toán của mình. Thay vì bạn cứ
phải gõ 10% hoặc 0.1 vào từng công thức, bạn có thể dùng tên TaxRate và Excel sẽ hiểu nó là 0.1, bằng
cách:

1. Chọn thẻ Formulas -> chọn Defined Names -> Define Name (với Excel 2003 thì là Insert ->
Name -> Define).

2. Ở dòng “Names:”, gõ TaxRate.
3. Ở dòng “Refers To:”, gõ =0.1 rồi nhấn Add.
Một trong những ưu điểm lớn nhất khi sử dụng cách này, đó là, chẳng hạn như tỷ suất thuế có thay đổi thì
bạn chỉ cần vào lại thẻ Formulas -> Defined Names -> Define Name (Excel 2003: Insert -> Name -> Define)
rồi chọn tên TaxRate và sau đó chỉnh lại cho phù hợp mà không cần phải cất công rà từng công thức một để
thay đổi.
Bên cạnh việc dùng giá trị hằng số như trên, bạn cũng có thể sử dụng công thức ở dòng Refers To trong bảng
Name. Giả sử như bạn muốn tạo lập một công thức mà khi bạn gõ vào một ô, nó sẽ tự động lấy tổng (SUM)
của 10 ô phía trên ô bạn vừa gõ. Bạn sẽ làm như sau:

1. Chọn A11 -> Click chuột phải -> chọn Name a Range (với Excel 2003, Insert -> Name ->
Define).

2. Tại dòng “Name:”, gõ TongCong và tại dòng “Refers To:”, gõ =SUM(A1:A10). Sau đó chọn OK.
3. Gõ 10 con số bất kỳ trong 10 ô phía dưới liên tiếp mà con số bắt đầu có thể là ở bất kỳ hàng

nào, cột nào. Giả sử ở đây tôi gõ từ 1 đến 10 lần lượt vào C2:C11.

4. Sau đó, tại hàng thứ 11 mà ở ví dụ trên, tôi gõ tại ô C12: =TongCong.


Kết quả mà bạn thấy, đó chính là, nó sẽ tự động cộng liên tục 10 ô phía trên ô mà bạn gõ =TongCong.

Nếu bạn muốn tạo một tên chứa công thức mà nó không bị giới hạn bởi 10 ô, nhưng nó sẽ lấy toàn bộ tất cả
các ô phía trên ô chứa công thức =TongCong. Bạn làm như sau:

1. Chọn B11 -> Chọn thẻ Formulas -> Ở Defined Names, chọn Name Manager (với Excel 2003,
chọn Insert -> Name -> Define) -> Chọn tên TongCong mà bạn đã tạo từ ví dụ trước.

2. Ở dòng “Refers To:”, bạn sẽ thấy nó ghi là =SUM(Sheet1!B1:B10), bạn hãy sửa lại là
=SUM(B$1:B10).

Bây giờ bạn hãy thử lại đi, hãy tạo một bảng dữ liệu bất kỳ theo một cột nào đó, và ở ô tiếp theo trong cột
đó, bạn hãy dùng =TongCong, lập tức bạn sẽ thấy rằng, nó sẽ cộng toàn bộ các ô phía trên ô bạn nhập
=TongCong lại bắt đầu từ ô số 1, bất kể là nó có bao nhiêu ô đi chăng nữa. Đó là bởi vì bạn đã đặt tham
chiếu tuyệt đối vào hàng 1.


Sử dụng tên với Intersect (tạm dịch: phép giao)
Bằng việc kết hợp dùng tên với toán tử giao (một trong những đặc trưng cơ bản của Excel mà rất ít người
biết đến), bạn có thể dễ dàng tạo nên được một hàm dò tìm phức tạp. Nếu bạn vẫn còn chưa rành về phương
thức Intersect hoạt động ra sao, chúng ta hãy cùng thực hành một ví dụ nho nhỏ:

1. Tại A1, gõ tiêu đề là “Họ Tên”, tương tự với B1 là “Lương (đơn vị: triệu đồng)”, C1 là “Nghề
nghiệp”.


2. Bạn hãy đặt hai cái tên lần lượt ở A2 và A3, chẳng hạn như tôi đặt là “Nguyễn Văn A” và “Trần
Thị B”.

3. Hãy cho hai mức lương lần lượt vào B2 và B3, ở đây tôi đặt là “10” và “20”.
4. Hai người này làm nghề gì? Tôi đặt lần lượt là “Giáo viên” và “Bác sĩ”.
5. Sau đó, bạn hãy quét chọn A1:C3 -> vào thẻ Formulas -> ở Defined Names, chọn Create from
Selection (với Excel 2003, chọn Insert -> Name -> Create). Hãy bảo đảm rằng lựa chọn “Top
row” và “Left column” đã được đánh dấu check -> Nhấn OK.


Kể từ đây, khi bạn gõ công thức theo cú pháp =Tên Tiêu_đề (lưu ý là nếu tên có khoảng trắng hoặc các dấu
như “(“, “:” thì bạn phải thay là dấu gạch dưới _), bạn sẽ nhận được thông tin như bạn mong muốn.

Cũng xin lưu ý khác là, khoảng trắng giữa Tên và Tiêu đề là rất quan trọng, vì nó thể hiện cho Excel biết
rằng, đây là toán tử giao.
Dựa trên những lý thuyết trên, bạn có thể kết hợp nó với tên để làm cho công việc đơn giản đi cũng như giúp
bạn dễ sử dụng, dễ đọc và dễ nhớ hơn. Bạn hãy thử làm như sau:


Đầu tiên, bạn hãy tạo một bảng dữ liệu như hình dưới đây và bạn hãy dùng cách Create from Selection như
bước 5 ở phía trên:

Sau đó, bạn hãy làm các thao tác như sau:

1. Bấm chuột phải vào một ô bất kỳ, chọn Name a Range (với Excel 2003, chọn Insert -> Name ->
Define).
2. Gõ một cái tên vào “Name:”, ở đây tôi gõ là DuyAnhJob
3. Tại “Refers To:”, gõ =Thái_Duy_Anh Nghề_nghiệp rồi chọn OK.

Từ đây, bạn có thể chỉ cần dùng =DuyAnhJob là bạn sẽ có ngay thông tin nghề nghiệp của Thái Duy Anh.

Bạn có thể linh hoạt biến hóa hơn để phục vụ nhu cầu của bạn, chắc chắn, nó sẽ giúp cho công việc của bạn
được dễ dàng hơn.

Chiêu thứ 47: Tạo dãy có thể mở rộng và thu hẹp
Nếu bạn có nhu cầu cần phải cập nhật và thêm dữ liệu, hoặc nếu bạn đang làm việc với biểu đồ và
PivotTables, bạn sẽ muốn tạo một tên cho dãy động, mà bản thân nó có thể mở rộng hoặc thu hẹp cho phù
hợp với dữ liệu của bạn.
Để hiểu hơn về cách hoạt động của tên dãy động, điều đầu tiên bạn cần phải làm quen chính là hàm OFFSET
của Excel.
Chúng ta sẽ bắt đầu với một tên dãy động đơn giản. Giả sử như nếu trong cột A của bạn có 10 dòng liên tiếp
chứa dữ liệu, tức là bạn phải có một cái tên của dãy A1:A10. Hãy làm theo bước sau để có được nó:
Vào thẻ Formulas, ở Defined Names, chọn Define Name (Excel 2003: Insert -> Name -> Define) và đánh
MyRange vào dòng “Names:”. Tại dòng “Refers To:”, bạn hãy gõ
=OFFSET($A$1,0,0,COUNTA($A$1:$A$100),1) và sau đó OK.


Bạn cần lưu ý rằng, khi bạn sử dụng hàm COUNTA, bạn phải cưỡng lại cơn cám dỗ thực hiện hết toàn bộ cột,
bởi vì nếu làm như vậy, bạn đang vô tình bắt hàm COUNTA phải đếm cả hàng ngàn dòng một cách vô ích.
Sau khi bạn làm xong công việc trên, bạn hãy cho một vài dữ liệu vào cột A. MyRange sẽ thực hiện công việc
hợp tất cả các dòng có dữ liệu liên tục lại với nhau, bắt đầu từ A1. Tuy vậy, tên dãy động sẽ không hiện ra
trong hộp Name (Name box). Nhưng, bạn vẫn có thể biết được kết quả của MyRange bằng cách gõ thẳng tên
MyRange vào hộp Name và nhấn Enter, lập tức sẽ xuất hiện một vùng chọn báo hiệu cho bạn biết. Tất nhiên,
bạn cũng có thể vào thẻ Home, ở Editting, chọn Find & Select rồi chọn Go To…(Ctrl + G). Sau đó, bạn hãy gõ
MyRange vào dòng “Reference:” và OK.

Bạn có thể thấy rằng, tên dãy động của bạn ở ví dụ trên đã được ẩn mình phía sau hàm COUNTA là tham số
Height của hàm OFFSET.


Lưu ý rằng: hàm COUNTA sẽ đếm tất cả các ô không rỗng, bao gồm cả những ô có chứa công thức nhưng trả

về giá trị rỗng.
Nếu bạn có một danh sách bao gồm các dữ liệu kiểu số, và ở cuối danh sách ấy lại có lưu dữ liệu kiểu chuỗi.
Tất nhiên, bạn không muốn tên dãy động của bạn có chứa kiểu dữ liệu chuỗi ấy. Hãy dùng hàm COUNT thay
vì hàm COUNTA vì hàm COUNT chỉ đếm các dữ liệu kiểu số mà thôi.
Trong ví dụ dưới đây, bạn sẽ dùng tên dãy động để định nghĩa một bảng dữ liệu mà bạn muốn nó động. Để
làm điều đó, hãy điền công thức sau vào dòng “Refers To:”:
=OFFSET($A$1,0,0,COUNTA($A$1:$A$100),COUNTA($1:$1) )

Với công thức này, tên dãy động của bạn sẽ mở rộng không chỉ theo chiều dọc mà còn theo chiều ngang nữa.
Nếu bạn chắc chắn rằng số cột của bạn là cố định, bạn có thể thay hàm COUNTA thứ hai trong công thức
bằng một số nào đó.
Một vấn đề khá rắc rối khi sử dụng tên dãy động cho bảng dữ liệu là nếu cột dài nhất trong bảng lại không
phải là cột A như các bảng dữ liệu phổ biến khác, bạn sẽ làm gì? Để có thể khắc phục lỗi đó, hàm MAX sẽ là
một sự lựa chọn tốt. Bạn hãy tạo một bảng dữ liệu như hình dưới đây:


Nếu bạn dùng COUNTA, bạn sẽ nhận được kết quả là 3 ở cột A và điều đó sẽ dẫn đến kết quả sai. Do đó, bạn
cần dùng hàm MAX như sau:
=OFFSET($A$1,0,0,MAX($1:$1),COUNTA($1:$1))
Tiếp tục đến với một ví dụ khác, danh sách số của bạn lại có các ô rỗng và điều đó khiến cho bạn không thể
sử dụng hàm COUNT cũng như COUNTA, bởi vì khi sử dụng, nó sẽ ra một kết quả hoàn toàn sai so với số
dòng thực sự chứa dữ liệu. Để rõ hơn, bạn hãy tạo một bảng dữ liệu khác như hình dưới đây.
Bạn thấy đấy, bạn có tất cả 10 dòng chứa dữ liệu nhưng số thứ tự chỉ có 6, và do đó, tất nhiên, hàm COUNT
sẽ trả về kết quả là 6. Để khắc phục vấn đề này, bạn hãy sử dụng hàm MATCH. Hàm MATCH sẽ trả về cho
bạn một vị trí tương đối của một giá trị nào đó có trong mảng mà nó khớp với điều kiện có trong hàm. Với ví
dụ này, nếu bạn sử dụng hàm này như thế này: =MATCH(6,$A$1:$A$100,0), kết quả bạn nhận được sẽ là
11 vì giá trị 6 nằm ở dòng 11 trong cột A.

Một điều dễ nhận thấy rằng, khi bạn sử dụng hàm MATCH như một phần của tên dãy động, con số cuối cùng
của dãy chắc chắn là không dễ nhận biết. Bởi vậy, bạn cần yêu cầu hàm MATCH trả về giá trị gần đúng con

số lớn nhất bằng cách chỉnh tham số cuối cùng của hàm là 1.
Như ví dụ trên, vì bạn đã yêu cầu tìm chính xác giá trị 6, nhưng nếu bạn không biết giá trị lớn nhất là bao
nhiêu, bạn hãy làm thế này: =MATCH(1E+306,$A$1:$A$100,1)
Vậy, tổng kết lại phía trên, bạn sẽ có một công thức đầy đủ để điền vào dòng “Refers To:” là


=OFFSET($A$1,0,0,MATCH(1E+306,$A$1:$A$100,1),1).
Một kiểu biến thể khác, không chỉ dữ liệu kiểu số nhưng còn bao gồm cả kiểu chuỗi nữa, và tất nhiên là có cả
các ô rỗng xen giữa. Như vậy, hàm MATCH sẽ được thiết kế lại như sau: MATCH("*",$A$1:$A$100,-1).
Giờ đây bạn có thể dùng công thức dưới đây để vượt qua các ô rỗng và có thể lấy được toàn bộ dữ liệu bao
gồm cả kiểu số lẫn kiểu chuỗi trong bảng dữ liệu của chính bạn:
=MAX(MATCH("*",$A$2:$A$100,-1),MATCH(1E+306,$A$2:$A$100,1))
Áp dụng vào bảng dữ liệu, bạn có thể dùng công thức như sau vào tên dãy động:
=OFFSET($A$2,0,0, MAX(MATCH("*",$A$2:$A$100,-1),MATCH(1E+306,$A$2:$A$100,1)),1)
Để tổng kết lại tất cả các điều trên, giả sử chúng ta có một bảng dữ liệu trên cột A, bạn hãy tạo một cái tên
dãy động theo công thức như sau:
- Nếu toàn bộ bảng là dữ liệu kiểu số: =OFFSET($A$1,0,0,COUNT($A:$A),1)
- Nếu toàn bộ bảng là dữ liệu hoặc kiểu số hoặc kiểu chuỗi hoặc cả hai: =OFFSET($A$1,0,0,COUNTA($A:
$A),1)
- Nếu bảng có ô rỗng và dòng cuối cùng của bảng là một dữ liệu kiểu số:
=OFFSET($A$1,0,0,MATCH(1E+306,$A:$A))
- Nếu bảng có ô rỗng và dòng cuối cùng của bảng là một dữ liệu kiểu chuỗi: =OFFSET($A$1,0,0,MATCH("*",
$A:$A,-1))
Ngoài ra, bạn cũng có thể vận dụng công thức cho một số trường hợp khác như:
- Mở rộng bảng theo chiều dọc với độ dài là giá trị từ một ô khác (chẳng hạn như B1):
=OFFSET($A$1,0,0,$B$1,1)
- Mở rộng bảng theo chiều dọc với độ dài là tháng hiện tại: =OFFSET($A$1,0,0,MONTH(TODAY( )),1)
- Mở rộng bảng theo chiều dọc với độ dài là thứ tự tuần hiện tại trong năm:
=OFFSET($A$1,0,0,WEEKNUM(TODAY( )),1)
Tất nhiên, nó đòi hỏi bạn phải cài đặt Analysis ToolPak. Bạn có thể chọn nó bằng cách chọn nút Office ->

Excel Options -> Add-ins (Excel 2003: Tools -> Add-Ins).
Một bổ sung nho nhỏ về chiêu 47 (của Lê Duy Thương), đó là để có được một dãy động có khả năng mở rộng
hay thu hẹp tùy ý, bạn cũng có thể sử dụng công cụ có sẵn của Excel, đó chính là Table. Bằng cách vào thẻ
Insert -> Table, bạn hãy chọn dãy nguồn và từ đó, mỗi lần bạn thêm dữ liệu vào hàng kế tiếp hàng cuối
cùng của bảng, lập tức bảng sẽ "phình to" ra thêm và thậm chí, nếu bạn áp dụng với Data Validation (dùng


List trỏ vào bảng nguồn, giả sử như A2:A10) thì khi bảng phình to ra, Data Validation của bạn sẽ cho nguồn
là A2:A11 tương ứng.

Chiêu thứ 48: Sử dụng dãy động cách linh hoạt nhất
Một cái tên dãy động này có thể trú ngụ trong một cái tên dãy động khác, đây là điều vô cùng hữu ích cho
bạn trong nhiều vấn đề, chẳng hạn như khi bạn có một danh sách dài những cái tên.
Chúng ta hãy thử một ví dụ bằng việc lập một cái tên để khi gọi nó, nó sẽ tham chiếu đến những cái tên đã
được xếp thứ tự mà bắt đầu bằng chữ D.
Trước tiên, hãy tạo một bảng dữ liệu như hình dưới đây tại cột A và bạn nên nhớ rằng tên đã được xếp theo
thứ tự bảng chữ cái. Sau đó, bạn hãy làm tiếp những bước sau:

1. Chọn thẻ Formulas -> ở Defined Names, chọn Define Name (với Excel 2003, chọn Insert ->
Name -> Define).

2. Bạn hãy tạo một cái tên với tên gọi là Ten và sử dụng công thức:

=OFFSET($A$2,0,0,COUNTA($A$2:$A$1000),1) rồi sau đó nhấn OK.

3. Sau đó, tiếp tục tạo một cái tên khác với tên gọi là DTen và sử dụng công thức:

=OFFSET(INDIRECT(ADDRESS(MATCH("D*",Ten,0)+1,1)),0 ,0,COUNTIF(Ten,"D*"), 1) với D
chính là chữ cái đầu của những cái tên mà bạn muốn chọn rồi sau đó nhấn OK.


Sau khi làm xong, kết quả bạn nhận được sẽ như thế này:


Nếu bạn muốn, bạn có thể tạo từng cái tên tương ứng với từng chữ cái trong bảng chữ cái, chẳng hạn như
ATen, ĂTen, ÂTen,... Tuy vậy, cách làm đó quả thật là rất mất thời gian. Thay vì vậy, bạn có thể áp dụng
một cách khác là tạo một bảng lựa chọn các ký tự ngay trên ô của bảng tính và tên dãy động sẽ dựa vào ô
đó. Bạn có thể làm như sau:

1. Chọn một ô nào đó mà bạn không sử dụng tới, đặt tên cho ô đó là KyTu.
2. Chọn thẻ Data -> ở Data Tools, chọn Data Validation (với Excel 2003, chọn Data -> Validation).
3. Trong danh sách của dòng “Allow:”, chọn List và bạn gõ tất cả bảng chữ cái vào dòng “Source:”
như A*,Ă*,Â*,B*,… và sau đó nhấn OK.

4. Chọn thẻ Formulas -> ở Defined Names -> Define Name (với Excel 2003, chọn Insert -> Name

-> Define).
5. Đặt một cái tên như Ten và gõ công thức vào dòng “Refers To:” là
=OFFSET($A$2,0,0,COUNTA($A$2:$A$1000),1) và sau đó nhấn OK.
6. Tiếp tục tạo một cái tên khác với tên gọi là KyTuDau với công thức sử dụng là:
=OFFSET(INDIRECT(ADDRESS(MATCH(KyTu,Ten,0)+1,1)),0 ,0,COUNTIF(Ten, KyTu),1) và OK.
Bây giờ, bạn hãy tận hưởng thành quả của mình bằng việc lựa chọn một ký tự và xem thử cái tên của bạn
hoạt động thế nào nhé.



×