Lọc và trích xuất dữ liệu theo từng cột

Liên hệ QC

ntvtngoc

Thành viên mới
Tham gia
19/6/08
Bài viết
10
Được thích
5
Đệ có một bài toán thế này mà chưa giải được. Mong các Cao thủ, hảo hán trong "Giang Hồ" lưu trợ giúp đệ.

chả là đệ thường xuyên phải nhập hàng vào theo ngày trong một bảng, gồm rất nhiều hàng hóa hàng ngày
với bảng như sau
Cột A STT
Cột B Ngày tháng
Cột C Mã Vật Tư
Cột D Số lượng


. Sau đó đệ lại phải làm xuất ra một báo cáo mà ở đó gồm các cột như sau

cột A STT
Cột B Mã Vật Tư
Cột C Tên Vật Tư
Cột D Đơn Vị Tính
Cột E Ngày 1 trong tháng
Cột F Ngày 2 Trong Tháng
cho đến ngày 31 của tháng

bây giờ làm sao để mà nó tự lấy được số lượng ở cột số lượng trong sheet 1 nhập vào cột từng ngày tại sheet báo cáo, đáp ứng được 2 yêu cầu
- đúng ngày ở sheet 1 so với ngày ở cột tiêu đề
- đúng mã vật tư điền vào cùng dòng vật tư

BÀi toán này đệ nghĩ mãi không có cách giải, mong các huynh đệ giúp đỡ đệ
 
Sửa lại tiêu đề!
Em làm dữ liệu thô rồi up lên. Mọi người đỡ mất công. Còn muốn lấy theo ngày thì dùng hàm if(ngày=ngaythang,sl,0)
 
Đệ có một bài toán thế này mà chưa giải được. Mong các Cao thủ, hảo hán trong "Giang Hồ" lưu trợ giúp đệ.

chả là đệ thường xuyên phải nhập hàng vào theo ngày trong một bảng, gồm rất nhiều hàng hóa hàng ngày
với bảng như sau
Cột A STT
Cột B Ngày tháng
Cột C Mã Vật Tư
Cột D Số lượng


. Sau đó đệ lại phải làm xuất ra một báo cáo mà ở đó gồm các cột như sau

cột A STT
Cột B Mã Vật Tư
Cột C Tên Vật Tư
Cột D Đơn Vị Tính
Cột E Ngày 1 trong tháng
Cột F Ngày 2 Trong Tháng
cho đến ngày 31 của tháng

bây giờ làm sao để mà nó tự lấy được số lượng ở cột số lượng trong sheet 1 nhập vào cột từng ngày tại sheet báo cáo, đáp ứng được 2 yêu cầu
- đúng ngày ở sheet 1 so với ngày ở cột tiêu đề
- đúng mã vật tư điền vào cùng dòng vật tư

BÀi toán này đệ nghĩ mãi không có cách giải, mong các huynh đệ giúp đỡ đệ

Bạn đưa dữ liệu thô lên đi. Cái này có nhiều cách làm lắm. Pivotable là cách mình sẽ ưu tiên sử dụng, kế đến là sumproduct(), sumif(), sum(if()).
 
bây giờ làm sao để mà nó tự lấy được số lượng ở cột số lượng trong sheet 1 nhập vào cột từng ngày tại sheet báo cáo, đáp ứng được 2 yêu cầu
- đúng ngày ở sheet 1 so với ngày ở cột tiêu đề
- đúng mã vật tư điền vào cùng dòng vật tư
Tôi làm thử 1 ví dụ cho bạn xem nhé!
 

File đính kèm

  • ViduTam.xls
    26 KB · Đọc: 260
File ví dụ rất hoàn chỉnh đây!

PHP:
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
1 On Error Resume Next
 Dim iR As Integer
  
3 If Target.Row Mod 25 = 2 And Target.Column = 5 Then
    Range("C" & [c65432].End(xlUp).Row + 1) = Target
5 ElseIf Not Intersect(Target, Range("D2:D999")) Is Nothing Then
    Dim MaHH As String, Ten As String, DVT As String
7    Dim Rng As Range, bNgay As Byte
    Dim SLg As Double, lRow As Long, STt As Long
    
9    Set Rng = Range("C" & [c65432].End(xlUp).Row)
    MaHH = Rng.Value:                   STt = Rng.Offset(, -2)
11    If IsDate(Rng.Offset(, -1)) Then
        bNgay = Day(Rng.Offset(, -1)):      SLg = Target
13    Else
        MsgBox "BAN CAN NHAP NGAY":          Exit Sub
15    End If
    If MaHH = "" Then
17        MsgBox "BAN CAN NHAP MA HANG":          Exit Sub
    End If
19    Rng.Interior.ColorIndex = 39
    With Range("MaHg")
21        Set Rng = .Find(MaHH, LookIn:=xlValues)
        If Not Rng Is Nothing Then
23            Ten = Rng.Offset(, 1):      DVT = Rng.Offset(, 2)
        End If
25    End With
    With Sheets("Report")
27        lRow = .[a65432].End(xlUp).Row + 1
    
29        .Cells(lRow, 1) = STt:               .Cells(lRow, 2) = MaHH
        .Cells(lRow, 3) = Ten:               .Cells(lRow, 4) = DVT
31        .Cells(lRow, 4 + bNgay) = SLg
    End With
 End If
 
End Sub

Biếu thêm các bạn (những ai thích tiết kiệm tài nguyên) macro tự động tạo cách khoảng các ô Validation để tiện cho việc nhập liệu trên màn hình , sau đây:
Mã:
[B]Sub auto_Open()[/B] 
 Dim lRow As Long, bR As Byte
2 Sheets("DLieu").Select
 
 lRow = [c65432].End(xlUp).Row
4 bR = lRow Mod 27
 If bR > 2 Then
6    lRow = lRow + 27 - bR
    
 End If
8    Range("E" & lRow).Select
    Selection.Interior.ColorIndex = 35

10    With Selection.Validation
        .Delete
12        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
        xlBetween, Formula1:="=MaHg"
14        .IgnoreBlank = True
        .InCellDropdown = True
16    End With
[B]End Sub[/B]
 

File đính kèm

  • GPE.COM.rar
    16.2 KB · Đọc: 244
Lần chỉnh sửa cuối:
Xin chào Mr.SA_DQ
Tôi rất hâm mộ về viết code của bác,không biết bác có chiêu nào chỉ cho tôi học tập được không hi(từ mẫu giáo đến .....)
cám ơn bác,chúc bác nhiều sức khoẻ
 
Xin chào Mr.SA_DQ
Tôi rất hâm mộ về viết code của bác,không biết bác có chiêu nào chỉ cho tôi học tập được không hi(từ mẫu giáo đến .....)
cám ơn bác,chúc bác nhiều sức khoẻ

Bạn kích vào chữ VBA dưới dòng chữ ký của Bác Sa ý, bạn sẽ thấy những điều tuyệt vời mà bạn muốn có
Thân
 
lọc dữ liệu

vào trình đơn data chọn filter, chon autofilter )(&&@@)(&&@@
 
Bạn SA_DQ các bạn siêu VBA quá. Mình mới bước vào thế giới lập trình, bạn cũng đang đọc lý thuyết VBA, bạn có thể chỉ cho mình biết ý nghĩa của từng dòng trong công thức của bạn để từ ví dụ đó mình học VBA cho nhanh hơn được không? Cám ơn bạn nhiều
 
các bạn siêu VBA quá. Mình mới bước vào thế giới lập trình, bạn cũng đang đọc lý thuyết VBA, bạn có thể chỉ cho mình biết ý nghĩa của từng dòng trong công thức của bạn để từ ví dụ đó mình học VBA cho nhanh hơn được không? Cám ơn bạn nhiều

Đáng lý bạn nên sang BOX 'Trung tâm giải thích Code' lập Topic mới thì chúng ta sẽ iên chuyện hơn; Còn bây chừ thì phải nhờ MOD hay SMOD chuyển bài chúng ta qua đó mà thôi (Một khi chúng còn chưa bị xóa!)
Dù vậy mình cũng xin sơ lược vấn đề mà bạn quan tâm, như sau:

Vì là sơ lược nên mình đề cập đến macro Auto_Open() (Mình đã quýnh số cho các dòng lệnh, để chúng ta dễ theo dõi!)
D1: (tuy không được đánh số, nhưng ta phải ngầm hiểu): Khai báo 2 biến với 2 kiểu loại khác nhau. Chúng khác kiểu loại vì xài đúng nơi, đúng lúc sẽ tiết kiệm tài nguyên)
D2: Ta chọn & kích hoạt Sheet có tên là 'DLieu'
D3: Lấy dòng cuối có chứa dữ liệu của cột 'C' gán vô biến lRow đã khai báo
D4: lấy số dư của lRow chia cho 27 gán vô biến bR
D5: Nếu biến bR có trị >2 thì
D6: Số liệu của biến lRow + 27 - bR đem gán lại vô biến lRow
D7: Kết thúc 'Nếu'
Các dòng lệnh này nhằm định giá trị lRow sắp tới, một khi số dòng chứa dữ liệu của chúng ta vượt ngưỡng bội số của 27+2 dòng
VD chúng ta nhập sang dòng 30 thì lRow sẽ 30 + 27 - 3
. . . .
D8: Chọn & kích hoạt ô có tọa độ cột là 'E' & dòng là lRow
(Trong VD trên sẽ là 'E54')
D9: Tô màu nền có chỉ số màu 35 cho ô chọn này
D10: Với Validation của ô chọn
D11: Xóa nó đi (Xóa Validation) (Nếu ô chưa có gán Validation chắc sẽ được bỏ qua)
D12: Thêm Validation vô ô; thuộc loại List, . . . . Công thức được dùng là MaHg
('MaHg' - Đây là vùng được đặt tên từ trước trên bảntg tính; Cái dấu ". . . " thay thế cho các tùy chọn, lúc khác ta tìm hiểu sau-nếu có dịp)
D14 & D15: 1 số thuộc tính của Valiation được excel gán mặc định
D16: Kết thúc từ khóa Với


Chúc vui!:-=
 
Web KT
Back
Top Bottom