1. Trang chủ
  2. » Công Nghệ Thông Tin

TÀI LIỆU LẬP TRÌNH - TẠO BẢNG HÀM CHO RIÊNG BẠN pdf

23 1K 11
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 23
Dung lượng 290,5 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Bạn chỉ cần phải thay đổi ở một nơi, các hàm tuỳ chỉnh, để cập nhật tất cả các công thức trong bảng tính của bạn Các bước sau đây cho thấy làm thế nào để tạo ra và sử dụng một hàm tùy ch

Trang 1

A/ Tạo Bảng Hàm Cho Riêng Bạn

Nếu bạn có một phép tính toán phức tạp mà bạn sử dụng thường xuyên trong Excel, bạn không cần phải nhập nhiều lần một công thức dài phức tạp Thay vào đó, bạn có thể tạo các hàm của riêng bạn để thực hiện các tính toán Bạn có thể sử dụng hàm để tạo ra các công thức được dễ dàng hơn để nhập và duy trì

Để tạo các hàm riêng của bạn, bạn làm việc trong Microsoft Visual Basic ® cho các ứng dụng (VBA) VBA- Visual Basic for Appliction là một ngôn ngữ lập trình được xây dựng vào Excel VBA rất linh hoạt và có thể làm tất cả mọi thứ mà các công thức Excel có thể làm, và nhiều hơn thế nữa

Ví dụ, bạn có một công thức phức tạp để tìm hoa hồng bán hàng, nơi tỷ lệ phần trăm hoa hồng thay đổi dựa trên nhiều yếu tố như những gì các sản phẩm và kết hợp của các sản phẩm đại diện bán hàng, cho dù các đại diện bán hàng nhỏ hơn hạn ngạch và tổng doanh số bán hàng cho quý Thay vì nhập công thức dài mà mất tất cả những yếu tố này vào tài khoản mỗi khi bạn muốn tính hoa hồng để bán, bạn có thể tạo ra một lệnh chức năng tùy chỉnh

Sau đó, bạn phải gõ các công thức hoa hồng của bạn là tên hàm của bạn

Hơn nữa, thời gian tới công ty thay đổi các quy tắc cho cách tính hoa hồng, bạn không phải tìm và thực hiện thay đổi tẻ nhạt cho tất cả các công thức phức tạp Bạn chỉ cần phải thay đổi ở một nơi, các hàm tuỳ chỉnh, để cập nhật tất cả các công thức trong bảng tính của bạn

Các bước sau đây cho thấy làm thế nào để tạo ra và sử dụng một hàm tùy chỉnh Để ví dụ đơn giản, chức năng này tính toán hoa hồng bán hàng tại một tỷ lệ đúng 6% Để tận dụng đầy đủ các hàm tùy chỉnh, bạn sẽ thay thế mã VB phức tạp hơn cho tính toán tỷ lệ phần trăm đơn giản

1 Trên menu Tools, chọn Macro, và sau đó nhấp vào Visual Basic Editor

2 Trên menu Insert trong cửa sổ Microsoft Visual Basic, bấm vào Module

3 Trong cửa sổ Modulen, gõ code cho hàm của bạn Ví dụ, một hàm để tính toán một khoản hoa

hồng bán hàng 6% có thể trông như thế này:

Dòng đầu tiên trong ví dụ trên tạo ra một hàm tên là Lệnh, thực hiện các tính toán của nó về một

số hoặc tham chiếu trong ô chức năng này sử dụng một biến, MyNum, để lưu trữ số lượng hoặc giá trị từ các ô Dòng thứ hai tính toán giá trị của hàm lệnh bằng cách nhân số hoặc tham chiếu trong ô (MyNum) bằng 0, 06 (một hàm phức tạp hơn có thể có một vài dòng mã để thực hiện các phép tính của nó) Dòng thứ ba kết thúc đoạn mã hàm

4 Trên menu File, nhắp chuột vào Close and Return to Microsoft Excel

Trang 2

5 Trên bảng tính, hãy sử dụng hàm của bạn trong các công thức như bạn sẽ làm ở bất kỳ hàm tính nào Ví dụ, bạn có thể sử dụng hàm lệnh để tính hoa hồng trên doanh số bán hàng:

Một hàm mà bạn tạo ra theo cách này có thể chỉ để sử dụng trong một bảng tính mà bạn tạo ra nó Nếu bạn muốn sử dụng hàm khác, bạn có thể sao chép mã cho hàm VBA module trong bảng tính khác, hoặc, nếu bạn là một chuyên viên thiết kế, bạn có thể sao chép các hàm vào một bảng tính được

sử dụng như một thư viện hàm và biên soạn bảng tính như là một chương trình bổ xung

Lưu ý

Ví dụ trong bài viết này rất đơn giản để cho bạn thấy những điều cơ bản Để tạo các hàm phức tạp trong VBA, bạn sẽ cần một số kiến thức về các mẫu đối tượng VBA trong Excel 2000, các cấu trúc ngôn ngữ VB, và môi trường VBA Ví dụ, bạn muốn khai báo đối số và trả lại kiểu dữ liệu trong bất

kỳ hàm bạn tạo ra Để bắt đầu học về lập trình trong VBA, xem các tài liệu tham khảo dưới đây

Xem Thêm Thông Tin

Để biết thêm thông tin về việc tạo công thức bao gồm các hàm, chức năng nhập công thức trong Office Assistant hoặc trên tab Answer Wizard trong cửa sổ Trợ giúp của Excel, và sau đó nhấn

Search.

Để biết thông tin về việc tạo các hàm tùy chỉnh trong VBA, gõ quy trình hàm trong Office Assistant hay trên tab Answer Wizard trong cửa sổ trợ giúp của Excel Visual Basic, nhấp vào tìm kiếm- Search, và sau đó nhấp vào chủ đề "Viết một quy trình tạo hàm" và "Câu Lệnh Hàm."

Nếu bạn chưa quen với lập trình VBA, thì Hướng dẫn của trương trình Microsoft Office 2000/Visual Basic có thông tin để giúp bạn từ bước đầu Để biết thông tin làm thế nào để có được

hướng dẫn này, bạn gõ dòng chữ programmer’s guide-(chương trình hướng dẫn) trong Office Assistant hoặc trên tab Answer Wizard trong cửa sổ trợ giúp, sau đó nhấn Search.

CÁCH TẠO HÀM USER DEFINED TRONG EXCELL

1 Mở một workbook mới

2 Vào VBA (Nhấn Alt + F11)

3 Chèn một module mới (Insert> Module)

Trang 3

4 Copy và Paste ví dụ hàm user defined trong excel

5 Thoát khỏi VBA (Nhấn Alt + Q)

6 Sử dụng hàm (nó sẽ xuất hiện trong hộp thoại Paste Function, Shift + F3, theo thể loại “User

Defined ")

Nếu bạn muốn sử dụng một UDF (Universal Disk Format) ở nhiều hơn một workbook, bạn có thể lưu các hàm của bạn trong phần bổ xung tùy chỉnh của riêng bạn Đơn giản chỉ cần lưu file excel của bạn có chứa VBA của bạn có hàm như một file bổ xung (có đuôi xla) Sau đó nhập phần bổ xung

(Tools> Add-Ins ) Cảnh báo! Hãy cẩn thận về cách sử dụng hàm tùy chỉnh trong bảng tính mà bạn

cần phải chia sẻ với người khác Nếu họ không có phần bổ xung của bạn thì các hàm sẽ không hoạt động khi họ sử dụng các bảng tính

LỢI ÍCH CỦA HÀM USER DEFINED

Tạo một hàm toán học tùy chỉnh hoặc phức tạp

Đơn giản hóa công thức mà nếu không sẽ rất dài "công thức lớn"

Chẩn đoán như việc kiểm tra định dạng ô.

Tùy chỉnh thao tác text-văn bản

Công thức ma trận nâng cao và hàm ma trận.

GIỚI HẠN CỦA UDF

• Không thể "ghi" một UDF Excel như ghi một macro Excel

• Thêm hạn chế hơn so với macro VBA thông thường UDF không thể thay đổi cấu trúc hoặc định dạng của một bảng tính hoặc ô tính

• Nếu bạn gọi (lệnh gọi) một hàm khác hay macro từ một UDF, các macro đó có mức hạn chế tương tự thấp hơn UDF

• Không thể đặt một giá trị trong ô tính ngoại trừ ô (hoặc vùng) đó có chứa công thức Nói cách khác, giới hạn của UDF có nghĩa là để được sử dụng như "công thức ", không nhất thiết phải là

"macro"

• Hàm user defined excel trong VBA thường chậm hơn nhiều so với hàm biên soạn trong C + +

hoặc FORTRAN (ngôn ngữ lập trình bậc cao……)

• Thường khó khăn để theo dõi lỗi

• Nếu bạn tạo một phần bổ xung có chứa giới hạn UDF của bạn, bạn có thể quên rằng bạn đã sử dụng một hàm tùy chỉnh, làm giảm khả năng chia sẻ của file

 Thêm các hàm user defined cho workbook của bạn sẽ kích hoạt cờ hiệu "macro" (thực hiện

vấn đề bảo mật trong: Tools> Macros> Security )

VÍ DỤ VỀ HÀM USER DEFINED

Ví dụ 1: Tạo địa chỉ đến một đường liên kết

Trang 4

Ví dụ sau có thể hữu ích khi giải nén siêu liên kết từ bảng hoặc đường link đã được sao chép vào Excel, khi làm phần xử lý cuối cùng trên các truy vấn web Excel, hoặc nhận được địa chỉ email từ danh sách các siêu liên kết “mailto”

Hàm này cũng là một ví dụ về cách sử dụng đối số UDF Excel tùy chọn Cú pháp cho hàm tùy

chỉnh Excel này là:

=LinkAddress(cell,[default_value])

Để xem một ví dụ về cách làm việc với đối số tùy chọn, tìm kiếm lệnh IsMissing trong các tập

tin trợ giúp của Excel VBA (nhấn F1)

Function LinkAddress(cell As range, _

Optional default_value As Variant)

'Lists the Hyperlink Address for a Given Cell

'If cell does not contain a hyperlink, return default_value

Ví dụ này cho thấy làm thế nào để tận dụng lợi thế của một số hàm có sẵn trong VBA để làm một

số thao tác văn bản hoàn chỉnh Điều gì nếu bạn đã có một chuỗi số điện thoại định dạng sau:

1-800-999-9999 và bạn muốn lấy ra chỉ 3 ký số đầu tiên?

UDF này lấy các đối số như lấy chuỗi văn bản, số lượng các phần tử mà bạn muốn lấy (n), và dấu phân cách như một ký tự (ví dụ "-") Cú pháp của ví dụ về hàm user defined trong Excel là:

=GetElement(text,n,delimiter)

Ví dụ: Nếu cột B3 chứa dãy số "1-800-333-4444" và cột C3 chứa công thức

=GetElement(B3,3,"-") thì cột C3 sẽ cho ra kết quả là “333” Để đưa “333” về dạng số ta nên sử dụng

=VALUE(GetElement(B3,3,"-"))

Function GetElement(text As Variant, n As Integer, _

delimiter As String) As String

'Returns the nth element from a delimited text string

Trang 5

Dim txt, str As String

Dim count, i As Integer

'Manipulate a copy of the text string

txt = text

'If a space is used as the delimiter, remove extra spaces

If delimiter = Chr(32) Then txt = Application.Trim(txt)

'Add a delimiter to the end of the string

If Right(txt, Len(txt)) <> delimiter Then

Trang 6

End Function

Ví dụ 3: UDF cho một Công thức Toán Tùy Chỉnh

Một trong những điều thú vị về tuỳ chỉnh các hàm Excel là bạn có thể đơn giản hóa các công thức Excel mà nếu không sẽ sử dụng lồng nhau câu lệnh Nếu thì Ví dụ, giả sử chúng ta có một hàm

đơn giản, bao gồm phép chia, nhưng công thức thay đổi khi số chia là số 0 Tương tự, chúng ta muốn làm một số kiểm tra lỗi, vì vậy chúng ta không kết thúc với # VALUE trên tất cả các bảng tính

của chúng ta Đối với ví dụ này, chúng ta sẽ xem xét các công thức KEI (Keyword Effectiveness Index mục lục hiệu ứng của từ khóa), mà khi một cái gì đó trông đơn giản như thế này khi sử dụng tích hợp hàm Excel:

IF(supply=0,demand^2,demand^2/supply)

Cú pháp cho hàm user defined là:

=KEI(demand,supply,[default_value])

Function KEI(demand As Variant, supply As Variant, _

Optional default_value As Variant) As Variant

'Keyword Effectiveness Index (KEI)

B / Xây dựng một Excel Add-In (phần bổ xung cho Hàm Excel)

Giới thiệu về Add-Ins

Trang 7

Một Excel Add-in là một tập tin (thường có đuôi mở rộng là xla hoặc xll) mà Excel có thể nhập vào khi nó khởi động Các tập tin có chứa mã (VBA trong trường hợp phần đuôi mở rộng là xla) mà

có thêm hàm bổ xung cho Excel, thường ở dạng các hàm mới

Add-Ins cung cấp một phương pháp tối ưu về gia tăng sức mạnh của Excel và chúng là những phương tiện lý tưởng để phân loại các hàm tùy chỉnh của bạn Excel được gắn với một trạng thái khác của Add-Ins sẵn sàng cho bạn nhập liệu và bắt đầu sử dụng, và nhiều Add-Ins thứ ba có sẵn

Bài viết này cho bạn thấy làm thế nào để viết một hàm tùy chỉnh bằng cách sử dụng Excel VBA

và làm thế nào để lưu và cài đặt nó như là một Add-In Các hàm tùy chỉnh thường được gọi là UDFs (User Defined Functions – các hàm xác định đối tượng sử dụng) Nếu bạn chưa bao giờ xây dựng một UDF trước đây thì đây là một nơi tốt để bạn bắt đầu, hoặc bạn muốn xem hướng dẫn Cách viết hàm VBA cơ bản trong Excel là phần giải thích cụ thể với những ví dụ khác nữa

Trong Excel hướng dẫn, Tính toán tuổi của một người - Giới thiệu về câu lệnh với hàm IF lồng

(dùng nhiều hàm IF trong một câu lệnh) tôi trình bày cách sử dụng câu lệnh IF để tính toán tuổi của một ai đó từ ngày sinh của họ Thật ngạc nhiên, Excel không có sẵn hàm cho một yêu cầu mang tính phổ biến này, vì vậy nó-UDF là một ứng viên lý tưởng cho một chức năng tùy chỉnh

Nếu bạn đã yên tâm với chức năng-hàm tùy chỉnh bằng văn bản, bạn có thể đi thẳng vào phần giải thích làm thế nào để lưu UDFs của bạn như là một Add-In [xem tiếp phần Add-In]

Thực hành viết Hàm

Một Add-In có thể chứa nhiều UDFs như bạn muốn, và bạn có thể thêm nhiều hơn chỉ đơn giản bằng cách mở và chỉnh sửa các file Add-In

Bước 1: Thêm/chèn một Mã Module cho một Workbook

Khởi động Excel hoặc, nếu bạn đã có Excel mở, hãy tạo một bảng tính mới (rỗng):

Mở Visual Basic Editor từ Tools> Macro> Visual Basic Editor (nhấn tổ hợp phím ALT + F11) Trong cửa sổ Project Explorer chọn VBAProject (Book1) Sự lựa chọn này sẽ cho ra một workbook

Trang 8

Từ menu Insert chọn Module Thao tác này đã thêm một mã module rỗng cho bảng tính được

chọn Bạn cũng sẽ thấy module xuất hiện trong cửa sổ Project Explorer

Bước 2: Nhập Mã

Trong cửa sổ mã hãy gõ dòng

Function Age(DoB As Date)

…và nhấn ENTER Các trình soạn thảo VB tự động đi nhập dòng "End Function" (kết thúc hàm)

và đặt con trỏ của bạn trong khoảng trống giữa chúng (giữa dòng lệnh và dòng End Function)

Khi bạn gõ chữ “Function” là để xác định các mã được viết tiếp theo cũng là 1 hàm, trái ngược

với một macro hay một thường trình con (subroutine), được biểu thị bằng chữ “Sub”.

Tiếp theo là tên của hàm, bạn có thể đặt bằng bất cứ tên gì mà bạn thích Nhưng hãy đặt tên hàm đơn giản và dễ diễn tả Không cho phép có khoảng trống giữa chữ và dấu gạch chân (ví dụ Age_in_years) hoặc, tốt hơn là, với chữ viết hoa (ví dụ AgeInYears)

Một hàm thông thường cần một hoặc nhiều "đối số" chúng được đưa vào trong dấu ngoặc sau tên hàm Một đối số là một phần thông tin mà hàm sử dụng để thực hiện các phép tính của nó Khi trình bày các đối số nó là sự thực hành tốt để xác định loại dữ liệu Trong trường hợp này chỉ có một đối số

là cần thiết, ngày sinh sẽ được sử dụng để tính toán tuổi của người đó Để đơn giản hơn, tôi đã gọi là đối số này là "DoB" Các đối số hoạt động giống như các biến trong các macro Khi bạn gõ từ "As" sau tên của đối số thì trình soạn thảo VB sẽ hiển thị cho bạn một danh sách có sẵn Bạn có thể nhập hoặc chọn từ danh sách

Giữa dòng lệnh hàm và câu khai báo End Function (kết thúc hàm), bấm TAB (để đoạn mã tiếp theo thụt đầu dòng cho rõ ràng, dễ nhìn) và gõ dòng

Trang 9

Age = Int((Date - DoB) / 365.25)

Điều này cho biết cách viết hàm trong Excel Nó sử dụng hai hàm có sẵn, hàm INT (là hàm để lấy một dãy số - hoặc số nguyên – số ngoài kết quả) và hàm DATE (một hàm Visual basic tương đương

với hàm TODAY trong excel là hàm trả về ngày hiện tại)

Câu lệnh đó được đọc là… "Lấy ngày hiện tại trừ đi ngày sinh Chia kết quả đó cho 365,25 và hiển thị các đáp án như là một số nguyên bằng cách làm tròn xuống."

Hàm được hoàn tất hiển thị như thế này:

Function Age(DoB As Date)

Age = Int((Date - DoB) / 365.25)

End Function

Bước 3: Kiểm tra Hàm

Bạn có thể kiểm tra hàm ngay lập tức Chuyển sang Excel trong một bảng tính mới (một bảng tính tương tự mà bạn đang sử dụng để tạo ra mã module của hàm) nhập một ngày vào ô tính Trong 1 ô khác nhập vào hàm của bạn, cách nhập tương tự như bạn nhập hàm có sẵn của Excel, ví dụ như = Age (A1)

Một UDF có giá trị để mở các bảng tính bất cứ khi nào bảng tính chủ (bảng tính có chứa các module code của UDF) được mở Tuy nhiên, nếu bạn cố gắng sử dụng hàm trong một bảng tính khác thì bạn có thể gặp phải trục trặc

Các bảng tính khác không thể tìm thấy hàm mà bạn tạo nên xuất hiện báo lỗi # NAME? Để tránh

điều này xảy ra bạn có thể thêm tên bảng tính của máy chủ (book1) vào hàm để Excel biết được nơi tìm thấy hàm

Trang 10

Cách này vẫn cho ra kết quả nhưng rất phiền hà và chứng minh một trong những lý do giải thích tại sao nơi tốt nhất cho các hàm tùy chỉnh của bạn là bên trong một Excel Add-In (với một số ngoại lệ xem thêm tại http://www.fontstuff.com/vba/vbatut03.htm#caution#caution.)

Thêm tính năng cho hàm

Cho phép cho Thiếu dữ liệu

Một điều bất lợi của nhiều hàm là khi bạn chuẩn bị một bảng tính trước khi nhận dữ liệu của nó (ví dụ như trong một mẫu mà bạn muốn các hàm được đặt ở vị trí sẵn sàng để tính dữ liệu nhập vào của người dùng) các hàm cố gắng để tính toán các ô trống, thường báo lỗi hay kết quả vô nghĩa Nếu

hàm Age của chúng ta tính toán một ô trống vẫn tạo ra một kết quả, trong trường hợp này là 102

(năm hiện tại là 2002) Điều này xảy ra bởi vì nó có giá trị của ô trống là 0, và diễn giải số 0 như là ngày 0 tháng một năm 1900 Điều này là hợp lý với Excel vì ngày đầu tiên nó biết là ngày 1, tháng một năm 1900

Thông thường bạn sẽ cố gắng để dự đoán hàm này bằng cách nhập vào tuổi của bạn như là một

phần của câu lệnh hàm IF Ví dụ = IF (ISBLANK (A1 ),"", age (A1)) Câu lệnh IF cho biết Excel

dùng để nhập một giá trị của "con số 0" (được đại diện bởi "") nếu ô dữ liệu là trống nhưng để tính

toán hàm Age nếu nó chứa một giá trị

Điều này làm việc tốt, nhưng bạn có thể tránh cho mình những rắc rối bằng việc kết hợp xử lý sự

cố loại này vào trong mã của chính hàm đó

Sửa đổi hàm các mã như sau:

Function Age(DoB As Date)

Trang 11

Tăng thêm độ chính xác cho hàm

Phép tính được sử dụng trong ví dụ trên là rất chính xác, nhưng không hoàn toàn chính xác Nó hoạt động trên nguyên tắc có số một trung bình là 365,25 ngày trong một năm (thường là 365 ngày nhưng là 366 ngày mỗi 4 năm) vì vậy chia tuổi của người với ngày là 365,25 thì nên cho tuổi của họ vào trong nhiều năm

Các hoạt động này gần như ổn mọi lúc nhưng cũng có lỗi dù rất hiếm Nếu người đó có ngày sinh nhật là ngày hôm nay và được sinh ra vào một năm là bội số của 4 năm trước thì kết quả tính sẽ cho

ra là 1 năm Một khả năng nhỏ, nhưng nếu chúng ta sẽ làm điều đó chúng ta cũng có thể làm điều đó đúng!

Trong hướng dẫn Tính toán tuổi của một người - Giới thiệu về câu lệnh với hàm IF lồng tôi trình bày cách dùng câu lệnh IF trong Excel để tính tuổi của một ai đó từ ngày sinh của họ với độ chính xác hoàn toàn Tôi có thể làm như vậy trong VBA cho hàm tùy chỉnh của mình (mặc dù cú pháp của một câu lệnh VBA IF là hơi khác nhau trong Excel) nhưng tôi thích sử dụng một câu lệnh CASE hơn Excel không có câu lệnh CASE nhưng VBA thì có Tôi thấy câu lệnh CASE dễ tính hơn câu lệnh IF

để tính toán khi sự logic là hơi phức tạp

Sau đây là mã cho hàm cải tiến của tôi:

Function Age(DoB As Date)

Ngày đăng: 01/08/2014, 19:20

TỪ KHÓA LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w