Cuộc thi "Excel toàn diện" online mừng sinh nhật GPE lần thứ 8 (1 người xem)

  • Thread starter Thread starter ptm0412
  • Ngày gửi Ngày gửi
Liên hệ QC

Người dùng đang xem chủ đề này

ptm0412

Bad Excel Member
Thành viên BQT
Administrator
Tham gia
4/11/07
Bài viết
14,716
Được thích
37,418
Donate (Momo)
Donate
Giới tính
Nam
Nghề nghiệp
Consultant
Kính gởi toàn thể thành viên,

Sau 8 năm hoạt động, số lượng thành viên GPE đã rất đông và trình độ chung của anh chị em đã tăng lên rất nhiều. Do đó việc ra đề thi online như mọi năm trở thành việc khó khăn: Một là vì đã cạn đề tài, hai là khả năng của tôi có hạn, khó thể ra đề cho trình độ chung của các thành viên. Việc này cũng tựa như thầy giáo lớp 1 khó có thể ra đề cho học sinh lớp 10.

Cuối cùng, tôi nghĩ ra một cách, cách này nhằm mong muốn các anh chị thành viên chuyển hướng suy nghĩ: Nghiên cứu Excel không chỉ chuyên sâu, mà còn mở rộng.

Nghĩa là:
Các anh chị không chỉ cần biết sử dụng thành thạo hàm, công thức, mà còn cần biết sử dụng những công cụ mạnh của Excel để tiết kiệm thời gian. Ngoài ra các anh chị cũng cần tự động hóa và tăng tốc độ những việc phải làm tốn cả nhiều giờ hoặc cả ngày mới xong bằng cách lập trình và sau đó chỉ cần nhấn nút.
Không những thế, tính toán dữ liệu ra báo cáo xong, các anh chị cũng nên minh họa báo cáo bằng những biểu đồ sinh động.

Do đó, đề thi năm nay sẽ bao gồm 4 mục:
- Data validation
- Pivot table
- Biểu đồ
- VBA

Và những người đoạt giải lần này, sẽ là giải có ý nghĩa "Giải Excel toàn diện"

Các anh chị hãy chuẩn bị tinh thần sẵn sàng tham gia và giành giải.
 
Lần chỉnh sửa cuối:
...
Do đó, đề thi năm nay sẽ bao gồm 4 mục:
- Data validation
- Pivot table
- Biểu đồ
- VBA
...
Thầy có thể đưa thêm AdvanceFilter và Hàm Dữ liệu (Database Functions) được không ạ.
AdvanceFilter cũng như PivotTable, vận dụng điều kiện để trích báo cáo.
Em thấy có nhiều thế mạnh của Hàm Dữ liệu, nhưng rất ít thành viên ứng dụng.
 
Đề thi "Excel toàn diện"

Như đã nói, đề thi sẽ gồm bốn phần, mỗi phần chấm điểm riêng.

Phần 1: Pivot table

Cho dữ liệu chỉ 2 cột như bảng sau (có trong file đính kèm):


  1. Không dùng cột phụ, đếm xem mỗi khách hàng xuất hiện bao nhiêu lần bằng Pivot table
  2. Không dùng cột phụ, đếm xem mỗi PO xuất hiện bao nhiêu lần bằng Pivot table
  3. Cho phép dùng cột phụ, đếm xem mỗi khách hàng có bao nhiêu PO (loại bỏ PO trùng) bằng Pivot table

Theo hình sau:



Phần 2: Validation:

Giả sử ta có danh mục các tỉnh thành, quận huyện, phường xã như trong file đính kèm. Hãy tạo 3 validation loại phụ thuộc để trong 3 cột liên tiếp nhau, có thể chọn tỉnh thành, sau đó chọn quận huyện, cuối cùng chọn phường xã:
Cột C chọn tỉnh thành: Validation cho chọn trong danh sách tỉnh thành
Cột D chọn quận huyện: Validation giới hạn chọn quận huyện trong tỉnh thành đã chọn
Cột E chọn phường xã: Validation giới hạn chọn phường xã trong quận huyện đã chọn.



Lưu ý: Tên quận huyện có thể trùng ở tỉnh thành khác nhau, tên phường xã có thể trùng trong quận khác nhau, và trùng trong cả tỉnh thành khác nhau


Phần 3: Biểu đồ

Với thông số của thanh thép I (hoặc gọi là thép H) như sau:



a. Tạo dữ liệu và vẽ tiết diện thanh thép I (H) bằng biểu đồ
đúng tỷ lệ theo 2 trục X, Y như hình. Yêu cầu: Khi thay đổi bất kỳ thông số nào trong 5 thông số trên, biểu đồ phải thay đổi tương ứng. Ngoài ra, sự thay đổi của biểu đồ phải theo đúng tỷ lệ lớn nhỏ và ngang dọc.



b. Nâng cao:
Vẽ thêm các đường ghi kích thước có gióng xuống hình vẽ ở 2 đầu

Phần 4: VBA

Cho dữ liệu như trong file. Trong 3 sheet Report1, Report2, Report3 có các nút nhấn "Run"

a. Viết code VBA
để khi nhấn nút Run, sẽ điền dữ liệu tương ứng vào các báo cáo (như trong file mẫu)
Lưu ý: Code phải hoạt động đúng khi thay đổi ô chứa tháng (D3), ô chứa thông tin Khách hàng, nhà cung cấp, nhân viên sale (C5 mỗi sheet) và nhấn nút.









b. Nâng cao:
Hãy viết 1 thủ tục duy nhất sao cho 3 nút Run của 3 sheet đều gọi ra chạy thủ tục đó, và kết quả phải đúng như câu 4.a

Lưu ý: Nếu làm câu b và tự tin rằng đúng, không nhất thiết phải làm cả 3 thủ tục (sub) của câu a, chỉ làm 1 hoặc 2 thủ tục cũng được. Tuy nhiên phải làm ít nhất 1 trong 3.

File đề thi: http://www.mediafire.com/download/czxqsl5w25ks0ql/De_thi_SN08.rar
 
Lần chỉnh sửa cuối:
THỂ LỆ THAM DỰ

1. Điều kiện tham dự:

Tất cả thành viên GPE có quyền tham dự, không phân biệt bất cứ tiêu chí nào.

2. Thời hạn tham dự:
Từ ngày ra đề đến hết ngày 26/06 năm 2014

3. Hình thức nộp bài:
- Nộp bài làm qua mail vào địa chỉ thanhmypham@giaiphapexcel.com, tiêu đề ghi "<nick> tham gia cuộc thi Excel toàn diện". Ai gởi bài vào topic này bị cóp bi ráng chịu.
- File bài làm đặt tên BaithiGPE8-<nick>.xls (thí dụ BaithiGPE8-ptm0412.xls)
- Một người có thể nộp bài nhiều lần, nhưng chỉ tính điểm và thời gian nộp cho lần cuối cùng

4. Giải thưởng:

- 01 giải nhất cho người có số điểm cao nhất, nếu nhiều người cùng điểm sẽ tính cho người có thời gian nộp bài sớm hơn
- 01 giải nhì cho người có số điểm cao thứ nhì, hoặc bằng điểm giải nhất nhưng nộp bài chậm hơn.
- 01 giải ba cho người có số điểm cao thứ ba, hoặc bằng điểm giải nhất, nhì nhưng nộp bài chậm hơn.
- 1 giải ưu tiên cho 01 bài nộp đầu tiên, có thể lãnh trùng với 1 trong 3 giải trên

5. Phát giải thưởng:

Giải thưởng sẽ phát tại lễ Sinh nhật ngày 29/06/2014. Nếu người trúng giải không tham dự SN, sẽ gởi qua đường bưu điện. Nếu giải thưởng không thể phát qua đường bưu điện thì có thê ghi nợ cho lão chết tiệt.
 
Em vừa gửi bài trong mail Thầy, nhờ Thầy kiểm tra dùm.
Xin cảm ơn!
 
Gửi mail lần 2: Update lại kích thước biểu đồ:
GpeSN8.jpg
Ẹc ẹc, ghi kích thước bán kính khó quá.
 
Đã có 2 bài dự thi, nhưng chưa có bài hoàn hảo.
Xin vui lòng đọc kỹ đề bài.
 
Thể lệ cuộc thi này chưa nói đến chuyện hợp tác giữa các thành viên với nhau;
Vậy ai cần fần code mình xin tặng!
(Không vụ lợi về tiền thưởng, nếu có!)
 
Bổ sung hình về đường kích thước của biểu đồ:

[URL=http://s1329.photobucket.com/user/ptm041261/media/SinhNhat-GPE08/Size_zps3c468565.jpg.html][/URL]

Lưu ý những yêu cầu của biểu đồ:

Yêu cầu: Khi thay đổi bất kỳ thông số nào trong 5 thông số trên, biểu đồ phải thay đổi tương ứng. Ngoài ra, sự thay đổi của biểu đồ phải theo đúng tỷ lệ lớn nhỏ và ngang dọc.
Nâng cao: Vẽ thêm các đường ghi kích thước có gióng xuống hình vẽ.
 
Lần chỉnh sửa cuối:
Thể lệ cuộc thi này chưa nói đến chuyện hợp tác giữa các thành viên với nhau;
Vậy ai cần fần code mình xin tặng!
(Không vụ lợi về tiền thưởng, nếu có!)
Nếu hợp tác, té ra 4 người cộng lại mới hoàn hảo toàn diện :)
 
Ghi kích thước như vầy có được chấp nhận không thầy?
Chart.jpg
 
Chỉnh sửa lần cuối bởi điều hành viên:
Bổ sung hình về đường kích thước của biểu đồ:
---
Lưu ý những yêu cầu của biểu đồ:

Yêu cầu: Khi thay đổi bất kỳ thông số nào trong 5 thông số trên, biểu đồ phải thay đổi tương ứng. Ngoài ra, sự thay đổi của biểu đồ phải theo đúng tỷ lệ lớn nhỏ và ngang dọc.
Nâng cao: Vẽ thêm các đường ghi kích thước có gióng xuống hình vẽ.
Đã sửa xong cái biểu đồ: thay đổi đúng tỷ lệ.
Untitled.jpg
Lần đầu vẽ biểu đồ dạng này.
 
khó quá, mấy bạn giỏi quá, mình k biết gì hết à!hichic
 
Thêm một người nộp bài. Hai người hôm qua nộp bài lần 3.
 
Đã sửa xong cái biểu đồ: thay đổi đúng tỷ lệ.

Lần đầu vẽ biểu đồ dạng này.
Nhìn hình thấy không đúng tỷ lệ rồi đệ đệ ạ. 120 so với 160, 15 so với 20 thấy không đúng tỷ lệ lắm. Phải test thử thế này: Cho 2 kích thước bằng nhau, cho 2 kích thước gấp đôi nhau, ... nhìn bằng mắt hoặc cẩn thận thì lấy thước đo trên màn hình.

Tăng 1 hoặc cả 2 kích thước lên gấp đôi rồi so sánh trước và sau khi tăng.

Cơ mà làm đúng thì không cần test kích thước kiểu này.
 
Nhìn hình thấy không đúng tỷ lệ rồi đệ đệ ạ. 120 so với 160, 15 so với 20 thấy không đúng tỷ lệ lắm. Phải test thử thế này: Cho 2 kích thước bằng nhau, cho 2 kích thước gấp đôi nhau, ... nhìn bằng mắt hoặc cẩn thận thì lấy thước đo trên màn hình.

Tăng 1 hoặc cả 2 kích thước lên gấp đôi rồi so sánh trước và sau khi tăng.

Cơ mà làm đúng thì không cần test kích thước kiểu này.
Nhìn nó ảo ảo thật, nhưng mà đo trên màn hình bài #12 thấy đúng tỉ lệ mà, tôi thử thay tỉ lệ 1:2 vẫn thấy nó ảo ảo, nhưng lấy thước đo cũng đúng tỉ lệ 1:2.
Untitled.jpg
 
Nhìn nó ảo ảo thật, nhưng mà đo trên màn hình bài #12 thấy đúng tỉ lệ mà, tôi thử thay tỉ lệ 1:2 vẫn thấy nó ảo ảo, nhưng lấy thước đo cũng đúng tỉ lệ 1:2.
Thảo yên tâm, lão chết tiệt có cách kiểm tra chính xác 100%, tới từng pixel.
 
Kính gởi toàn thể thành viên,

Sau 8 năm hoạt động, số lượng thành viên GPE đã rất đông và trình độ chung của anh chị em đã tăng lên rất nhiều. Do đó việc ra đề thi online như mọi năm trở thành việc khó khăn: Một là vì đã cạn đề tài, hai là khả năng của tôi có hạn, khó thể ra đề cho trình độ chung của các thành viên. Việc này cũng tựa như thầy giáo lớp 1 khó có thể ra đề cho học sinh lớp 10.

...

Em mới gỡi bài, khả năng của em có giới hạn nên hiểu biết tới đâu em làm tới đó, mong các thầy cô thông cảm!
 
Chỉnh sửa lần cuối bởi điều hành viên:
Thành quả sau khi tập vẽ Chart bài dự thi, giờ mình có thể vẽ thành thạo Chart dạng này.
Cảm ơn Thầy Mỹ!
Untitled.jpg
 
leo vừa nộp bài lại, so với lần trước có khác 1 xíu, nhưng ...
 
leo vừa nộp bài lại, so với lần trước có khác 1 xíu, nhưng ...
Thầy cứ nửa vời vậy làm em mất ngủ luôn, ... thôi lỡ rồi thức luôn đến 3 giờ xem World Cup, ẹc ẹc ...
Khả năng 50% em được giải khuyến khích nộp bài sớm. Giờ cạn hết vốn rồi, em không nộp lại nữa đâu.
Xong bài thi, nhờ Thầy hướng dẫn tô màu trong 3 chữ GPE bài #21.
 
Thầy ơi, sau khi nhận giải thì thầy cho đáp án nhé thầy!
 
Vẫn chưa có bài nào toàn vẹn, nên vẫn còn rất nhiều cơ hội.
 
Vẫn chưa có bài nào toàn vẹn, nên vẫn còn rất nhiều cơ hội.
Bài 4 (VBA) em đã tự sửa đề và làm theo đề đã sửa nên không có điểm bài này. Chắc chắn đoạt giải tham gia nhiệt tình (nếu có bổ xung thêm giải này) :D
 
Đang làm bài tới vẽ chart đuối :(.
Chắc làm 3 bài rùi nộp luôn :( Tham gia thui chứ giải thì em không nhận dc roài ;)
 
Sau thời gian cố gắng học mảng :( em cũng đã làm xong bài 4 (cho dù cùi mía :) Nộp bài luôn rùi vì không làm dc chart :P )
Bài vẽ chart chắc em phải chờ bài giải để học :(.

Thật bổ ích khi có những bài thi như vậy ^^
 
Sau thời gian cố gắng học mảng :( em cũng đã làm xong bài 4 (cho dù cùi mía :) Nộp bài luôn rùi vì không làm dc chart :P )
Bài vẽ chart chắc em phải chờ bài giải để học :(.

Thật bổ ích khi có những bài thi như vậy ^^
Có cả 1 topic hướng dẫn vẽ từ A đến Z: http://www.giaiphapexcel.com/forum/showthread.php?71554-D%C3%B9ng-bi%E1%BB%83u-%C4%91%E1%BB%93-Excel-%C4%91%E1%BB%83-v%E1%BA%BD-k%E1%BB%B9-thu%E1%BA%ADt-m%E1%BA%B7t-c%E1%BA%AFt-c%C3%A1c-lo%E1%BA%A1i

Thậm chí lấy file bài 1, thêm 4 chỗ cong cong là ra.
 
Nếu hợp tác, té ra 4 người cộng lại mới hoàn hảo toàn diện :)

vocamxuc thử làm 4 người xem sao?
Hôm qua mới chú ý thấy có bài thi hay này, tranh thủ đêm xem đá bóng làm thử, nick vocamxuc tại Giải pháp excel gửi tới bài dự thi, hy vọng được học hỏi thêm. cảm ơn nhiều
 
Ngày cuối cùng có thêm 3 người tham gia, tổng số là 7 người.
Qua khỏi 12 giờ đêm mới khóa sổ.
 
Kết quả cuộc thi "Excel toàn diện"

Công bố điểm:

Có tất cả 7 thành viên tham gia dự thi, số bài nộp là 12, nhưng chỉ chấm điểm và tính ngày giờ cho lần nộp sau cùng.

Bảng kết quả điểm như sau:

|
A​
|
B​
|
C​
|
D​
|
E​
|
F​
|
G​
|
H​
|
1​
|
STT​
|
Tên​
|
Ngày nộp cuối​
|
Pivot table​
|
Validation​
|
Chart​
|
VBA​
|
Cộng​
|
2​
| |Thang điểm| |
2,5​
|
2,5​
|
2,5​
|
2,5​
|
10​
|
3​
|
1​
|vocamxuc|
26/06/2014​
|
2,5​
|
2,5​
|
2,25​
|
2,5​
|
9,75​
|
4​
|
2​
|hoangminhtien|
11/06/2014​
|
2,5​
|
2,25​
|
2,25​
|
2,25​
|
9,25​
|
5​
|
3​
|dhn46|
10/06/2014​
|
2,5​
|
1​
|
2​
|
2,5​
|
8​
|
6​
|
4​
|zztantaibazz|
25/06/2014​
|
2,5​
|
2,25​
|
0​
|
2,5​
|
7,25​
|
7​
|
5​
|leonguyen|
11/06/2014​
|
2,5​
|
1​
|
2,25​
|
2​
|
7,75​
|
8​
|
6​
|linhngoc|
25/06/2014​
|
2,5​
|
2,5​
|
0​
|
0​
|
5​
|
9​
|
7​
|quancui|
12/06/2014​
|
2,5​
|
0​
|
0​
|
0​
|
2,5​
|


 
Kết quả cuộc thi "Excel toàn diện"

Công bố kết quả:

Giải nhất: Nick vocamxuc với số điểm 9.75

Giải nhì: Nick Hoangminhtien với số điểm 9.25

Giải ba: Nick dhn46 với số điểm 8.0

Giải khuyến khích nộp bài đầu tiên thuộc về leonguyen: 10/06/2014 14:46:00
 
Công bố kết quả:

Giải nhất: Nick vocamxuc với số điểm 9.75

Giải nhì: Nick Hoangminhtien với số điểm 9.25

Giải ba: Nick dhn46 với số điểm 8.0

Giải khuyến khích nộp bài đầu tiên thuộc về leonguyen: 10/06/2014 14:46:00
Chúc mừng các bạn đoạt giải!
 
Một số nhận xét về bài tham gia dự thi:

1. Phần pivot table:
Tất cả mọi người làm đúng nhưng về cột phụ có những công thức quá phức tạp như Sumproduct, If(SumProduct), If(CountIf), ... trong khi chỉ cần 1/Countif là đủ. Vì đằng nào vào Pivot table ta cũng áp dụng SUM. Linkngoc còn dùng tới 2 cột phụ, có lẽ nhóc cẩn thận sợ 1 PO trùng cho nhiều khách hàng.

2. Phần Data validation:

Không biết có ai đọc nhầm đề không, mà có người chỉ làm 1 cột cuối, có người chỉ làm 2 cột cuối, có người không làm cột nào? Phải làm validation cho cả 3 cột, và các validation này cột sau phụ thuộc vào cột phía trước nó.

Ngoài ra, cách dùng name chưa chuẩn xác dẫn đến việc lệch dòng hoặc dư dòng:
- Hoangminhtien: Validation quận và huyện càng xuống dòng dưới vùng name càng bị lệch dòng: Dữ liệu dòng 2 lệch 1 dòng, Dữ liệu dòng 3 lệch 2 dòng, ... do không cố định dòng.
- zztantaibazz: Số dòng của huyện bị thừa về phía dưới, càng xuống dòng dữ liệu dưới càng dư nhiều. name phức tạp quánên chưa tìm ra chính xác nguyên nhân.

3. Phần biểu đồ:

- Yêu cầu là khi thay đổi kích thước (cả 5 kích thước), mặt cắt phải thay đổi theo đúng tỷ lệ. nghĩa là phải cố định Min và Max của 2 trục bằng manual, không để auto. Nếu ai đang để quto thì chắc chắn khi thay kích thước hình sẽ biến dạng.

- Ngoài ra tỷ lệ ngang dọc cũng phải bảo đảm, không phải bằng cách lấy thước đo, mà là bằng VBA. Bước 6b trong topic http://www.giaiphapexcel.com/forum/s...c-lo%E1%BA%A1i ghi rõ việc này.

Tôi có 1 code test như sau:
PHP:
Sub Test()
    ActiveSheet.ChartObjects(1).Activate
        ActiveChart.PlotArea.Select
        Rate1 = Selection.Width / Selection.Height
        Rate2 = (ActiveChart.Axes(xlCategory).MaximumScale - ActiveChart.Axes(xlCategory).MinimumScale) / _
        (ActiveChart.Axes(xlValue).MaximumScale - ActiveChart.Axes(xlValue).MinimumScale)
        MsgBox Rate1 & Chr(10) & Rate2

End Sub

Khi vừa mở file, chọn sheet chart và không click chạm gì vào biểu đồ, chạy code test, nếu ra 2 kết quả bằng nhau là đúng.
- Đường gióng có thể tạo bằng Errorbar hoặc thêm data point hoặc bất kỳ cách nào, nhưng có 1 bài thi tôi không tìm ra cách tạo đường gióng. Xin chịu thua.

- Hình như ít ai để ý đến việc format datapoint thay vì format data serie, nên những biểu đồ định dạng có mũi tên, thì thấy chỗ nào cũng có mũi tên. Nếu chỉ format data point, thì muốn để mũi tên ở đâu cũng được, chiều mũi tên thế nào cũng được.

3. Phần VBA:

- Câu b nâng cao yêu cầu tạo 1 sub duy nhất, mà cả 3 nút nhấn của 3 sheet đều gọi sub này chạy, nhưng ra kết quả là các báo cáo tương ứng. Nghĩa là 1 thủ tục chạy ra 3 báo cáo khác nhau. Phương pháp thì tùy từng người: thủ tục có tham số truyền hoặc thủ tục sử dụng biến có giá trị động theo sheet và cells trên sheet.
- leonguyen thì viết 1 sub gọi 3 thủ tục ra chạy lần lượt, nên phải tạo 1 nút nhấn mới.
- Hoangminhtien có phương pháp độc đáo là dùng advanced filter với vùng criteria là 1 ô có công thức mang giá trị động theo sheet. Tuy nhiên, Tiến không biết rằng advanced filter có thể sắp xếp thứ tự cột theo ý người dùng, nên đã tự ý thay đổi thứ tự cột của báo cáo. Chỗ này đề ra có mục đích nên các cột 2, 3, 4, 5, 6, 7 của report sẽ lấy dữ kiệu các cột lộn xộn: 2, 1, 7, 9, 8, 10. Tiến tự ý sắp thứ tự cột report để lấy 2, 1, 7, 8, 9, 10. Cột dư lại phải xóa đi. Chỉ vì việc này mà bị trừ 0.25 điểm mặc dù code chạy hoàn hảo.

Đính kèm là file bảng điểm kèm nhận xét

Còn đây là link download các bài dự thi: http://www.mediafire.com/download/z37ky2hbq0fdolh/Baiduthi.rar
 

File đính kèm

Lần chỉnh sửa cuối:
File đính kèm là đáp án
Các bạn xem sheet biểu đồ, thử thay tán loạn các tham số và kiểm tra tỷ lệ. Còn tỷ lệ ngang dọc thì chạy đoạn code test ở trên.
Ngoài ra nguyên cái mặt cắt chỉ có 1 serie, chứ không cần nhiều series (hoặc quá nhiều).

Riêng phần VBA tôi chỉ post code câu b: Thủ tục có tham số truyền

PHP:
Sub ExtractMultiType(Date1, Date2, Criteria, ColNum)
Dim EndRw As Long, SArr(), RArr(), i As Long, j As Long, RwCnt As Long
Application.ScreenUpdating = False
t = Timer
EndRw = Sheet1.[A100000].End(xlUp).Row
SArr = Sheet1.Range("A2:K" & EndRw).Value
RwCnt = UBound(SArr, 1)
ReDim RArr(1 To RwCnt, 1 To 7)
For i = 1 To RwCnt
    If SArr(i, 2) > Date2 Then Exit For
    If SArr(i, 2) <= Date2 And SArr(i, 2) >= Date1 And SArr(i, ColNum) = Criteria Then
        j = j + 1
        RArr(j, 1) = j
        RArr(j, 2) = SArr(i, 2)
        RArr(j, 3) = SArr(i, 1)
        RArr(j, 4) = SArr(i, 7)
        RArr(j, 5) = SArr(i, 9)
        RArr(j, 6) = SArr(i, 8)
        RArr(j, 7) = SArr(i, 10)
    End If
Next
ActiveSheet.[A7].Resize(RwCnt, 7).ClearContents
If j > 0 Then ActiveSheet.[A7].Resize(j, 7) = RArr
Application.ScreenUpdating = True
ActiveSheet.[G1] = Timer - t

End Sub

Rồi các nút nhấn của 3 sheet sẽ lần lượt là:

PHP:
Private Sub CmdBtn1_Click()
ExtractMultiType [C4], [E4], [C5], 4
End Sub

PHP:
Private Sub CmbBtn1_Click()
ExtractMultiType [C4], [E4], [C5], 5
End Sub

PHP:
Private Sub CmbBtn1_Click()
ExtractMultiType [C4], [E4], [C5], 11
End Sub
 

File đính kèm

Công bố kết quả:

Giải nhất: Nick vocamxuc với số điểm 9.75

Giải nhì: Nick Hoangminhtien với số điểm 9.25

Giải ba: Nick dhn46 với số điểm 8.0

Giải khuyến khích nộp bài đầu tiên thuộc về leonguyen: 10/06/2014 14:46:00

Đọc tin này rất vui, may mắn vocamxuc đạt giải, xin chúc mừng các thành viên khác cùng đạt giải.

Hôm nay cũng là ngày sinh nhật Giải pháp excel, thật đáng tiếc là không thể kịp nữa để dự ngày vui này. Chúc toàn thể các thành viên tham dự có một cuộc vui, Diễn đàn có 1 dịp tổng kết các hoạt động thành công, và định hướng phát triển trong tương lai.
 
Công bố điểm:

Có tất cả 7 thành viên tham gia dự thi, số bài nộp là 12, nhưng chỉ chấm điểm và tính ngày giờ cho lần nộp sau cùng.

Bảng kết quả điểm như sau:

|
A​
|
B​
|
C​
|
D​
|
E​
|
F​
|
G​
|
H​
|
1​
|
STT​
|
Tên​
|
Ngày nộp cuối​
|
Pivot table​
|
Validation​
|
Chart​
|
VBA​
|
Cộng​
|
2​
| |Thang điểm| |
2,5​
|
2,5​
|
2,5​
|
2,5​
|
10​
|
3​
|
1​
|vocamxuc|
26/06/2014​
|
2,5​
|
2,5​
|
2,25​
|
2,5​
|
9,75​
|
4​
|
2​
|hoangminhtien|
11/06/2014​
|
2,5​
|
2,25​
|
2,25​
|
2,25​
|
9,25​
|
5​
|
3​
|dhn46|
10/06/2014​
|
2,5​
|
1​
|
2​
|
2,5​
|
8​
|
6​
|
4​
|zztantaibazz|
25/06/2014​
|
2,5​
|
2,25​
|
0​
|
2,5​
|
7,25​
|
7​
|
5​
|leonguyen|
11/06/2014​
|
2,5​
|
1​
|
2,25​
|
2​
|
7,75​
|
8​
|
6​
|linhngoc|
25/06/2014​
|
2,5​
|
2,5​
|
0​
|
0​
|
5​
|
9​
|
7​
|quancui|
12/06/2014​
|
2,5​
|
0​
|
0​
|
0​
|
2,5​
|
Xin chúc mừng mọi người :). Nếu mà em làm dc bài chart chắc cũng có giải rùi :P
 
Một số nhận xét về bài tham gia dự thi:

2. Phần Data validation:
Không biết có ai đọc nhầm đề không, mà có người chỉ làm 1 cột cuối, có người chỉ làm 2 cột cuối, có người không làm cột nào? Phải làm validation cho cả 3 cột, và các validation này cột sau phụ thuộc vào cột phía trước nó.

Ngoài ra, cách dùng name chưa chuẩn xác dẫn đến việc lệch dòng hoặc dư dòng:
- Hoangminhtien: Validation quận và huyện càng xuống dòng dưới vùng name càng bị lệch dòng: Dữ liệu dòng 2 lệch 1 dòng, Dữ liệu dòng 3 lệch 2 dòng, ... do không cố định dòng.
- zztantaibazz: Số dòng của huyện bị thừa về phía dưới, càng xuống dòng dữ liệu dưới càng dư nhiều. name phức tạp quánên chưa tìm ra chính xác nguyên nhân.
Em đã tìm ra nguyên nhân. Em đã cố định nhầm, Thay vì $C2 thì em lại để là C$2, Do đó Quận Huyện luôn luôn lấy giá trị C2 để dùng trong countif
 
Cám ơn thầy đã tạo ra sân chơi bổ ích, hôm nay xem lại bài thấy bài của mình được thầy chấm hơi thoáng nên mới được điểm cao.
2. Phần Data validation:
- Hoangminhtien: Validation quận và huyện càng xuống dòng dưới vùng name càng bị lệch dòng: Dữ liệu dòng 2 lệch 1 dòng, Dữ liệu dòng 3 lệch 2 dòng, ... do không cố định dòng.
Lỗi này cơ bản quá, may mà thầy chỉ trừ có 0.25

3. Phần biểu đồ:
- Hình như ít ai để ý đến việc format datapoint thay vì format data serie, nên những biểu đồ định dạng có mũi tên, thì thấy chỗ nào cũng có mũi tên. Nếu chỉ format data point, thì muốn để mũi tên ở đâu cũng được, chiều mũi tên thế nào cũng được.
Bài này em format datapoint mà thầy. hihi

Tiến không biết rằng advanced filter có thể sắp xếp thứ tự cột theo ý người dùng, nên đã tự ý thay đổi thứ tự cột của báo cáo. Chỗ này đề ra có mục đích nên các cột 2, 3, 4, 5, 6, 7 của report sẽ lấy dữ kiệu các cột lộn xộn: 2, 1, 7, 9, 8, 10. Tiến tự ý sắp thứ tự cột report để lấy 2, 1, 7, 8, 9, 10. Cột dư lại phải xóa đi. Chỉ vì việc này mà bị trừ 0.25 điểm mặc dù code chạy hoàn hảo.
Hôm nay em mới biết cái này, cám ơn thầy, hihi, với lại code của em chỉ toàn là record macro thôi mà.
 
File đính kèm là đáp án
Các bạn xem sheet biểu đồ, thử thay tán loạn các tham số và kiểm tra tỷ lệ. Còn tỷ lệ ngang dọc thì chạy đoạn code test ở trên.
Ngoài ra nguyên cái mặt cắt chỉ có 1 serie, chứ không cần nhiều series (hoặc quá nhiều).

Riêng phần VBA tôi chỉ post code câu b: Thủ tục có tham số truyền

PHP:
Sub ExtractMultiType(Date1, Date2, Criteria, ColNum)
Dim EndRw As Long, SArr(), RArr(), i As Long, j As Long, RwCnt As Long
Application.ScreenUpdating = False
t = Timer
EndRw = Sheet1.[A100000].End(xlUp).Row
SArr = Sheet1.Range("A2:K" & EndRw).Value
RwCnt = UBound(SArr, 1)
ReDim RArr(1 To RwCnt, 1 To 7)
For i = 1 To RwCnt
    If SArr(i, 2) > Date2 Then Exit For
    If SArr(i, 2) <= Date2 And SArr(i, 2) >= Date1 And SArr(i, ColNum) = Criteria Then
        j = j + 1
        RArr(j, 1) = j
        RArr(j, 2) = SArr(i, 2)
        RArr(j, 3) = SArr(i, 1)
        RArr(j, 4) = SArr(i, 7)
        RArr(j, 5) = SArr(i, 9)
        RArr(j, 6) = SArr(i, 8)
        RArr(j, 7) = SArr(i, 10)
    End If
Next
ActiveSheet.[A7].Resize(RwCnt, 7).ClearContents
If j > 0 Then ActiveSheet.[A7].Resize(j, 7) = RArr
Application.ScreenUpdating = True
ActiveSheet.[G1] = Timer - t

End Sub

Rồi các nút nhấn của 3 sheet sẽ lần lượt là:

PHP:
Private Sub CmdBtn1_Click()
ExtractMultiType [C4], [E4], [C5], 4
End Sub

PHP:
Private Sub CmbBtn1_Click()
ExtractMultiType [C4], [E4], [C5], 5
End Sub

PHP:
Private Sub CmbBtn1_Click()
ExtractMultiType [C4], [E4], [C5], 11
End Sub
nếu như mỗi sheet đều phải bấm nút thì chỉ cần dùng code advance filter là được mà thầy
PHP:
Sub advfilter()
Application.ScreenUpdating = False
  t = Timer
   ActiveSheet.[A7:L65000].Clear
   Sheet3.[A1:L65000].AdvancedFilter 2, ActiveSheet.[L1:N2], ActiveSheet.[B6:G6], False
   ActiveSheet.Range("A7:A" & [B55000].End(3).Row).Value = Evaluate("ROW(R:R)")
  Application.ScreenUpdating = True
 ActiveSheet.[G1] = Timer - t
End Sub
 
nếu như mỗi sheet đều phải bấm nút thì chỉ cần dùng code advance filter là được mà thầy
PHP:
sub advfilter()
application.screenupdating = false
  t = timer
   activesheet.[a7:l65000].clear
   sheet3.[a1:l65000].advancedfilter 2, activesheet.[l1:n2], activesheet.[b6:g6], false
   activesheet.range("a7:a" & [b55000].end(3).row).value = evaluate("row(r:r)")
  application.screenupdating = true
 activesheet.[g1] = timer - t
end sub
sao không có bài của hoàng minh tiến thầy nhỉ
 
nếu như mỗi sheet đều phải bấm nút thì chỉ cần dùng code advance filter là được mà thầy
Thì đúng vậy. Hoangminhtien đã làm như vậy với chỉ 1 ô chứa công thức dùng làm criteria. Còn code tham số truyền là 1 cách làm trong trường hợp không thể dùng Advanced filter. Nó mang tính chuyên nghiệp hơn nhưng nếu dùng được công cụ có sẵn thì cứ dùng.

hoangminhtien đã viết:
Bài này em format datapoint mà thầy. hihi

Format data point thì phải được như hình trong vòng tròn đỏ, chứ không phải các mũi tên châu đầu như trong các hình tròn xanh



Lê Duy Thương đã viết:
sao không có bài của hoàng minh tiến thầy nhỉ

Chết, upload sót rồi. Mọi người tải tại đây nha: http://www.mediafire.com/download/117ap5kmyh77c3r/hoangminhtien.rar
 
Format data point thì phải được như hình trong vòng tròn đỏ, chứ không phải các mũi tên châu đầu như trong các hình tròn xanh
Vâng, Đúng như thầy nói, tuy nhiên, em đã kiểm tra lại bài của em mấy lần và em vẫn khẳng định em dùng format data point thầy ạ.
Thầy kiểm tra lại giúp em nhé!
 
Chỉnh sửa lần cuối bởi điều hành viên:
Phần 2: Validation: quá đơn giản, nhắm mắt cũng làm được, đưa thằng OFset và Vlookup là xong 5 phút
Offset tham chiếu Xã dùng bao nhiêu lần Offset vậy bạn? Tôi nhớ không nhầm thì 2 lần Offset lận, vì có nhiều tỉnh trùng tên huyện, nếu Offset(vung,,,countif(...)) thì sai kết quả đấy.
 
Vâng, Đúng như thầy nói, tuy nhiên, em đã kiểm tra lại bài của em mấy lần và em vẫn khẳng định em dùng format data point thầy ạ.
Thầy kiểm tra lại giúp em nhé!
Dù là đã dùng Format data point thì cũng là dùng chưa đúng cách. Hãy xem file đính kèm để thấy sự khác biệt và hiệu quả của việc format đúng cách.
 

File đính kèm

Công bố kết quả:

Giải nhất: Nick vocamxuc với số điểm 9.75

Giải nhì: Nick Hoangminhtien với số điểm 9.25

Giải ba: Nick dhn46 với số điểm 8.0

Giải khuyến khích nộp bài đầu tiên thuộc về leonguyen: 10/06/2014 14:46:00

Vì không có điều kiện dự sinh nhật và giờ lâu mới quay lại đây, nên không rõ: Hoangminhtien, dhn46 , leonguyen đã nhận giải thưởng chưa? nếu chưa thì liên hệ sao?, xin cảm ơn
 
Vì không có điều kiện dự sinh nhật và giờ lâu mới quay lại đây, nên không rõ: Hoangminhtien, dhn46 , leonguyen đã nhận giải thưởng chưa? nếu chưa thì liên hệ sao?, xin cảm ơn

Chép ra đây code VBA ra đây cho tiện mọi thành viên tham khảo, bài này vocamxuc viết cho VBA câu b chỉ duy 1 và chỉ 1 sub để chạy cả 3 nút ở Report1, Report2, Report3: code lấy chính số thứ tự 1 2 3 trong tên sheet Report hiện tại làm căn cứ lấy name động được đặt trong file. code bao gồm cả phần xoá và đầy đủ khung

Mã:
'25/06/2014
'nick vocamxuc-GiaiPhapExcel
'Bai lam cho ca cau a va cau b
Sub chaybaocao()
    Dim solieu, ketqua, giatridulieuloc
    Dim cotloc As Long, n As Long, i As Long, j As Long, p As Long
    Dim sobaocao As Byte, odulieuloc As Range
    
    sobaocao = Int(Right(ActiveSheet.Name, 1))
    Set odulieuloc = ActiveSheet.[C5]
    
    solieu = Range("vRngDateRp" & sobaocao).Value
    n = UBound(solieu, 1)
    
    Select Case sobaocao
        Case 1: cotloc = 4 'Customer
        Case 2: cotloc = 5 'Vendor
        Case 3: cotloc = 11 'Sales
    End Select
    
    ReDim ketqua(1 To n, 1 To 7)
    giatridulieuloc = odulieuloc.Value
    p = 0
    For i = 1 To n
        If solieu(i, cotloc) = giatridulieuloc Then
            p = p + 1
            j = 1:      ketqua(p, j) = p                '#
            j = j + 1:  ketqua(p, j) = solieu(i, 2)    'DocDate
            j = j + 1:  ketqua(p, j) = solieu(i, 1)    'DocNo
            j = j + 1:  ketqua(p, j) = solieu(i, 7)    'ProductID
            j = j + 1:  ketqua(p, j) = solieu(i, 9)    'Price
            j = j + 1:  ketqua(p, j) = solieu(i, 8)    'Qty
            j = j + 1:  ketqua(p, j) = solieu(i, 10)    'Amount
        End If
    Next i
    
    If p > 0 Then
        With odulieuloc.Offset(2, -2)
            .Resize(10000, 11).ClearContents
            .Resize(p, j).Value = ketqua
        End With
    End If
        
    '_________________________________ phan ke khung
    If p > 0 Then
        With odulieuloc.Offset(2, -2).Resize(10000, 11)
            .Borders(xlDiagonalDown).LineStyle = xlNone
            .Borders(xlDiagonalUp).LineStyle = xlNone
            .Borders(xlEdgeLeft).LineStyle = xlNone
            .Borders(xlEdgeTop).LineStyle = xlNone
            .Borders(xlEdgeBottom).LineStyle = xlNone
            .Borders(xlEdgeRight).LineStyle = xlNone
            .Borders(xlInsideVertical).LineStyle = xlNone
            .Borders(xlInsideHorizontal).LineStyle = xlNone
        End With
        
        With odulieuloc.Offset(2, -2).Resize(p, j)
            .Borders(xlDiagonalDown).LineStyle = xlNone
            .Borders(xlDiagonalUp).LineStyle = xlNone
            With .Borders(xlEdgeLeft)
                .LineStyle = xlContinuous
                .ColorIndex = xlAutomatic
                .TintAndShade = 0
                .Weight = xlThin
            End With
            With .Borders(xlEdgeTop)
                .LineStyle = xlContinuous
                .ColorIndex = xlAutomatic
                .TintAndShade = 0
                .Weight = xlThin
            End With
            With .Borders(xlEdgeBottom)
                .LineStyle = xlContinuous
                .ColorIndex = xlAutomatic
                .TintAndShade = 0
                .Weight = xlThin
            End With
            With .Borders(xlEdgeRight)
                .LineStyle = xlContinuous
                .ColorIndex = xlAutomatic
                .TintAndShade = 0
                .Weight = xlThin
            End With
            With .Borders(xlInsideVertical)
                .LineStyle = xlContinuous
                .ColorIndex = xlAutomatic
                .TintAndShade = 0
                .Weight = xlThin
            End With
            With .Borders(xlInsideHorizontal)
                .LineStyle = xlContinuous
                .ColorIndex = xlAutomatic
                .TintAndShade = 0
                .Weight = xlHairline
            End With
        End With
    End If
    '_________________________________
    
End Sub

trong đó name

vRngDateRp1 cho Report1 là
=OFFSET(Data!$A$1,MATCH(Report1!$C$4,vDataDate,0),0,COUNTIFS(vDataDate, ">="& Report1!$C$4,vDataDate, "<="& Report1!$E$4),11)


tương tự vRngDateRp2,vRngDateRp3 cho Report1, Report2

Hiểu rõ các names tham khảo nên download file BaithiGPE8-vocamxuc_v2.rar kèm dự thi ptm0412 đã post bài trên tại http://www.mediafire.com/download/z37ky2hbq0fdolh/Baiduthi.rar
 
Lần chỉnh sửa cuối:
Công bố kết quả:

Giải nhất: Nick vocamxuc với số điểm 9.75

Giải nhì: Nick Hoangminhtien với số điểm 9.25

Giải ba: Nick dhn46 với số điểm 8.0

Giải khuyến khích nộp bài đầu tiên thuộc về leonguyen: 10/06/2014 14:46:00
Rất xin lỗi anh/chị vì đến hôm nay mà chưa trao quà cho anh/chị đạt giải.
Anh/chị vui lòng gửi địa chỉ nhận quà tại topic này hoặc gửi qua mail: hotro@giaiphapexcel.com
Ngay sau khi nhận được địa chỉ, thì quà tặng sẽ được chuyển ngay đến tận tay các anh/chị.
Rất cảm ơn anh/chị.
Một lần nữa thành thật xin lỗi vì sơ sót này.
moneymong.pt
 
Em đã chuyển quà xong cho 4 anh đạt giải nhé!!!
Còn về món quà thì sẽ được giữ bí mật đến khi các anh nhận.
 
Em đã chuyển quà xong cho 4 anh đạt giải nhé!!!
Còn về món quà thì sẽ được giữ bí mật đến khi các anh nhận.
Hôm nay dhn46 đã nhận được quà từ "Giải pháp Excel", dhn46 rất vui khi cầm trên tay món quà này.

Cuộc thi nhưng ít thành viên tham gia nên dhn46 may mắn có giải với bài thi sơ sài đã làm. Nhưng qua những lần thi dhn46 thấy mình đã học được nhiều hơn từ GPE, và càng tỏ lòng cảm ơn những "thầy" ra đề, đó là tâm huyết là sự nhiệt thành trong từng câu hỏi của mỗi cuộc thi.

dhn46 chúc GPE ngày càng phát triển!

Ảnh012.jpg


Ảnh015.jpg

Ảnh017.jpg

(Không hiểu sao dhn46 không hiện ảnh lên được, nhờ ban quản trị hiện ảnh lên giùm)
 
Lần chỉnh sửa cuối:
Hôm nay dhn46 đã nhận được quà từ "Giải pháp Excel", dhn46 rất vui khi cầm trên tay món quà này.

Cuộc thi nhưng ít thành viên tham gia nên dhn46 may mắn có giải với bài thi sơ sài đã làm. Nhưng qua những lần thi dhn46 thấy mình đã học được nhiều hơn từ GPE, và càng tỏ lòng cảm ơn những "thầy" ra đề, đó là tâm huyết là sự nhiệt thành trong từng câu hỏi của mỗi cuộc thi.

dhn46 chúc GPE ngày càng phát triển!


View attachment 126201

View attachment 126202

ATTACH]


(Không hiểu sao dhn46 không hiện ảnh lên được, nhờ ban quản trị hiện ảnh lên giùm)
Có phải thêm cặp
vào ko nhỉ?
 
Hôm nay hoangminhtien cũng đã nhận được quà từ GPE, Cám ơn GPE đã tạo ra sân chơi bổ ích.
Nếu như cuộc thi này mà có nhiều người tham gia thì sẽ còn vui hơn nữa và có lẽ khi đó quà này sẽ thuộc về phần người khác.
Book.jpg
 
Hôm nay hoangminhtien cũng đã nhận được quà từ GPE, Cám ơn GPE đã tạo ra sân chơi bổ ích.
Nếu như cuộc thi này mà có nhiều người tham gia thì sẽ còn vui hơn nữa và có lẽ khi đó quà này sẽ thuộc về phần người khác.
Book.jpg

Hẹn sang năm thi thố a nhé.. hị hị
 
Lần chỉnh sửa cuối:
Cám ơn , vocamxuc đã nhận được giải thưởng là 1 cuốn truyện "Thiên nga đen", tôi rất thích cuốn này. Cám ơn BTC, cám ơn tất cả. Một giải thưởng có ý nghĩa.

Đặc biệt cám ơn moneymong.pt nha (hẹn tái ngộ sau ha).

xin trích ra đây lời giới thiệu món quà.
theo http://www.vinabook.com/c463/thien-nga-den-p39121.html

tóm tắt giới thiệu truyện:

Thiên Nga Đen là một biến cố tưởng chừng như không thể xảy ra với ba đặc điểm chính: không thể dự đoán, có tác động nặng nề và sau khi nó xảy ra, người ta dựng lên một lời giải thích để khiến nó ít ngẫu nhiên hơn, dễ dự đoán hơn bản chất thật của nó. Thành công bất ngờ của Google có thể xem là một "thiên nga đen", sự kiện ngày 11 tháng 9 cũng vậy. Với Nassim Nicholas Taleb, "thiên nga đen" ẩn chứa hầu như mọi điều về thế giới này, từ sự trỗi dậy của tôn giáo đến những biến cố trong cuộc sống của chính chúng ta

Vì sao chúng ta không nhận thấy những hiện tượng "thiên nga đen" mãi đến sau khi chúng xảy ra? Theo Taleb, một phần là vì con người chúng ta tự trói buộc mình vào những cái chi tiết trong khi lẽ ra nên tập trung vào cái tổng quát. Chúng ta tập trung vào những gì đã biết trong khi hết lần này đến lần khác bỏ qua những thứ mình chưa biết. Do đó, chúng ta không thể đánh giá được các cơ hội, không thể kháng lại xu hướng đơn giản hóa, tường thuật và phân loại, và không đủ phóng khoáng để tưởng thưởng cho những ai có thể hình dung ra được "những cái không thể"

Tinh tế, bao quát và đầy kinh ngạc, Thiên Nga Đen sẽ thay đổi cách nhìn của bạn về thế giới. Taleb thực sự là tác giả của thể loại sách khai trí với những câu chuyện dí dỏm, ngông cuồng và khác thường. Ông là người có kiến thức uyên thâm trong nhiều lĩnh vực, từ khoa học nhận thức, kinh doanh cho đến lý thuyết xác suất. Thiên Nga Đen là cuốn sách mang tính bước ngoặc - bản thân nó chính là một "thiên nga đen


39121.jpg
 
Hi vọng các anh thích món quà mà em chọn. Vào nhà sách chọn tới chọn lui, chẳng biết lấy quyển nào để phù hợp với từng anh. Mất cũng gần 1 buổi luôn đó. Mong các anh thích.
Và năm sau tổ chức tiếp cuộc thi online, mong rằng em lại được chọn quà cho các anh nha.
Thân,
moneymong.pt
 

Bài viết mới nhất

Back
Top Bottom