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.
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 )
Bài vẽ chart chắc em phải chờ bài giải để học .
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 )
Bài vẽ chart chắc em phải chờ bài giải để học .
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.
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.
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
Đọ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.
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.