Chuyện vui VBA

Liên hệ QC
Tại sao Bill lại bày ra value và Value2 làm chi ko biết ... chắc có ý đồ chi rứa ===\. ;)
99,99% là trước kia chỉ có Value. Sau đó thêm Value2 nhưng Bill vẫn giữ Value, lý do là "tương thích ngược" (backward compatibility). Nếu bạn mở tập tin cũ có dùng Value trên phiên bản mới mà trong phiên bản mới không còn Value nữa thì "rách việc" quá, đúng không? Vì thế phải có "tương thích ngược".
 
99,99% là trước kia chỉ có Value. Sau đó thêm Value2 nhưng Bill vẫn giữ Value, lý do là "tương thích ngược" (backward compatibility). Nếu bạn mở tập tin cũ có dùng Value trên phiên bản mới mà trong phiên bản mới không còn Value nữa thì "rách việc" quá, đúng không? Vì thế phải có "tương thích ngược".
Anh batman1, tôi hiểu chuyện này nhưng tôi vẫn thấy và thắc mắc rằng Bill vẫn để Value là default property của nhiều thứ. Có khi phải sửa nhiều quá nên không làm?
 
Mình làm ứng dụng trên Excel nhiều, và trải qua nhiều bài toán cần tốc độ nên cũng rất chú trọng nó, các cải tiến sản phẩm mấy năm gần đây chủ yếu gia tăng tốc độ. Tất cả các bác góp ý trên gom lại thì là giải pháp cần thiết cho thiết kế ứng dụng tốt, cái cần trước cái cần sau hoặc tùy vào yêu cầu cụ thể mỗi phần mềm có cấp thiết hay không. Như cầu mỗi thành viên trên GPE rất đa dạng, người thì quan tâm nghiệp vụ thì lo chu toàn nghiệp vụ, người thì ngôn ngữ chưa tốt thì tìm cách viết ngôn ngữ đúng hơn, sau này cũng cần sự cầu toàn hơn đó là vẻ đẹp, tốc độ. Giải thuật luôn là điều quan trọng với các bài toán với khối lượng dữ liệu nhiều, tình toán nhiều (như Excel thì tầm >30k coi là nhiều rồi, công thức tìm kiếm danh mục nhiều,...). Cùng với giải thuật thì lựa chọn cách viết sao cho tối ưu nó cũng là việc song hành nên kết hợp vì cái đích là tốc độ.
Em nghĩ bác ThangCuAnh là người cầu toàn và bác đang muốn chia sẻ cũng như tìm và giải những câu hỏi của các bạn khác trên GPE nên bác cứ phát huy hiểu biết của bác giúp cho các thành viên GPE, cũng như các thành viên khác em cũng rất tôn trọng đang chia sẻ trên đây.
 
Dùng tư duy của người Việt để tranh luận chuyện "mấy anh kỹ sư Microsoft nghĩ gì" thì coi bộ xôm hơn cả "thầy bói xem voi". Tôi bật Excel lên định táy máy xem Value2 là cái gì mà sao bà con mình bàn luận khí thế quá nhưng chợt nhớ ra cái bộ cấu trúc từ khóa "A vs B" thế là quất lên google "value vs v...". Gõ chưa kịp hết ý, Google xổ toẹt ra cụm "value vs value2" trong phần gợi ý luôn. Không những thế, phần kết quả tìm kiếm nó còn khuyến mãi luôn "value vs value2 vs text". Và tôi cũng mạn phép trích dẫn lại nguyên văn lý giải của mấy anh Tây.
  1. .Text gives you a string representing what is displayed on the screen for the cell. Using .Text is usually a bad idea because you could get ####
  2. .Value2 gives you the underlying value of the cell (could be empty, string, error, number (double) or boolean)
  3. .Value gives you the same as .Value2 except if the cell was formatted as currency or date it gives you a VBA currency (which may truncate decimal places) or VBA date.
Using .Value or .Text is usually a bad idea because you may not get the real value from the cell, and they are slower than .Value2
For a more extensive discussion see my Text vs Value vs Value2

Cái ý này nhận được nhiều like nhất (214) bên trang đó. Vì không rành chữ Tây nên tôi cũng không biết đúng sai thế nào. Còn cô chú nào đọc hiểu mà thấy có gì sai cứ qua đó bình phẩm nhé. Biết đâu lại vượt mặt nhận được trên 215 like thì nở mày nở mặt người Việt chúng ta :yahoo:
 
Lần chỉnh sửa cuối:
Anh batman1, tôi hiểu chuyện này nhưng tôi vẫn thấy và thắc mắc rằng Bill vẫn để Value là default property của nhiều thứ. Có khi phải sửa nhiều quá nên không làm?
Nguyên do thì tôi không dám chắc 100% vì thế tôi viết "99,99%". Nhưng thực ra điều đó cũng chả quan trọng. Vì có cả 2 cũng chả gây phiền phức gì cả. Có chăng là tạo ra cơ hội cho anh Value chửi anh Value2 và ngược lại? :D
 
Anh batman1, tôi hiểu chuyện này nhưng tôi vẫn thấy và thắc mắc rằng Bill vẫn để Value là default property của nhiều thứ. Có khi phải sửa nhiều quá nên không làm?
Đại khái cũng như bên bảng tính người ta vẫn dùng VLookup, vẫn cho rằng VLookup là căn bản của Excel trong khi ai cũng phải nhìn nhận cặp Index-Match nhanh hơn.
(trong số VLookup ấy có cả tôi)

Bởi vì Value dễ hiểu và dễ sử dụng hơn.
Những người "có kiến thức sâu rộng" hơn về cách hoạt động của code thì đương nhiên cái từ "dễ hiểu" không có nghĩa lý gì với họ; thậm chí có thể họ tranh luận ngược lại rằng Value2 "khoa học" hơn.
Rất tiếc cho phe "tu" là VBA dùng để hổ trợ Access và Excel. Mà đa số người sử dụng hai cái này là dân thương mại chứ không phải khoa học. Cho nên cái từ "dễ hiểu, dễ dử dụng" phải được định theo kiến thức của dân thương mại.

Chú: dân thương mại như tôi thì thích đọc bài của những cái căn bản như dummies hơn những cái sâu xa của stackoverflow - lại dễ hiểu hơn!
 
Chú: dân thương mại như tôi thì thích đọc bài của những cái căn bản như dummies hơn những cái sâu xa của stackoverflow - lại dễ hiểu hơn!
Tiếc rằng tôi cũng vậy, đọc cái "sâu xa" xong thì cũng quên. Nhưng cũng công nhận: Ờ, nó nhanh hơn chỗ này bằng này. Sau đó tôi lại nghĩ tiếp "bằng này" cũng cứ tận dụng đi đã, còn cái lớn hơn như bài trên tôi viết (có dựa ké vào ý của anh batman1), phải tự thân vận động bằng cách này cách khác. Có khi "xui" lại giống kiểu suy nghĩ "thương mại"
 
Thẳng vào topic (vui): 3 thằng cãi nhau tùm lum cuối cùng vẫn phải làm, chỉ có thằng (người) nó ung dung chạy xong, rồi thì bỏ ra uống cafe, buôn dưa lê gấp ngàn/ triệu lần thời gian code chạy, nên so sánh chi, cãi nhau chi cho mệt 3 thằng ngu kia... (hihihi)
 
... cãi nhau chi cho mệt 3 thằng ngu kia... (hihihi)
Theo nguyên tắc, "nó lú nhưng chú nó khôn".
Mấy thằng đó thật ra đâu có cãi nhau. Chúng chỉ là những con rối do một ông bự dựng trò hề để kèn trống cho cái địa vị làm lớn của ông bự thôi. Bởi vậy từ đầu mới là chuyện vui.
 
Hì hì, sáng nay cuối tuần rãnh rỗi, ngồi hì hụi làm cái file Excel để minh họa cho chuyện vui. Cái cô kế toán nghỉ nên phải tự tay làm, mà mình thì mới học Ét xèo nữa, nên "thật nà vất vã".
Chuyện như thế này, có 3 nhân vật trong chuyện, 1 là anh Excel, 2 là anh VBA, 3 là anh dùng VBA, hay còn gọi là coder. Một ngày ẹp trời, anh coder viết code và bắt đầu nói chuyện.
- Coder: Ê, Excel, tao cần lấy data từ Range("A1:C10000")
- Excel: Có ngay, mày muốn lấy Value hay Value2
- Coder: Tao muốn lấy Value. Tao thấy mấy người kia xài Value thì tao cũng xài Value, éo thèm đọc "đồ cú mèn" đâu.
- Excel: mẹ, xài sang. Chả có dữ liệu Currency hay DATETIME API mà đòi Value. Thôi, kệ mẹ mày, chờ tao chút, tao chuẫn bị dữ liệu cái. Lầm bầm: phải check, mang theo cái field Currency với record cho nó mà nó éo có dùng, mẹ nó, xài sang.
- Excel: Xong rồi, Value nhen, trả về Variant nhen. Tao ghi rõ trong "đồ cú mèn" rồi đó. Trong ruột Variant tao là array nhen.
- Coder: không được, tao không đọc "đồ cú mèn", thấy người ta dùng array của Variant không à, tao cũng lỡ tay gõ () rồi.
- Excel & Coder: cãi nhau....
- VBA: Thôi can 2 anh, em đứng giữa đây, khổ quá, mọi chuyện đã có em "no".
Và anh VBA phải hì hục cấp mới 1 array của Variant cho anh coder, lấy trong ruột Variant của anh Excel ra cái array, hì hục convert, chép từng thằng phần tử vào cái array của anh coder, rồi lo thêm vụ giải phóng cái Variant Excel trả về nữa cho rộng chỗ.
Cuối cùng chỉ có anh coder hể hả, xong nhiệm vụ, chỉ tội 2 anh Excel và VBA ngồi thở phì phò, lâu mồ hôi, chửi thầm: mẹ, thằng coder nhiều chuyện, đương không thêm cái () vào chi với đòi Value cho mình mệt bỏ xừ, tốn thêm 1 mớ bộ nhớ nữa.

Xong câu chuyện, mời bà con cười cái rồi download file test_Range để chạy kiểm tra câu chuyện và hiểu tại sao thằng VBA với Excel xúm vào chửi thằng coder nhé :)
Cứ click vô cái nút "ẹp ẹp xanh xanh" ấy rồi chờ chút xong xem kết quả
Chào bạn @ThangCuAnh

Đây là Box chuyên môn nên yêu cầu bạn viết câu từ cho dễ hiểu, nên dùng tiếng Việt trong sáng, không dùng từ thô tục. Tránh gây hiểu lầm cho người đọc, tạo cho người đọc cảm thấy khó chịu.
Như tiêu đề bài viết thì bạn nên viết ở box thư giãn. Tôi sẽ di chuyển đề tài này vào đó.

HLMT
 
Lần chỉnh sửa cuối:
Web KT
Back
Top Bottom