Trang 1 trên 1

Về hàm định dạng Format

Đã gửi: CN 15/04/2012 6:30 pm
gửi bởi truongphu
Tên bài viết: Về hàm định dạng Format
Tác giả: truongphu
Cấp độ bài viết: mới lạ
Tóm tắt: phát triển thêm các đối số của hàm


A- Mục A nầy chúng ta nhắc lại các kiến thức quen thuộc.

Hàm Format hay Format$ có cấu trúc: <Đối tượng chịu format>, <định dạng Format>
Sẽ trả về một giá trị String.

Mã: Chọn hết

MsgBox TypeName(Format(123, "#"))

Để đào sâu vấn đề, chúng ta chỉ chú trọng đối tượng chịu format là các con số, các đối tượng khác chỉ lướt hay bỏ qua.

A-1 Từ khóa ‘#’ trong định dạng.

# là phần NGUYÊN của đối tượng chịu format được làm tròn.
.# là phần thập phân của đối tượng chịu format được làm tròn.

Vậy khi <Đối tượng chịu format> là số Single hay Double, với #, ta thu được CHUỖI NGUYÊN làm tròn của số Single hay Double

Mã: Chọn hết

MsgBox Format(1235797875475.58, "#")

Có kết quả là 1235797875476

Bạn chú ý từ dùng: CHUỖI NGUYÊN của số Single hay Double
Nghĩa là kết quả trả về là String (chuỗi) và chỉ có phần nguyên làm tròn.
Và chuỗi 1235797875476 có giá trị số lớn hơn kiểu biến Long.
Tùy tình huống làm tròn mà kết quả trả về lớn hơn, bằng hay nhỏ hơn đối tượng chịu format

Mã: Chọn hết

MsgBox Format(475.58, "#.##")

Có kết quả là 475.58

Ở ví dụ trên. Phần nguyên (trước dấu chấm), ta viết nhiều từ khóa # là vô nghĩa, ví dụ sau đây không cần thiết:
MsgBox Format(475.58, "####.##")

Khi và chỉ khi muốn kết quả có ký hiệu String khác ở đầu chuỗi, ta mới viết một loạt dấu #; ví dụ:

Mã: Chọn hết

MsgBox Format(475.58, "0###.##")

kết quả là 0475.58

Mã: Chọn hết

MsgBox Format(475.58, "AB###.##")

kết quả là AB475.58
[Tổng các ký tự định dạng phải lớn hơn tổng các ký tự mà phần nguyên làm tròn thể hiện]

Riêng phần thập phân, từ khóa .# sẽ lấy số thập phân được làm tròn

Mã: Chọn hết

MsgBox Format(475.58, "#.#")

Kết quả là 475.6

Vì số 475.58 có 2 số thập phân, việc ghi nhiều hơn 2 dấu # trong trường hợp nầy là vô nghĩa, ví dụ sau đây không cần thiết:
MsgBox Format(475.58, "#.####")

Khi và chỉ khi muốn kết quả có ký hiệu String khác ở cuối chuỗi, ta mới viết một loạt dấu #; ví dụ:

Mã: Chọn hết

MsgBox Format(475.58, "#.##0")

kết quả là 475.580

Mã: Chọn hết

MsgBox Format(475.58, " #.##CD")

kết quả là 475.58CD
[Tổng các ký tự định dạng phải lớn hơn tổng các ký tự mà phần thập phân làm tròn thể hiện]


A-2 Từ khóa ‘0’ trong định dạng.
0 có 2 ý nghĩa: ý nghĩa String và ý nghĩa số
- Ý nghĩa số: 0 dùng thay cho # và kết quả hoàn toàn tương đồng.

Mã: Chọn hết

MsgBox Format(475.58, "0.0")

Kết quả là 475.6
- Ý nghĩa String, như có đề cập trên, ta muốn có thêm nhiều số 0 ở đầu hay ở cuối số thập phân

Mã: Chọn hết

MsgBox Format(475.58, "0000.0000")

kết quả là 0475.5800

Ta thấy ký tự 0 đầu tiên hoàn toàn là String = bắt buộc phải có!, 3 ký tự 0 tiếp theo là ý nghĩa số, chúng đại diện tùy ý cho 475, tương đương ký tự #. Với 4 ký tự tiếp theo ở phần thập phân, 2 ký tự trước có ý ngĩa số, đại diện cho 58 và 2 ký tự 0 cuối cùng hoàn toàn là String= bắt buộc phải có.

B- Mục B nầy giới thiệu format modern, chưa có trong sách vở, kể cả của MS.

B1- Format có String ở trước (hay ở sau) với dãy số nguyên:
Thay vì viết:

Mã: Chọn hết

MsgBox Format(2012, "AB####")

Để có AB2012
Bạn hãy viết:

Mã: Chọn hết

MsgBox Format(2012, "AB#")

Cũng cùng kết quả AB2012

Rõ ràng dấu # đã thay thế đủ 2012

Tương tự, ta có thể viết:

Mã: Chọn hết

MsgBox Format(2012, "AB#CD")

Với kết quả là AB2102CD

Đương nhiên ký tự 0 hoàn toàn tương đương #

Mã: Chọn hết

MsgBox Format(2012, "AB0CD")

Với kết quả là AB2102CD

B2- Tách chuỗi số:
20124 có nghĩa là năm 2012 tháng 4 hay lần thứ 4 gì đó. Bạn muốn tách 2 cụm nầy:

Mã: Chọn hết

MsgBox Format(20124, "# #")

Với kết quả là 2102 4
Hoặc:

Mã: Chọn hết

MsgBox Format(20124, "#T#")

Với kết quả là 2102T4

Ta thấy ký tự space hay ký tự khác chia kiểu định dạng trước sau, sau có bao nhiêu dấu # là bấy nhiêu ký tự muốn tách, trước với chỉ một dấu # đại nhiện cho nhóm số còn lại

52012 có nghĩa là tháng 5 hay lần thứ 5 gì đó ở năm 2012. Bạn muốn tách 2 cụm nầy:

Mã: Chọn hết

MsgBox Format(52012, "# ####")

Với kết quả là 5 2102
Hoặc:

Mã: Chọn hết

MsgBox Format(52012, "#Z####")

Với kết quả là 5Z2102

Chú ý tránh các ký tự đại biểu thời gian đã quy định: H, M, N, S, D, Y, W,C

Đương nhiên ký tự 0 hoàn toàn tương đương #

Mã: Chọn hết

MsgBox Format(20124, "0T0")

Với kết quả là 2102T4

B3- Từ khóa @
B3a-
@ đứng một mình đại diện cho nguyên xi đối tượng bị Format. Ta xem 2 ví dụ sau:

Mã: Chọn hết

MsgBox Format("052012.642", "#")

Cho kết quả số làm tròn là 52013; mà:

Mã: Chọn hết

MsgBox Format("052012.642", "@")

Cho kết quả là đối tượng bị format: 052012.642

B3b-
Tại mục B2 Tách chuỗi số, số ký tự muốn tách ở vế phải, do đó 52012 (tháng 5 năm 2012) được tách với việc gõ nhiếu dấu #:

Mã: Chọn hết

MsgBox Format(52012, "# ####")

Với kết quả là 5 2102

Bây giờ, bạn thay với dấu @:

Mã: Chọn hết

MsgBox Format(52012, “@ @")

Ta có ngay kết quả là 5 2102
Nhẹ nhàng hơn phải không? Hóa ra khi tách số, ký hiệu # và @ hoạt động đối nhau, số ký tự # tách ở bên phải; trong khi số ký tự @ tách ở bên trái.

Với (tháng 11 năm 2012) 112012, ta sẽ viết:

Mã: Chọn hết

MsgBox Format(112012, “@@ @")

Thay vì viết:

Mã: Chọn hết

MsgBox Format(112012, “# ####")


Bên cạnh việc tách số đối nhau, như đã nói, # là số nguyên làm tròn, trong khi @ là chính đối tượng bị format. Xem ví dụ:

Mã: Chọn hết

   MsgBox Format("052012.642", "# ##")

Số nguyên làm tròn là 52013, tách bên phải 2 ký tự, kết quả là 520 13

Mã: Chọn hết

   MsgBox Format("052012.642", "@@ @")

Tách bên trái 2 ký tự: 05 2012.642

B3c-
Ta đã có tách bên trái 1 ký tự với:

Mã: Chọn hết

MsgBox Format(52012, “@ @")

Bây giờ ta viết:

Mã: Chọn hết

MsgBox Format(52012, “@ ")

Kết quả vẫn là 5 2012
Vậy thì cách dùng từ khóa @ càng gọn! từ khóa # làm như vậy không được nghen!

Nói lại, với tách ký tự bên trái dùng @, ta chỉ viết nhóm số ký tự @ và một space là xong.

Việc tách thành nhiều nhóm với nhiều space (hay ký tự khác [ngoài từ khóa về thời gian]) thì 2 từ khóa @ và # không khác nhau mấy ngoài việc # là số nguyên làm tròn và @ là nguyên gốc.

4- Từ khóa &
Tôi test thấy từ khóa & cũng giống từ khóa @
Chưa phát hiện gì đặc biệt!

5- Hỗn hợp các từ khóa.
0 và # là tương đồng; hỗn hợp không có gì khác biệt ngoài vấn đề ký tự 0 quy định phải có bao nhiêu ký tự 0 (String) ở đầu hay ở cuối của kết quả format. Xem mục A1 và A2

@ và & là tương đồng, việc phối hợp 2 ký tự nầy vẫn cho kết quả như khi dùng một ký tự.

# (hay 0) và @ (hay &)
Tùy theo khóa # đứng trước hay khóa @. Khóa đứng sau xem như String

Mã: Chọn hết

MsgBox Format("1234", "#@")

Cho kết quả là 1234@ = dễ hiểu

Mã: Chọn hết

MsgBox Format("1234", "@#")

Cho kết quả là 1#234
Giải thích: @ một mình cho kết quả 1234
Nhưng @ kèm ký tự khác (hoặc space) sẽ có ý nghĩa tách nhóm; xem cuối mục B3c Từ khóa @.


Hay Không? :> B-)

Re: Về hàm định dạng Format

Đã gửi: T.Bảy 21/04/2012 4:11 am
gửi bởi TheAngelInMyLove
Chúc bác càng ngày càng có thêm nhiều bài viết ý nghĩa.

Re: Về hàm định dạng Format

Đã gửi: T.Ba 16/10/2012 11:22 am
gửi bởi KIDLINUX
Đang hạn gặp trời mưa :)
Đang tìm mấy hôm nay về các hàm này
Thanks bác lần nữa.