Cần giúp về truy xuất dữ liệu theo tháng, và tránh sai lầm khi nhập liệu!!!

Liên hệ QC

thevu01

Thành viên mới
Tham gia
30/12/08
Bài viết
48
Được thích
14
Xin chào các bạn, hiện mình đang có vấn đề về dữ liệu rất mong được các bạn giúp đỡ.
Mình có gửi đính kèm theo file, vấn đề của mình là mình muốn lọc ra theo tháng ở phía dưới bảng tính. Ví dụ:
- Trong tháng 2: số tiền thu được trong tháng, số lượng đóng tiền từng môn trong tháng 2.
- Tương tự đối với các tháng tiếp theo.

Thật ra file mình gửi lên là mình đã lượt bớt đi rất nhiều chứ nếu đơn giản như trong bảng mình gửi lên thì khỏi nói rồi. Vấn đề quan trọng là mình cần một hàm có thể truy xuất được tất cả các ngày trong tháng và các ngày trong cùng 1 tháng không liên tiếp nhau nha. Một điều nữa là mình cần công thức hàm chứ không làm code VBA được nha, vì bảng tính của mình đã được bạn ChanhTQ@ làm giúp 1 doạn code cho việc khác rồi, mình sợ thêm code vào sẽ rắc rối thêm ^^!.

Một vấn đề nữa mình cần được ý kiến tư vấn của các bạn thường xuyên nhập dữ liệu là có phương pháp nào để giảm tối đa việc nhập nhầm hay không, cụ thể trong bảng tính của mình thì chỉ có 21 môn học nhưng thật sự mình phải làm là khỏang 50 môn học và với lượng sv đóng tiền quá đông thì việc đánh dấu nhầm môn này qua môn khác là không thể tránh khỏi.
Vì vậy mình các bạn có phương pháp nào hay mẹo nào để giảm khả năng đánh nhầm môn học trong trường hợp của mình thì bày cho mình với.

Xin cảm ơn các bạn rất nhiều!!!
 

File đính kèm

  • truy xuat du lieu theo thang.xls
    76 KB · Đọc: 80
To thevu01: Sao cột số tiền và cột tiền cuối cùng kết quả khác nhau nhỉ? Nếu thống kê số tiền thì lấy theo cột số tiền hay cột cuối cùng??
Mình làm tổng cộng theo cột cuối cùng nhé, bạn xem sheet thống kê: Thống kê theo từng tháng và cả năm.
Dữ liệu bạn nhập vào không có điều kiện nên việc nhập cột này qua cột khác là chuyện bình thường, chỉ có thể kiểm soát khi người ta nhập vào không phải là chữ "X" mà là 1 kí tự nào khác dẫn đến việc thống kê bị sai thôi.
 

File đính kèm

  • truy xuat du lieu theo thang.xls
    79.5 KB · Đọc: 74
Lần chỉnh sửa cuối:
To: ditimdl
2 cột đó kết quả khác nhau là vì ở hàng 50 mình đánh thiếu 1 môn học giá 150,000 đó ^^!.

Mình cảm ơn bạn ditimdl nhiều lắm nhất là cái hàm if của mình bạn đã làm gọn và đẹp hơn rất nhiều mình sẽ sử dụng luôn.
Còn phần lọc theo tháng bạn giúp mình vầy đã vượt quá mức mình cần luôn, nhưng mà tại trình độ excel của bạn quá cao so với mình nên nhìn vô mình không hiểu gì hết mai mốt có cần thay đổi gì thì mình bó tay luôn hì..hì.

Thông thường thì một bảng dữ liệu mình chỉ sử dụng trong 1 học kỳ thôi (khoảng 6 tháng) hết học kỳ tổng kết tất cả xong, thì mình phải làm 1 bảng mới vì môn học của các khoá đã thay đổi và để tránh nhầm lẫn. Vì vậy bạn giúp mình làm 1 hàm để tổng kết theo từng tháng ở phía dưới bảng tính của mình đó, phía dưới mình có để tháng 2 , tháng 3... đó. Ví dụ tại N61 là tổng số tiền trong tháng 2, Ố là tổng số sv đóng PHI QLHS (theo chữ X trong tháng 2), mình sẽ lấy những cái đó sử dụng cho những môn khác và những tháng khác. Mình chỉ mường tượng như vậy để bạn hiểu ý mình thôi chứ khả năng của mình thì không làm được.
Cứ liệt kê ra hết đi không cần gộp lại đâu tại vì mình sẽ làm 1 sheet ở 1 file khác lấy trực tiếp các số đó để in ra báo cáo với sếp luôn, còn theo bảng của bạn làm thì quá chuyên nghiệp nhưng mà mình không biết cách lấy số liệu trong đó để làm 1 sheet khác in ra giấy ^^!, với lại nếu sau này làm bảng khác có nhiều môn hơn thì mình cũng không biết chỉnh sửa thế nào hết. Cảm ơn bạn đã giúp mình nha.
 
- Trong bài mình dung sumproduct() hàm này để đếm hay tính tổng theo nhiều
điều kiện
- DATE(2009,1,1) cái này để lấy ngày đầu tiên của tháng 1 năm 2009
- DATE(2009,2,0) cái này dùng để trả về ngày cuối cùng trong tháng đó
- Sumproduct() trong trường hợp này dùng để đếm "X" trong cột tương ứng
và thời gian được giới hạn từ đầu tháng đến cuối tháng đó
- Mình làm luôn 12 tháng, nếu không dùng tháng nào thì xóa tháng đó nha.
 

File đính kèm

  • truy xuat du lieu theo thang.rar
    24.2 KB · Đọc: 107
Xin chào các bạn, hiện mình đang có vấn đề về dữ liệu rất mong được các bạn giúp đỡ.
Mình có gửi đính kèm theo file, vấn đề của mình là mình muốn lọc ra theo tháng ở phía dưới bảng tính. Ví dụ:
- Trong tháng 2: số tiền thu được trong tháng, số lượng đóng tiền từng môn trong tháng 2.
- Tương tự đối với các tháng tiếp theo.
Xin cảm ơn các bạn rất nhiều!!!
Góp thêm một ý cho vui:
Các môn học có nhiều giá khác nhau, sao không thêm một dòng ghi giá mỗi môn? Khi có dòng này thì nếu thay đổi tăng, giảm giá từng môn sẽ dễ dàng hơn.
Cụ thể, cột Thành tiền cuối cùng sẽ gọn hơn rất nhiều.
 

File đính kèm

  • Copy of truy xuat du lieu theo thang.rar
    21.3 KB · Đọc: 54
To Ba Tê: bạn ơi khi mình thử sử dụng hàm trích lọc theo tháng của bạn cụ thể là hàm: =SUM((MONTH($C$4:$C$53)=$L62)*(Q$4:Q$53="X")) thì bị báo lỗi là (13) type mismatch . Mình nghĩ là chắc do máy mình, bạn giúp với ^^!.
 
To Ba Tê: bạn ơi khi mình thử sử dụng hàm trích lọc theo tháng của bạn cụ thể là hàm: =SUM((MONTH($C$4:$C$53)=$L62)*(Q$4:Q$53="X")) thì bị báo lỗi là (13) type mismatch . Mình nghĩ là chắc do máy mình, bạn giúp với ^^!.
Xin lỗi vì Bài trả lời lúc trước.
Lỗi đấy là do: đây là công thức mảng, sau khi nhập công thức, phải ấn Ctrl+Shift+Enter thì mới đúng
 
Lần chỉnh sửa cuối:
Có thể vấn đề mình sắp hỏi không phù hợp trong box này nhưng mà cùng 1 bảng tính mà tạo thêm 1 bài mới thì mình thấy không thích hợp lắm nên có gì mod bỏ qua cho mình nha.

Vấn đề là mình thêm vào cột số môn, và mình muốn nhờ các bạn viết giúp 1 hàm sao cho khi ta di chuyển đến ô trong cột này thì sẽ hiển thị tên và số môn của sinh viên đó tương ứng với dấu "X" ta đã đánh dấu. Môn học của sinh viên ta sẽ dựa vào các ô từ P1 đến AP1

Ví dụ ở hàng số 4, thì khi ta di chuyển đến A4 thì sẽ xuất hiện ghi chú "Trần Văn Hiếu - LTXXTKe + KTeQTe + L.Kte".

Phần ghi chú minh nói ở đây là tương tự như khi ta đặt ghi chú bằng cách vào data - validation - input message, tại vì mình không rõ về vấn đề này nên chỉ có thể nói chung chung vậy mong các bạn có thể hình dung được ý của mình. Và mình rất mong được sự giúp đỡ của các bạn.
 

File đính kèm

  • hien thi ten va mon dang ky.xls
    81.5 KB · Đọc: 40
Bạn xài thử macro sự kiện sau

PHP:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
 If Not Intersect(Target, Range("A4:A" & [B65500].End(xlUp).Row)) Is Nothing Then
   Dim Col As Byte:           Dim StrC As String, GN As String
   Dim Rng As Range, Clls As Range
 
   Col = Range("MonHoc").Columns.Count
   Set Rng = Cells(Target.Row, "P").Resize(, Col)
   StrC = Cells(Target.Row, "H") & " " & Cells(Target.Row, "I") & " -"
   For Each Clls In Range("MonHoc")
      If UCase(Cells(Target.Row, Clls.Column).Value) = "X" Then
         If Right(StrC, 1) = "-" Then GN = " " Else GN = "+"
         StrC = StrC & GN & Clls.Value
      End If
   Next Clls
   MsgBox StrC
 End If
End Sub
Chú ý khi dùng:

(1) Macro yêu câu ta gán tên cho vùng 'P1. .AP1' có tên là 'MonHoc'

(2) Macro được chép xuống dưới cái mà chúng ta đã có; Bạn cứ nhấn chuột vô ô nào đó của cột 'A' thì sẽ toại nguyện; Tuy nhiên hiện chữ ả rập hay I ran tùy thuộc font của bạn đang dùng

(3) Hiện tại macro thể hiện cho ta trên MsgBox, Nếu bạn muốn nó xuất hiện tại Comment của ô bạn đụng đến thì làm cũng được & chờ trong ngày sẽ làm tiếp. Lúc đó macro sẽ fải làm 2 việc: Xóa (những) cái Comments cũ đi & thêm cái mới tại ô bạn rờ tới

Thêm fần khuyến mãi đê: Hàm IF(. . .) ở bài #4 có thể đặt thừa số chung 10^4 ra ngoài; Lúc đó hàm sẽ còn gọn hơn nữa. Chúc ngày nghỉ vui vẽ nha! Mình đi thể thao chút!
 
Lần chỉnh sửa cuối:
Image00004.png

@ ChanhTQ@
Mình copy đoạn code của bạn vào bảng code có sẵn thì bị lỗi như hình trên vậy đó.
Được bạn ChanhTQ@ giúp đỡ thì hay quá tại bảng code của mình là bạn viết giúp nên có gì cũng dễ hơn. Bây giờ cần phải viết code mới làm được cái ghi chú vậy thì bạn giúp mình phần này với nha, để làm phần ghi chú này ta phải insert thêm 1 côt tức là cột A vậy là phần code bạn viết giúp mình ở phần nhập mssv thì truy xuất tên sinh viên ở 2 sheet "taiday" va "noikhac" phải thay đổi chút ít đúng không. Vì mình không hiểu nhiều về code nên mình phải hỏi kỹ sợ là sau này sẽ ảnh hưởng, đoạn code:
ElseIf Not Intersect(Target, Range("F3:F" & SoSV)) Is Nothing Then
For Jj = 1 To 2
ShName = Choose(Jj, "taiday", "noikhac")
With Sheets(ShName).Range("B2:B" & SoSV)
Set sRng = .Find(what:=Target.Value, LookIn:=xlFormulas, lookat:=xlWhole)
If Not sRng Is Nothing Then _
Target.Offset(, 1).Resize(, 7).Value = sRng.Offset(, 1).Resize(, 7).Value
End With
Next Jj
Mình sửa Range("F3:F" & SoSV)) thành Range("G3:G" & SoSV)) như vậy có ảnh hưởng gì đến các công việc khác của bảng code không? Tại vì bây giờ cột nhập mssv là cột G chứ không phải cột F (do ta đã insert thêm 1 cột).

(1) Macro yêu câu ta gán tên cho vùng 'P1. .AP1' có tên là 'MonHoc'
Mình không hiểu rõ về vụ này nên không biết gán sao nữa, nếu bây giờ phải làm macro thì mình không thay đổi số ô được như hàm (không dám phá bậy đó mà --=0) nên bạn giúp mình làm trừu hao giúp mình từ 'P1..BE1' luôn nha, không biết như vậy có ảnh hưởng gì không chứ mỗi học kỳ mình làm thì số môn học khác nhau có khi đến 40 môn học lận. Mình gửi file lên bạn sửa và giúp mình thêm vào phần code này với nha, cảm ơn bạn nhiều lắm.
 

File đính kèm

  • GUI GPE.rar
    55.3 KB · Đọc: 33
Chuyện nào fải ra chuyện ấy mới gở được, nếu không rối lắm.

Thứ nhất: Code của mình đưa lên đảm bảo chạy tốt với file của bạn tại bài #12.
Bạn đã làm đúng hướng dẫn để bỏ code vô file đó & chạy OK chưa?. Mình vẫn cỏn file lưu & chạy tốt.

Thứ hai: Code đang báo lỗi ở #14 là code trước (của mình thiệt, nhưng hồi đó đã được nghiệm thu & chuyển giao). Hiện tại chưa có code tại topic này trong đó & bị báo lỗi. Thì không fải do code của Topic này gây lỗi đến code cũ.

Thứ ba: Việc bây giờ của bạn fải là chạy code trước với CSDL trước không lỗi cái đã.
Sau đó mới bàn tiếp chuyện đưa thêm code mới vô.
& điều quan trọng là trả lời cho được sau mỗi lần xuất hiện lỗi là do đâu. Nếu tự không tìm ra thì đưa lên diễn đàn nhờ người tư vấn chỉnh sửa. Đó là chuyện thường tình khi vận hành CSDL. Vì CSDL không tĩnh tại nó cũng vận động & fát triển theo nhu cầu quản lý của ta.

Thứ 4: Bạn cũng cần hiểu biết ít nhiều nội dung các câu lệnh. Đó cũng giống như vốn đối ứng khi kêu gọi nước ngoài đầu tư. Có vậy thì những sửa chửa chỉnh lý nho nhỏ bạn tự ên được.
Mình biết môi trường làm việc của bạn là môi trường trí thức. Vậy mới nói với bạn điều ấy.

Chúc thành công!
 
uhm vậy bây giờ chúng ta giải quyết phần ghi chú trước nha. Trong file hien thi ten ca mon dang ky.xls mà mình post lênthì đã có sẵn phần code cũ sẵn trong đó rồi. Minh copy đoạn code mới của bạn tức là đoạn code này:
PHP:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
 If Not Intersect(Target, Range("A4:A" & [B65500].End(xlUp).Row)) Is Nothing Then
   Dim Col As Byte:           Dim StrC As String, GN As String
   Dim Rng As Range, Clls As Range
 
   Col = Range("MonHoc").Columns.Count
   Set Rng = Cells(Target.Row, "P").Resize(, Col)
   StrC = Cells(Target.Row, "H") & " " & Cells(Target.Row, "I") & " -"
   For Each Clls In Range("MonHoc")
      If UCase(Cells(Target.Row, Clls.Column).Value) = "X" Then
         If Right(StrC, 1) = "-" Then GN = " " Else GN = "+"
         StrC = StrC & GN & Clls.Value
      End If
   Next Clls
   MsgBox StrC
 End If
End Sub
copy thêm vào phía thì bị báo lỗi như hình mình đã đưa lên.
Bây giờ mình xóa đoạn code cũ chỉ để đoạn code mới thì cũng còn bị lỗi tương tự mình chọn debug thì nó tô vàng ngay đoạn
Col = Range("MonHoc").Columns.Count. Mình sẽ quay lại 1 đoạn clip sẽ post lên cho bạn xem sau nha. Có thể là tại máy mình bị lỗi hay là mình làm không đúng quá


 
Lần chỉnh sửa cuối:
<font color="#000000"> debug thì nó tô vàng ngay đoạn
PHP:
Col = Range("MonHoc").Columns.Count


Vậy bạn đã có vùng 'MonHoc' trong trang tính chưa vậy?

Đây là vùng được gán tên. Bạn fải làm việc gán này trước khi chạy Code, bằng không nó sẽ cự nự là cái chắc đó.
 
Vậy bạn đã có vùng 'MonHoc' trong trang tính chưa vậy?

Đây là vùng được gán tên. Bạn fải làm việc gán này trước khi chạy Code, bằng không nó sẽ cự nự là cái chắc đó.
[/COLOR][/COLOR]
Hèn chi bạn ChanhTQ@ nói là của bạn ấy chạy bình thường, vậy là do mình chưa gán rồi. Cũng như mình đã nói ở trên, mình không biết gán vùng rồi ^^!, mình hỏi google nó cũng không chỉ, các bạn giúp mình với.
 
Lần chỉnh sửa cuối:
Chú ý khi dùng:

(1) Macro yêu câu ta gán tên cho vùng 'P1. .AP1' có tên là 'MonHoc'

(2) Macro được chép xuống dưới cái mà chúng ta đã có; Bạn cứ nhấn chuột vô ô nào đó của cột 'A' thì sẽ toại nguyện; Tuy nhiên hiện chữ ả rập hay I ran tùy thuộc font của bạn đang dùng

(3) Hiện tại macro thể hiện cho ta trên MsgBox, Nếu bạn muốn nó xuất hiện tại Comment của ô bạn đụng đến thì làm cũng được & chờ trong ngày sẽ làm tiếp. Lúc đó macro sẽ fải làm 2 việc: Xóa (những) cái Comments cũ đi & thêm cái mới tại ô bạn rờ tới

Cũng như mình đã nói ở trên, mình không biết gán vùng rồi ^^!, mình hỏi google nó cũng không chỉ, các bạn giúp mình với.

Bạn thực hiện như sau:

(*) Lấy chuột tô chọn vùng màu đỏ bên trên trong trang tính;
(*) Bên trái nhất của thanh công thức có ngăn mà ta thấy nó đang chứa địa chỉ P1;
(*) Bạn bấm chuột vô đó & nhập chuỗi "MonHoc" & {ENTER} là xong thôi;
(+) Để kiểm tra sự tồn tại của tên này ta có chí ít vài 3 cách sau: (a) Vô Menu Insert .. . Name
Hay (b) dùng chuột tô chọn vùng đó trên trang tính ta sẽ thấy tên ta gán cho vùng này tại ngăn đó & cách nữa là vô menu Edit. . . Go To. . .

Chúc bạn thành công nha!
 
Cảm ơn bạn HYen17 nhiều lắm mình làm được rồi.
@ ChanhTQ@ mình đã thành công với đoạn code của bạn và đúng như bạn dự đoán nó ra tiếng iran ^^!. Cảm ơn bạn rất nhiều, mình chờ tin về phần "xuất hiện tại Comment của ô bạn đụng đến" của bạn nha.

Một lần nữa xin chân thành cảm ơn sự giúp đỡ của các bạn, cảm ơn GPE ^^!
 
Thích thì chìu; Bạn chép đè hoàn toàn lên cái macro cũ nha!

PHP:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
 If Not Intersect(Target, Range("A4:A" & [B65500].End(xlUp).Row)) Is Nothing Then
   Dim Col As Byte:           Dim StrC As String
   Dim Rng As Range, Clls As Range
   
   Range("A4:A" & [B65500].End(xlUp).Row).ClearComments
   Col = Range("MonHoc").Columns.Count
   Set Rng = Cells(Target.Row, "P").Resize(, Col)
   StrC = Cells(Target.Row, "H") & " " & Cells(Target.Row, "I")
   For Each Clls In Range("MonHoc")
      If UCase(Cells(Target.Row, Clls.Column).Value) = "X" Then
         StrC = StrC & Chr(10) & "+" & Clls.Value
      End If
   Next Clls
   Target.NoteText StrC
 End If
End Sub
 
PHP:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
 If Not Intersect(Target, Range("A4:A" & [B65500].End(xlUp).Row)) Is Nothing Then
   Dim Col As Byte:           Dim StrC As String
   Dim Rng As Range, Clls As Range
   
   Range("A4:A" & [B65500].End(xlUp).Row).ClearComments
   Col = Range("MonHoc").Columns.Count
   Set Rng = Cells(Target.Row, "P").Resize(, Col)
   StrC = Cells(Target.Row, "H") & " " & Cells(Target.Row, "I")
   For Each Clls In Range("MonHoc")
      If UCase(Cells(Target.Row, Clls.Column).Value) = "X" Then
         StrC = StrC & Chr(10) & "+" & Clls.Value
      End If
   Next Clls
   Target.NoteText StrC
 End If
End Sub

Mình xin cảm ơn sự giúp đỡ của bạn SA_DQ rất nhiều, mình đã test thử đoạn code của bạn thấy hoạt động rất tốt nhưng còn một vài vấn đề mình mong được các bạn giúp đỡ:

1. Chúng ta chỉ xem ghi chú được tối đa là họ tên và 4 môn học thôi, sinh viên nào đóng 5 môn trở lên thì mình cũng chỉ nhìn thấy được 4 môn ah.

2. khi chúng ta rê chuột vào ô nào đó trong cột A thì mới xem được ghi chú, nếu được bạn giúp mình không cần rê chuột mà di chuyển bằng bàn phím đến ô nào đó trong cột A vẫn xem được ghi chú nha tại vì trong lúc nhập và kiểm tra mình rất ít sử dụng chuột ( cái này cũng không quan trọng lắm, nếu không được thì thôi bởi vì như vầy đã là quá tốt)

3. Vấn đề là sử dụng đoạn code này chung với đoạn code cũ mình đang sử dụng thì bị lỗi, nhưng vấn đề này chúng ta sẽ giải quyết sau khi hoàn chỉnh phần ghi chú này nha.

Cảm ơn các bạn rất nhiều ^^!
http://www.giaiphapexcel.com/forum/member.php?10-SA_DQ
 
Code của bạn thấy hoạt động tốt nhưng còn một vài vấn đề mình mong được các bạn giúp đỡ:

1. Chúng ta chỉ xem ghi chú được tối đa là họ tên và 4 môn học thôi, sinh viên nào đóng 5 môn trở lên thì mình cũng chỉ nhìn thấy được 4 môn ah.

2. khi chúng ta rê chuột vào ô nào đó trong cột A thì mới xem được ghi chú, nếu được bạn giúp mình không cần rê chuột mà di chuyển bằng bàn phím đến ô nào đó trong cột A vẫn xem được ghi chú nha tại vì trong lúc nhập và kiểm tra mình rất ít sử dụng chuột ( cái này cũng không quan trọng lắm, nếu không được thì thôi bởi vì như vầy đã là quá tốt)

(1) Bạn thêm 1 dòng lệnh chứa mũi tên vô macro trên & thử xem nha:

PHP:
    Target.NoteText StrC
    Target.Comment.Shape.TextFrame.AutoSize = True  '<=|'

(2) Lâu nay mình toàn dùng chuột mới coi được các Comments không hà; Bạn làm sao dùng bàn fím mà coi được Comments, hay zậy?
 
Cảm ơn bạn nha để mình thử xem sao nha.
(2) Lâu nay mình toàn dùng chuột mới coi được các Comments không hà; Bạn làm sao dùng bàn fím mà coi được Comments, hay zậy?

Trước giờ mình không có sài comments, mình chỉ nói là lúc nhập và kiểm tra thì ít dùng chuột thôi mà. Với lại khi ta dùng comments bằng vào data - validation - input message thì dùng bàn phím vẫn xem comments được nên mình mới hỏi vậy thôi ah. ^^!
 
Lần chỉnh sửa cuối:
Web KT
Back
Top Bottom