Bài kiểm tra đánh giá năng lực VBA lấy chứng chỉ SMod (Super Moderator)

tuhocvba

Administrator
Thành viên BQT
Bối cảnh: Hiện nay việc xét duyệt và để cử vào các chức danh Mod hay SMod còn tùy ý ngẫu hứng.
Một số người cứ ở mãi vị trí Mod mà chưa thể lên SMod. Hay một số người thì cứ ở vị trí SMod và bằng lòng với vị trí này.
Do đó, đề xuất một bài kiểm tra đánh giá năng lực và xét duyệt lên SMod là cần thiết.

Đối tượng:
Là các Mod cần lên Smod hoặc các thành viên có nguyện vọng muốn lên Mod. Các SMod chưa làm ra môt Tool nào công khai trên diễn đàn cũng cần thực hiện bài kiểm tra đánh giá năng lực này.

Thời gian thực hiện: Từ lúc công bố đề thi tới hết ngày 24/7/2021.
Nội dung: Tôi có một đoạn code VBA đã trích xuất ra file text. Anh/Chị cần tạo dựng một chương trình để đọc file txt này và trích xuất thông tin ra file excel.
Nội dung txt có định dạng như sau:
Bạn cần đăng nhập để thấy đính kèm

Nội dung Output mong muốn ghi ra Excel như sau:
Bạn cần đăng nhập để thấy đính kèm


Các kỹ năng mong muốn: Không quan tâm giao diện. Chỉ quan tâm logic. Phán đoán được các nguy cơ có thể xảy ra để có hướng xử lý phù hợp.
Có khả năng bóc tách dữ liệu.

File Input ở đây:
 
  • Like
Reactions: CRV

CRV

Mod
Góp vui:


Mình sửa lại chút (xóa bớt một số dòng thừa theo gợi ý bài 3 bên dưới):
 
Sửa lần cuối:

USA_Covid19

Mod
Thành viên BQT
Nếu input dạng (“,”, “@“) có 2 dấu phẩy thì lỗi ! Không biết trường hợp này có xảy ra không @tuhocvba ?
 
  • Like
Reactions: CRV

tuhocvba

Administrator
Thành viên BQT
Kết quả của bạn và của Ngày Mới và CRV sao khác nhau vậy ta. Mình dùng hàm Len đo độ dài để kiểm tra kết quả.
H, I là của Ngày Mới.
K,L là của CRV.
Trước khi nói tới vấn đề xa xôi, đầu tiên phải phản ánh trung thực kết quả từ file Input của mình cái đã.
Bạn cần đăng nhập để thấy đính kèm
 
  • Haha
Reactions: CRV

CRV

Mod
@tuhocvba kiểm tra giúp mình file kèm trong sửa bài 2 xem khớp không, đêm qua mới ngồi máy sửa lại logic chỉ lấy chuỗi dữ liệu giữa cặp 2 dấu nháy kép "" , ngoài ra không cắt thay thay thế chuỗi so với link cũ, mình vẫn để link cũ.
 
Sửa lần cuối:

tuhocvba

Administrator
Thành viên BQT
@tuhocvba kiểm tra giúp mình file kèm trong sửa bài 2 xem khớp không, đêm qua mới ngồi máy sửa lại logic chỉ lấy chuỗi dữ liệu giữa cặp 2 dấu nháy kép "" , ngoài ra không cắt thay thay thế chuỗi so với link cũ, mình vẫn để link cũ.
OK, mình không để ý đã cập nhật output. File này với output của các bạn trên là khớp nhau.
 
  • Like
Reactions: CRV

tuhocvba

Administrator
Thành viên BQT
Cảm ơn mọi người đã tham gia.
Mình có một vài nhận xét như thế này.
1. Khả năng phán đoán yêu cầu bài toán và đưa ra output chính xác:
Đề bài nói đoạn code lấy từ chương trình VBA, nhin vào đoạn code này có thể thấy người ta muốn tìm s1 và thay thế bằng s2.
Dựa vào cấu trúc code ở trên thì s1 và s2 luôn nằm trong dấu "".
Do đó các bạn chỉ cần tách ký tự trong dấu "".
Lưu ý trường hợp đặc biệt là:
Mã:
""""
có một bài viết trên diễn đàn dịch từ nguồn tanaka Office thì đây là dấu ". Trong trường hợp này nếu code của bạn nào tốt thì sẽ cho ra được output là ".
Các bạn tự kiểm tra code của bản thân nhé.

Các bạn cũng không đặt tình huống ký tự output là ký tự đặc biệt nào đó mà khi ghi vào excel có thể tạo nên lỗi có thể xảy ra, ví dụ là dấu -, +.
Do đó nên định dạng khu vực ghi Output la Text để đảm bảo ký tự hiển thị ra là trung thực. Dường như chưa ai quan tâm tới vấn đề này.
Bạn cần đăng nhập để thấy đính kèm


2. Đặt mình vào vị trí khách hàng và làm ra sản phẩm vượt quá cả sự kỳ vọng của khách hàng.
-Nếu coi tôi là khách hàng, không nên để khác hàng phải sửa đường link. Nếu đã xác định file Excel macro và txt cùng thư mục thì cứ thế code theo hướng như vậy. Tôi download file về thì còn di chuyển hai file, mỗi file đi một nơi đi đâu làm gì.
-Hai file nên để vào cùng thư mục, rồi nén lại. Có bạn chỉ nén 2 file , khi bung nén ra, nó nằm ở tận đẩu tận đâu, vì thư mục download của tôi có rất nhiều file. Như thế là chưa tiện lợi.
-Có bạn không nén file mà cứ upload cả thư mục lên google drive. Như vậy khi download về tôi lại phải chờ google drive nén file rồi mới tải được. Rất bất tiện. Trong khi đó các bạn thao tác nén trên máy các bạn thì rất nhanh.
 

Euler

Mod
Thành viên BQT
Mình từng là cựu Admin nên được đặc cách không phải tham gia.
Nói đùa vậy, chứ dự án trên diễn đàn mình cũng có nhiều rồi nên được miễn thi.
Sau đây là bài toán Euler gửi tới cho các bạn. Nếu giải được bài toán này, Euler khẳng định năng lực code VBA của bạn đã ngang cấp với Admin của diễn đàn.
Mã:
Dim arr(1 To 5)
Dim prr(1 To 5), a

'khoi tao gia tri ban dau
For i = 1 To 5 Step 1
    prr(i) = 0
Next i

'... doan xu ly khac de nap gia tri cho mang arr()
a = 0
        For i = 1 To 4 Step 1
            prr(i) = Int(arr(i) * 100 / cnt) '"(" & CStr(Int(arr(i) * 100 / cnt)) & "%)"
            a = a + prr(i)
        Next i
            prr(5) = 100 - a
Các dòng code 11-15 là để tính % và gán vào mảng prr. Vì tính ra có thể ra số rất lẻ cho nên phải thông qua hàm Int để lấy phần nguyên.
Để đảm bảo tổng của 5 số prr(i) (i : 1~5) là 100% thì chỉ cho for i = 1~4. Còn số cuối lấy 100 trừ đi giá trị 4 số trước đó.
Tình huống xấu xảy ra là prr(5) = 0. Nhưng vì hàm Int lấy pần nguyên, nên ở phép tính 100-a có thể ra số khác 0. Trong khi đó kết quả hiển thị sẽ rất buồn cười nếu như 0 có cái gì mà % lại hiện ra là 2% chả hạn.

cnt là tổng các số arr(i) nhé.

Vậy với bài toán trên, các bạn phải xử lý như thế nào?
Bạn cần đăng nhập để thấy đính kèm
 
Sửa lần cuối:

tuhocvba

Administrator
Thành viên BQT
Một số bạn không hiểu đề toán của @Euler nên mình giải thích như sau:
Bạn cần đăng nhập để thấy đính kèm

đúng ra prr(5) phải là 0% nhưng dựa vào code ở trên, nếu dữ liệu cho như thế này thì prr(5) sẽ là 2%.
 

Yukino Ichikawa

Thành viên
Theo em, giải quyết nhanh nhất là cứ để hệ thập phân, double.
Mã:
Sub abc()
    Dim d As Double
   
    d = 25.33333
    d = WorksheetFunction.Round(d, 1)
    Debug.Print (d)'25.3
End Sub
Để một chữ số sau dấu phẩy.
Nguồn:
 
Sửa lần cuối:
Top